Moin,
ich habe Minesweeper "gebaut" und habe jetzt ein Button eingefügt, der das Spiel zurück setzen soll. Ich weiß aber nicht, wie ich am Besten das Spielfeld Resette.
[CODE lang="java" title="JPanel"]public class MinePanel extends JPanel implements MouseListener {
private int x, y;
int breite;
int hoehe;
int spalteX, spalteY;
int offset = 30;
private KlickBrettSpiel spiel = new MinesweeperSpiel();
public MinePanel() {
this.addMouseListener(this);
}
@Override
public void paintComponent(Graphics gr) {
super.paintComponent(gr);
if (spiel.verloren()) {
spiel.aufdecken();
gr.setColor(Color.red);
gr.fillRect(0, 0, this.getWidth(), this.getHeight());
} else if (spiel.gewonnen()) {
gr.setColor(Color.yellow);
gr.fillRect(0, 0, this.getWidth(), this.getHeight());
}
breite = this.getHeight();
hoehe = this.getWidth();
int hoeheNeu = this.getHeight() * 3 / 4;
int breitetNeu = this.getWidth() * 3 / 4;
if (breite < hoehe) {
breite = hoeheNeu;
hoehe = hoeheNeu;
} else if (breite > hoehe) {
breite = breitetNeu;
hoehe = breitetNeu;
} else {
breite = hoeheNeu;
hoehe = hoeheNeu;
}
spalteX = breite / spiel.getSpaltenZahl();
spalteY = hoehe / spiel.getZeilenZahl();
gr.setColor(Color.black);
for (int i = 0; i < spiel.getZeilenZahl() + 1; i++) {
gr.drawLine(offset, offset + i * hoehe / spiel.getZeilenZahl(), breite + offset,
offset + i * hoehe / spiel.getZeilenZahl());
}
for (int j = 0; j < spiel.getSpaltenZahl() + 1; j++) {
gr.drawLine(offset + j * breite / spiel.getSpaltenZahl(), offset,
offset + j * breite / spiel.getSpaltenZahl(), hoehe + offset);
}
for (int i = 0; i < spiel.getZeilenZahl(); i++) {
for (int j = 0; j < spiel.getSpaltenZahl(); j++) {
gr.drawString(" " + spiel.get(j, i), offset + j * breite / spiel.getSpaltenZahl(),
offset + (i + 1) * hoehe / spiel.getZeilenZahl());
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
x = ((e.getX() - offset) / spalteX);
y = ((e.getY() - offset) / spalteY);
if (SwingUtilities.isLeftMouseButton(e)) {
spiel.set(x, y);
spiel.revealZero(x, y);
}
} else if (SwingUtilities.isRightMouseButton(e)) {
spiel.markiere(x, y);
}
repaint();
}[/CODE]
[CODE lang="java" title="JFrame"]public class MineFrame extends JFrame implements ActionListener {
private MinePanel panel;
private JButton button;
public MineFrame() {
panel = new MinePanel();
this.add(panel);
this.setSize(600, 600);
button = new JButton("Neustart");
this.add(button, BorderLayout.SOUTH);
button.addActionListener(this);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new MineFrame();
}
@Override
public void actionPerformed(ActionEvent e) {
}[/CODE]
Vielleicht hat jemand ja ein Tipp.
Danke Zeppi
ich habe Minesweeper "gebaut" und habe jetzt ein Button eingefügt, der das Spiel zurück setzen soll. Ich weiß aber nicht, wie ich am Besten das Spielfeld Resette.
[CODE lang="java" title="JPanel"]public class MinePanel extends JPanel implements MouseListener {
private int x, y;
int breite;
int hoehe;
int spalteX, spalteY;
int offset = 30;
private KlickBrettSpiel spiel = new MinesweeperSpiel();
public MinePanel() {
this.addMouseListener(this);
}
@Override
public void paintComponent(Graphics gr) {
super.paintComponent(gr);
if (spiel.verloren()) {
spiel.aufdecken();
gr.setColor(Color.red);
gr.fillRect(0, 0, this.getWidth(), this.getHeight());
} else if (spiel.gewonnen()) {
gr.setColor(Color.yellow);
gr.fillRect(0, 0, this.getWidth(), this.getHeight());
}
breite = this.getHeight();
hoehe = this.getWidth();
int hoeheNeu = this.getHeight() * 3 / 4;
int breitetNeu = this.getWidth() * 3 / 4;
if (breite < hoehe) {
breite = hoeheNeu;
hoehe = hoeheNeu;
} else if (breite > hoehe) {
breite = breitetNeu;
hoehe = breitetNeu;
} else {
breite = hoeheNeu;
hoehe = hoeheNeu;
}
spalteX = breite / spiel.getSpaltenZahl();
spalteY = hoehe / spiel.getZeilenZahl();
gr.setColor(Color.black);
for (int i = 0; i < spiel.getZeilenZahl() + 1; i++) {
gr.drawLine(offset, offset + i * hoehe / spiel.getZeilenZahl(), breite + offset,
offset + i * hoehe / spiel.getZeilenZahl());
}
for (int j = 0; j < spiel.getSpaltenZahl() + 1; j++) {
gr.drawLine(offset + j * breite / spiel.getSpaltenZahl(), offset,
offset + j * breite / spiel.getSpaltenZahl(), hoehe + offset);
}
for (int i = 0; i < spiel.getZeilenZahl(); i++) {
for (int j = 0; j < spiel.getSpaltenZahl(); j++) {
gr.drawString(" " + spiel.get(j, i), offset + j * breite / spiel.getSpaltenZahl(),
offset + (i + 1) * hoehe / spiel.getZeilenZahl());
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
x = ((e.getX() - offset) / spalteX);
y = ((e.getY() - offset) / spalteY);
if (SwingUtilities.isLeftMouseButton(e)) {
spiel.set(x, y);
spiel.revealZero(x, y);
}
} else if (SwingUtilities.isRightMouseButton(e)) {
spiel.markiere(x, y);
}
repaint();
}[/CODE]
[CODE lang="java" title="JFrame"]public class MineFrame extends JFrame implements ActionListener {
private MinePanel panel;
private JButton button;
public MineFrame() {
panel = new MinePanel();
this.add(panel);
this.setSize(600, 600);
button = new JButton("Neustart");
this.add(button, BorderLayout.SOUTH);
button.addActionListener(this);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new MineFrame();
}
@Override
public void actionPerformed(ActionEvent e) {
}[/CODE]
Vielleicht hat jemand ja ein Tipp.
Danke Zeppi