Hallo, ich steige gerade (malwieder) in Java ein (habe aber wirklich fast garkeine Ahnung mehr davon).
Als Einstieg wollte ich mir nen kleinen Minesweeperclone basteln. Weit bin ich zwar noch nicht aber ich wollte einfach mal grundsätzlich fragen ob mein Stiel einigermaßen ok ist. Ich hätte sozusagen gerne dass ihr meinen Code zerreist
Kurz vorweg noch: Mir ist schon aufgefallen, dass ich die Verwaltung der Felder etwas anders lösen sollte. Zur zeit mach ich das über eine ArrayList und ich denk mal, dass ich mir da eine Klasse ArrayField basteln werde.
Ansonsten würden mich auch ein paar Tipps in Bezug auf den ActionListener freuen, weil ich mir das nur irgendwie zusammengebastelt hab und noch nicht ganze verstehe warum es so kompliziert sein muss einen Button zu überwachen - Also immer her mit besseren Varianten (wenn möglich mit ner kleinen Erläuterung).
Dann hier jetzt mal der code:
Und schonmal Danke an alle die sich hier Mühe machen.
zero
Als Einstieg wollte ich mir nen kleinen Minesweeperclone basteln. Weit bin ich zwar noch nicht aber ich wollte einfach mal grundsätzlich fragen ob mein Stiel einigermaßen ok ist. Ich hätte sozusagen gerne dass ihr meinen Code zerreist
Kurz vorweg noch: Mir ist schon aufgefallen, dass ich die Verwaltung der Felder etwas anders lösen sollte. Zur zeit mach ich das über eine ArrayList und ich denk mal, dass ich mir da eine Klasse ArrayField basteln werde.
Ansonsten würden mich auch ein paar Tipps in Bezug auf den ActionListener freuen, weil ich mir das nur irgendwie zusammengebastelt hab und noch nicht ganze verstehe warum es so kompliziert sein muss einen Button zu überwachen - Also immer her mit besseren Varianten (wenn möglich mit ner kleinen Erläuterung).
Dann hier jetzt mal der code:
Code:
import java.util.ArrayList;
import java.util.List;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.Math.*;
public class MinenFeld
{
final static int dimX = 10; //soll die Anzahl an Feldern in x-Richtung angeben
final static int dimY = 10; //soll die Anzahl an Feldern in y-Richtung angeben
final static int buttonGroesse = 55;
final static Dimension bDim = new Dimension(buttonGroesse,buttonGroesse); //die Breite bzw. Hoehe der Buttons
final static double partOfBombs = 0.16; // 16% des Spielfeldes enthalten Bomben ist allerdings nochimmer zufällig
private static List<Target> tList = new ArrayList<Target>(); //das Feld in dem die Minen verwaltet werden sollen
static class Target extends JButton // Ein Button, der mit einigen Eigenschaften wie "istMine", "entschaerft", der Position im Spielfeld etc. erweitert werden soll
{
int x = 0; //beschreibt die Position auf dem Spielfeld
int y = 0;
private boolean isBomb = false;
Target(int x, int y)
{
this.x = x;
this.y = y;
this.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
onKlick(evt);
}
});
}
public void setBomb(boolean bomb)
{
this.isBomb = bomb;
}
public void onKlick(ActionEvent event)
{
if (this.isBomb) this.setText("X"); //hier soll aber irgendwann angezeigt werden ob eine Mine da war oder die Anzahl der benachbarten Minen
else this.setText("O");
}
}
private static void Spielfeld() // ist für den Aufbau der Gui bzw. eines Minenfeldes verantwortlich
{
JFrame f = new JFrame("Minenfeld");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize((dimX*buttonGroesse),(dimY*buttonGroesse));
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
f.setLocation( ((d.width - f.getSize().width) / 2), ((d.height - f.getSize().height) / 2) );
f.setResizable(false);
JPanel p = new JPanel(new GridLayout(dimX,dimY));
int help = 0; //soll die bereits vergebenen Bomben mitzaehlen
for (int i = 0; i < dimX; i++){ // erzeugen und positionieren der MinenButtons und Verteilung der Bomben
for (int j = 0; j < dimY; j++) {
Target t = new Target(i,j);
t.setSize(bDim);
t.setLocation(i*buttonGroesse,j*buttonGroesse);
p.add(t);
if (Math.random() < partOfBombs)
{
t.setBomb(true);
}
tList.add(t);
t.setText(t.x + "/" + t.y);
}
}
f.getContentPane().add(p);
f.setVisible(true);
}
public static void main(String[] args)
{
Spielfeld();
}
}
Und schonmal Danke an alle die sich hier Mühe machen.
zero