hallo,
ich habe seit letzten sommer informatik in der schule und muss bis dienstag ein java-applet erstellt haben. ist ein projekt was wie eine arbeit zählt. hab mir jetzt was gesucht aber ich weiß nicht, ob die kommentare dazu richtig sind oder ob ihr verbesserungen habt. außerdem hab ich überlegt, ob man die 2. datei auch in die erste mit reinschreiben kann, weil wir eig noch nie mit 2 verschiedenen dateien gearbeitet haben.. mit diesem GridBagLayout zwar auch nicht aber ich weiß nicht ob es ohne auch geht.
hier mal der inhalt meiner beiden dateien:
und
danke schon mal
ich habe seit letzten sommer informatik in der schule und muss bis dienstag ein java-applet erstellt haben. ist ein projekt was wie eine arbeit zählt. hab mir jetzt was gesucht aber ich weiß nicht, ob die kommentare dazu richtig sind oder ob ihr verbesserungen habt. außerdem hab ich überlegt, ob man die 2. datei auch in die erste mit reinschreiben kann, weil wir eig noch nie mit 2 verschiedenen dateien gearbeitet haben.. mit diesem GridBagLayout zwar auch nicht aber ich weiß nicht ob es ohne auch geht.
hier mal der inhalt meiner beiden dateien:
Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Dimension;
/** Battleship class definiert ein Applet, das das Spielbrett mit
100 Buttons enthält, einen Button, der ein neues Spiel startet
und eine Anzeige über die aktuelle Situation im Spiel.
*/
public class Schiffeversenken extends Applet implements ActionListener
{
// Anfang Variablen
private Datei buttons[][];
private int buttonStatus[][];
private int Schifftabelle[][];
private int zerstörteSchiffe;
private Button Neustart;
private TextField status;
private static final int EMPTY=0, NO_SHIP=1, SHIP=2;
private static final int Schiffanzahl = 15;
// Ende Variablen
/** Schiffeversenken contructor */
public Schiffeversenken() {
super();
buttons = new Datei[10][10];
buttonStatus = new int[10][10];
Schifftabelle = new int[10][10];
}
// Anfang Komponenten
/** Überprüft den Spielstatus und updated ihn */
void Status(int x, int y) {
buttonStatus[x][y] = Schifftabelle[x][y];
if (buttonStatus[x][y] == SHIP)
zerstörteSchiffe++;
showStatus();
}
/** Überprüft, ob ein Schiff getroffen wurde */
String Bom(int x, int y) {
Status(x, y);
if (Schifftabelle[x][y] == SHIP)
return new String("X");
else
return new String("O");
}
/** Zeigt den Spielstatus in der Anzeige an */
private void showStatus() {
if (zerstörteSchiffe == Schiffanzahl)
status.setText("Gewonnen!");
else
status.setText(Schiffanzahl-zerstörteSchiffe + " Schiffe noch.");
}
public void init() {
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH; // Höhe u. Breite werden so verändert,
// dass sie den Anzeigebereich ganz ausfüllen
c.weightx = 1.0; // Breite,1.0:Komponente erhält den gesamten
//zusätzlichen Platz u. das Gitter seine Breite.
c.weighty = 1.0; // Höhe, 1.0: ""
GridBagLayout g = new GridBagLayout(); //GridBagLayout erstellen (Gitter zur Anordnung)
setLayout(g);
g.setConstraints(this, c);
// Fügt Main panel hinzu
Panel MainPanel = new Panel(g);
g.setConstraints(MainPanel, c);
add(MainPanel);
// Fügt Button panel für den Start Button und die Anzeige hinzu
c.fill = GridBagConstraints.VERTICAL;
Panel ButtonPanel = new Panel(g);
g.setConstraints(ButtonPanel, c);
MainPanel.add(ButtonPanel);
// Fügt Grid panel für die 100 Spielbuttons hinzu
c.fill = GridBagConstraints.BOTH; //Höhe u. Breite der Komponente füllen
//Anzeigeberech immer aus
Panel GridPanel = new Panel(g);
g.setConstraints(GridPanel, c);
MainPanel.add(GridPanel);
// Ende Komponenten
// erstellt die 100 Buttons
for (int y = 0; y < 10; y++) {
c.gridwidth = 1; //definiert Anzahl der Gitterzellen,
// über die sich der Anzeigebereich in der Breite erstreckt
for (int x = 0; x < 10; x++) {
buttonStatus[x][y] = EMPTY;
buttons[x][y] = new Datei(this, x, y);
if (x == 9)
c.gridwidth = GridBagConstraints.REMAINDER; //Vergibt den Rest der aktuellen
// Zeile
g.setConstraints(buttons[x][y], c);
GridPanel.add(buttons[x][y]);
}
}
/** Erstellt Schiffe für das Spielfeld */
int z = 0;
int x, y;
while (z < Schiffanzahl) {
x = (int)Math.round(Math.random() * 9.0);
y = (int)Math.round(Math.random() * 9.0);
if (Schifftabelle[x][y] == EMPTY) {
Schifftabelle[x][y] = SHIP;
z++;
}
}
c.fill = GridBagConstraints.NONE; // unverändert
c.anchor = GridBagConstraints.CENTER; //Ausrichtung im Fenster zentriert
// Fügt die Anzeige zum Button panel hinzu
status = new TextField();
showStatus();
status.setEditable(false);
g.setConstraints(status, c);
ButtonPanel.add(status);
c.gridwidth = GridBagConstraints.REMAINDER; //weist der Komponente den Rest
// der aktuellen Zeile zu // Spalte/Zeile zu
// Fügt den Start Button zum Button panel hinzu
Neustart = new Button("Spiel starten");
Neustart.addActionListener(this);
Neustart.setActionCommand("Neustart");
g.setConstraints(Neustart, c);
ButtonPanel.add(Neustart);
}
public void start()
{
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
String command = e.getActionCommand();
if (source instanceof Button) {
if (command == "Neustart") {
for (int y = 0; y < 10; y++)
for (int x = 0; x < 10; x++) {
buttonStatus[x][y] = EMPTY;
buttons[x][y].setLabel("");
}
zerstörteSchiffe = 0;
showStatus();
}
}
}
/** Unterbricht die Ausführung */
public void stop()
{
}
public void destroy()
{
}
/** gibt die Infos zum Applet zurück */
public String getAppletInfo()
{
return new String("Schiffe versenken");
}
public void paint(Graphics g) {
for (int y = 0; y < 10; y++)
for (int x = 0; x < 10; x++) {
buttons[x][y].paint(g);
}
status.paint(g);
Neustart.paint(g);
}
}
und
Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
/* Datei definiert jeweils einen der kleinen Buttons
*/
class Datei extends Button implements ActionListener
{
private Schiffeversenken Spielfeld;
private int x,y; // um Spielfeld zu sagen, um welche Button es sich handelt
public Datei(Schiffeversenken b, int xkoordinate, int ykoordinate) {
super();
addActionListener(this);
Spielfeld = b;
x = xkoordinate;
y = ykoordinate;
}
/** Geräusch, wenn Button schon gedrückt wurde */
public void actionPerformed(ActionEvent e) {
if (getLabel() == "") {
setLabel(Spielfeld.Bom(x,y));
} else {
Toolkit.getDefaultToolkit().beep();
}
}
}
danke schon mal