Zug nicht mehr statisch & CustomMouseListeners in Klasse "Feld" verschoben

This commit is contained in:
Marc Koch 2020-04-27 18:18:27 +02:00
parent 96a58c7b7e
commit 1ff8b101ee
Signed by: marc
GPG Key ID: AC2D4E00990A6767
3 changed files with 62 additions and 76 deletions

View File

@ -1,6 +1,8 @@
package gfn.marc; package gfn.marc;
import javax.swing.*; import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Feld { public class Feld {
private static int feldAnzahl = 0; private static int feldAnzahl = 0;
@ -39,6 +41,20 @@ public class Feld {
((int) (rechteck.getPara3() * 0.8)), ((int) (rechteck.getPara3() * 0.8)),
((int) (rechteck.getPara4() * 0.8))); ((int) (rechteck.getPara4() * 0.8)));
this.label.addMouseListener(new CustomMouseListener());
}
// Lokale Klasse für CustomMouseListener
class CustomMouseListener extends MouseAdapter {
// Auf Setzen des Feldes prüfen und ggf. Form zeichnen lassen
@Override
public void mouseClicked(MouseEvent mouseEvent) {
setZeichen(Spiel.zug.getSpieler().getForm());
Spiel.zug.setZugLaeuft(false);
getLabel().removeMouseListener(this);
}
} }
public void setZeichen(Form form) { public void setZeichen(Form form) {

View File

@ -9,6 +9,7 @@ public class Spiel {
private static Spieler spieler2; private static Spieler spieler2;
private Frame f; private Frame f;
private Spielfeld spielfeld; private Spielfeld spielfeld;
public static Zug zug;
Spiel(Frame f, Spielfeld spielfeld) throws InterruptedException { Spiel(Frame f, Spielfeld spielfeld) throws InterruptedException {
@ -116,21 +117,21 @@ public class Spiel {
// Züge durchführen // Züge durchführen
try { try {
Zug zug = new Zug();
// Zufälliger Spieler startet // Zufälliger Spieler startet
double startSpieler = Math.random(); double startSpieler = Math.random();
while (Gewinner.ermittleGewinner(this) == null && Zug.getZugNummer() < 9) { while (Gewinner.ermittleGewinner(this) == null && Zug.getZugNummer() < 9) {
Spiel.zug = new Zug();
if (Zug.getZugNummer() % 2 == 0) { if (Zug.getZugNummer() % 2 == 0) {
if (startSpieler <= 0.5d) { if (startSpieler <= 0.5d) {
Zug.macheZug(spieler1); zug.macheZug(spieler1);
} else { } else {
Zug.macheZug(spieler2); zug.macheZug(spieler2);
} }
} else { } else {
if (startSpieler > 0.5d) { if (startSpieler > 0.5d) {
Zug.macheZug(spieler1); zug.macheZug(spieler1);
} else { } else {
Zug.macheZug(spieler2); zug.macheZug(spieler2);
} }
} }
} }

View File

@ -1,92 +1,61 @@
package gfn.marc; package gfn.marc;
import java.awt.*; import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Zug { public class Zug {
private static Frame f; private Frame f;
private static Spielfeld spielfeld;
private static int zugNummer = 0; private static int zugNummer = 0;
private static boolean zugLaeuft; private boolean zugLaeuft;
private static Spieler spieler; private Spieler spieler;
public Zug() { public Zug() {
Zug.spielfeld = TicTacToe.getSpielfeld(); this.f = TicTacToe.getF();
Zug.f = TicTacToe.getF();
} }
// Zuganzahl hochzählen und Titelleiste setzen // Zuganzahl hochzählen und Titelleiste setzen
public static void macheZug(Spieler spieler) { public void macheZug(Spieler spieler) {
Zug.spieler = spieler; this.spieler = spieler;
if (zugNummer == 9) { if (Zug.zugNummer == 9) {
Zug.zugNummer = 0; Zug.zugNummer = 0;
} }
Zug.zugNummer++; Zug.zugNummer++;
f.setTitle(spieler.getName() + " ist dran!"); f.setTitle(spieler.getName() + " ist dran!");
Zug.setZugLaeuft(true); this.setZugLaeuft(true);
// Mouselistener auf Felder setzen, die noch nicht gesetzt wurden
for (int i = 0; i < spielfeld.getFelder().length; i++) {
if (!spielfeld.getFelder()[i].isGesetzt()) {
spielfeld.getFelder()[i].getLabel().addMouseListener(new CustomMouseListener(i));
}
}
// Auf setzen eines Feldes warten // Auf setzen eines Feldes warten
while (Zug.isZugLaeuft()) { while (this.isZugLaeuft()) {
try { try {
Thread.sleep(200); Thread.sleep(200);
} catch (InterruptedException ie) { } catch (InterruptedException ie) {
break; break;
} }
} }
f.repaint();
// MouseListener von allen Feldern entfernen
for (int i = 0; i < spielfeld.getFelder().length; i++) {
spielfeld.getFelder()[i].getLabel().removeMouseListener(new CustomMouseListener(i));
}
} }
public static int getZugNummer() { public static int getZugNummer() {
return zugNummer; return Zug.zugNummer;
} }
public static boolean isZugLaeuft() { public boolean isZugLaeuft() {
return zugLaeuft; return this.zugLaeuft;
} }
public static void setZugLaeuft(boolean zugLaeuft) { public void setZugLaeuft(boolean zugLaeuft) {
Zug.zugLaeuft = zugLaeuft; this.zugLaeuft = zugLaeuft;
} }
public static void setZugNummer(int zugNummer) { public static void setZugNummer(int zugNummer) {
Zug.zugNummer = zugNummer; Zug.zugNummer = zugNummer;
} }
// Lokale Klasse für CustomMouseListener public Spieler getSpieler() {
static class CustomMouseListener extends MouseAdapter { return this.spieler;
int i;
public CustomMouseListener(int i) {
this.i = i;
}
// Auf Setzen des Feldes prüfen und ggf. Form zeichnen lassen
@Override
public void mouseClicked(MouseEvent mouseEvent) {
spielfeld.getFelder()[i].setZeichen(spieler.getForm());
f.repaint();
Zug.setZugLaeuft(false);
} }
} }
}