Hallo,
Ich arbeite zur Zeit an einem Schulprojekt. Wir programmieren in einer Gruppe Schiffeversenken und ich bin für die GUI zuständig.
Mittlerweile habe ich einen Startbildschirm. Dort kann ich per button wählen ob ich die Beschreibung lesen oder das Spiel Starten möchte. Das funktioniert auch sehr gut. Nun möchte ich von meinem Spiel, wenn sich die beiden Felder aufgebaut haben, über einen Button die Beschreibung einsehen können. und von der Beschreibung auch wieder zurück zum Spiel. Im Moment kann ich dann nur das Spiel neu starten. Das Problem dabei ist nun wenn ich vom Spiel die Beschreibung aufrufe verschwindet das Spiel und die Beschreibung erscheint(das soll ja so sein) dann geh ich wieder zum Spiel (Die Beschreibung verschwindet und das Spielfeld wird angezeigt) das kann ich 2 mal machen und danach verschwindet meine Beschreibung nicht mehr, aber das Spiel baut sich hinter dem Canvas der Beschreibung auf wenn ich dann noch einmal auf Beschreibung clicke hängt sich die jar ganz auf.
Ich habe hier einmal den Code der Gui eingefügt.
Ich würde mich rießig freuen, wenn mir jemand meinen Fehler aufzeigt oder mir einen Tipp gibt woran es liegen könnte.
Dankeschön schon mal
Grüße Ric
Ich arbeite zur Zeit an einem Schulprojekt. Wir programmieren in einer Gruppe Schiffeversenken und ich bin für die GUI zuständig.
Mittlerweile habe ich einen Startbildschirm. Dort kann ich per button wählen ob ich die Beschreibung lesen oder das Spiel Starten möchte. Das funktioniert auch sehr gut. Nun möchte ich von meinem Spiel, wenn sich die beiden Felder aufgebaut haben, über einen Button die Beschreibung einsehen können. und von der Beschreibung auch wieder zurück zum Spiel. Im Moment kann ich dann nur das Spiel neu starten. Das Problem dabei ist nun wenn ich vom Spiel die Beschreibung aufrufe verschwindet das Spiel und die Beschreibung erscheint(das soll ja so sein) dann geh ich wieder zum Spiel (Die Beschreibung verschwindet und das Spielfeld wird angezeigt) das kann ich 2 mal machen und danach verschwindet meine Beschreibung nicht mehr, aber das Spiel baut sich hinter dem Canvas der Beschreibung auf wenn ich dann noch einmal auf Beschreibung clicke hängt sich die jar ganz auf.
Ich habe hier einmal den Code der Gui eingefügt.
Ich würde mich rießig freuen, wenn mir jemand meinen Fehler aufzeigt oder mir einen Tipp gibt woran es liegen könnte.
Dankeschön schon mal
Grüße Ric
Java:
import java.awt.*;
import java.awt.event.*;
public class FENSTER extends Frame{
//größe Fenster
private int x;
private int y;
private static Frame fenster = null;
private static int kästchen1 [][];
private static int hoehe1 = 10;
private static int breite1 = 10;
static Button SpielStarten = new Button(); // Button starten @ startscreen
static Button Beschreibung = new Button(); // Butto Beschreibung @startscreen
static Button Exit = new Button(); // Buttonexit for all
static Button BeschreibungSpiel = new Button(); // Button Beschreibung wäh Spiels
static Button SpielStartenBeschreibung = new Button(); // Button Spiel Starten aus der Beschreibung
static Canvas beschreibung = new Canvas(); // Canvas Beschreibung
static Canvas Feld1 = new Canvas (); // Canvas Feld1
static Canvas Feld2 = new Canvas(); // Canvas Feld2
private static Canvas feldLinks[][] = new Canvas[breite1][hoehe1];
private static Canvas feldRechts[][] = new Canvas[breite1][hoehe1];
public FENSTER(){
if (fenster == null) // Object wird nur erstellt wenn noch kein Fester offen ist
{
fenster = new Frame("Battleshipdown");
fenster. setResizable (false);
fenster. setSize (400, 150);
fenster. setVisible (true);
fenster. setLayout (null);
fenster. setBackground (Color. black);
fenster. addWindowListener(new WindowAdapter()
{
public void windowClosing (WindowEvent event)
{
System.exit(0);
};
}
);
//Erstellt den Startbutton
SpielStarten.setBounds(20, 63, 100, 50);
SpielStarten.setLabel("Spiel Starten");
SpielStarten.setBackground(Color.red);
SpielStarten.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) {
SpielStarten(evt);
}
});
fenster.add(SpielStarten);
//Erstellt den Button für die Beschreibung
Beschreibung.setBounds (140, 63, 100, 50);
Beschreibung.setLabel("Beschreibung");
Beschreibung.setBackground(Color.red);
Beschreibung.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
beschreibungAnzeigenStart(evt);
}
}
);
fenster.add(Beschreibung);
}
}
//startet das Spiel vom Startscreen
public static void SpielStarten(ActionEvent evt)
{
fenster.setSize(1200, 800); //ändert das Fenster in Spielgröße
fenster.setBackground(Color.yellow);
linkesFeldZeichnen();
rechtesFeldZeichnen();
fenster.remove(SpielStarten);
fenster.remove(Beschreibung);
//erstellt den Beschreibungs Button um die Beschreibung währrend des Spiels zu aufzurufen
BeschreibungSpiel.setBounds(1100, 25, 100, 50);
BeschreibungSpiel.setLabel("Beschreibung");
BeschreibungSpiel.setBackground(Color.lightGray);
BeschreibungSpiel.addActionListener (new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
beschreibungAnzeigenSpiel(evt);
}
}
);
fenster.add(BeschreibungSpiel);
}
//zeigt die Beschreibung währrend des Spiels an
public static void beschreibungAnzeigenSpiel(ActionEvent evt)
{
fenster.remove(BeschreibungSpiel);
fenster.remove(Beschreibung);
fenster.remove(SpielStarten);
//BeschreibungSpiel.setVisible(false);
//Beschreibung.setVisible(false); //blendet den Beschreibung button aus
SpielStarten.setVisible(false);
//SpielStartenBeschreibung.setVisible(true);
SpielStartenBeschreibung.setBounds(450, 650, 100, 50);
SpielStartenBeschreibung.setLabel("Spiel Starten");
SpielStartenBeschreibung.setBackground(Color.red);
SpielStartenBeschreibung.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) {
SpielStartenBeschreibung(evt);
}
});
fenster.add(SpielStartenBeschreibung);
/*neues Graphik Objekt wird erstellt
in diesem wird dann das Textfeld erstellt
*/
beschreibung = new Canvas()
{
public void paint (Graphics g)
{
Graphics2D g2d=(Graphics2D)g;
//Font erzeugen
Font myFont=new Font("Arial", Font.ITALIC|Font.PLAIN, 18); //erstellt das Text Objekt
String s="Die Beschreibung wird mit der Vollversion 1.0 Veröffentlicht!"; //fügt den Text ein
g2d.setFont( myFont ); //Schriftart setzen
g2d.drawString(s,50,50); //String rendern
}
};
beschreibung. setBackground(Color.lightGray);
beschreibung. setSize (600, 600); //setzt größe des Text Feldes
beschreibung. setLocation (200, 50); //setzt den Ort des Text Feldes
fenster. add (beschreibung); //fügt das Text Feld zum Fenster hinzu
for (int j = 0; j < hoehe1; j++)
{
for (int k = 0; k < breite1; k++)
{
fenster.remove(feldLinks[j][k]);
}
}
fenster.remove(Feld1);
for (int l = 0; l < hoehe1; l++)
{
for (int o = 0; o < breite1; o++)
{
fenster.remove(feldRechts[l][o]);
}
}
fenster.remove(Feld2);
}
//einblenden der Beschreibung am Start
public static void beschreibungAnzeigenStart(ActionEvent evt)
{
fenster.setSize(700, 800);
fenster.setBackground(Color.lightGray); //ändert das Fenster passend für die Beschreibung
SpielStartenBeschreibung.setBounds(450, 650, 100, 50);
SpielStartenBeschreibung.setLabel("Spiel Starten");
SpielStartenBeschreibung.setBackground(Color.red);
SpielStartenBeschreibung.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) {
SpielStartenBeschreibung(evt);
}
});
fenster.add(SpielStartenBeschreibung);
fenster.remove(Beschreibung);
fenster.remove(SpielStarten);
beschreibung = new Canvas() /*neues Graphik Objekt wird erstellt
in diesem wird dann das Textfeld erstellt
*/
{
public void paint(Graphics g) {
Graphics2D g2d=(Graphics2D)g;
//Font erzeugen
Font myFont=new Font("Arial", Font.ITALIC|Font.PLAIN, 18); //erstellt das Text Objekt
String s="Die Beschreibung wird mit der Vollversion 1.0 Veröffentlicht!"; //fügt den Text ein
g2d.setFont( myFont ); //Schriftart setzen
g2d.drawString(s,50,50); //String rendern
}
};
beschreibung. setSize (600, 600); //setzt größe des Text Feldes
beschreibung. setLocation (0, 50); //setzt den Ort des Text Feldes
fenster. add (beschreibung); //fügt das Text Feld zum Fenster hinzu
}
//startet das Spiel aus der Beschreibung heraus
public static void SpielStartenBeschreibung(ActionEvent evt)
{
fenster.setSize(1200, 800); //ändert das Fenster in Spielgröße
fenster.setBackground(Color.yellow);
linkesFeldZeichnen();
rechtesFeldZeichnen();
fenster.remove(SpielStarten);
fenster.remove(Beschreibung);
fenster.remove(SpielStartenBeschreibung);
//erstellt den Beschreibungs Button um die Beschreibung währrend des Spiels aufzurufen
BeschreibungSpiel.setBounds(1100, 25, 100, 50);
BeschreibungSpiel.setLabel("Beschreibung");
BeschreibungSpiel.setBackground(Color.lightGray);
BeschreibungSpiel.addActionListener (new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
beschreibungAnzeigenSpiel(evt);
}
}
);
fenster.add(BeschreibungSpiel);
fenster.remove(beschreibung);
}
/**
* Zeichnet das linke Spielfeld
* dieses ist 10 mal 10 groß und nur grau gefüllt mit schwarzen Trennlinien
*
*/
public static void linkesFeldZeichnen(){
int x = 55;
int y = 85;
//int name = 0;
for (int j = 0; j < hoehe1; j++)
{
for (int k = 0; k < breite1; k++)
{
//name++;
feldLinks[j][k] = new Canvas ()
{
public void paint (Graphics g)
{
g. setColor (Color. cyan);
g. clearRect (0, 0, 47, 47);
g. fillRect (0, 0, 47, 47);
}
};
y = y+50;
feldLinks[j][k]. setSize (47, 47);
feldLinks[j][k]. setLocation (x, y);
//System.out.println(y);
fenster. add (feldLinks[j][k]);
//System.out.println("added");
//System.out.println(k);
//System.out.println(name);
}
x = x+50;
y = 85;
}
Feld1 = new Canvas ()
{
public void paint (Graphics g)
{
g. setColor (Color. black);
g. clearRect (0,00, 507, 507);
g. fillRect (0,0,507,507);
}
};
//Feld1. setVisible (true);
Feld1. setSize (510, 510);
Feld1. setLocation (50, 130);
fenster. add (Feld1);
}
/**
* Zeichnet das rechte Spielfeld
* dieses ist 10 mal 10 groß und nur grau gefüllt mit schwarzen Trennlinien
*
*/
public static void rechtesFeldZeichnen()
{
Feld2 = new Canvas ()
{
public void paint (Graphics g)
{
g. setColor (Color. black);
g. clearRect (0,00, 507, 507);
g. fillRect (0,0,507,507);
}
};
int c = 655;
int v = 85;
for (int l = 0; l < hoehe1; l++)
{
for (int o = 0; o < breite1; o++)
{
feldRechts[l][o] = new Canvas ()
{
public void paint (Graphics g)
{
g. setColor (Color. cyan);
g. clearRect (0, 0, 47, 47);
g. fillRect (0, 0, 47, 47);
}
};
v = v+50;
//feldRechts[l][o]. setVisible (true);
feldRechts[l][o]. setSize (47, 47);
feldRechts[l][o]. setLocation (c, v);
//System.out.println(y);
fenster. add (feldRechts[l][o]);
//System.out.println("added");
//System.out.println(o);
}
c = c+50;
v = 85;
}
//Feld2. setVisible (true);
Feld2. setSize (507, 507);
Feld2. setLocation (650, 130);
fenster. add (Feld2);
}
/**
* Setzt das Kästchen an der Stelle X, Y auf Orange
*/
public void markiereGetroffen(int x, int y)
{
Graphics g=feldLinks[x][y].getGraphics();
g.setColor (Color. orange); // ändert die aktuelle Farbe
g.clearRect (0, 0, 47, 47);
g.fillRect (0, 0, 47, 47); //zeichnet das Kästchen neu in der neu gesetzten Farbe
//feldLinks[x][y]. setVisible (true); //setzt das kästchen sichtbar
}