From 1ff8b101ee828e9b148aef618b8b773dd20718ca Mon Sep 17 00:00:00 2001 From: Marc Michalsky Date: Mon, 27 Apr 2020 18:18:27 +0200 Subject: [PATCH] Zug nicht mehr statisch & CustomMouseListeners in Klasse "Feld" verschoben --- src/gfn/marc/Feld.java | 16 ++++++++++ src/gfn/marc/Spiel.java | 57 ++++++++++++++++++------------------ src/gfn/marc/Zug.java | 65 +++++++++++------------------------------ 3 files changed, 62 insertions(+), 76 deletions(-) diff --git a/src/gfn/marc/Feld.java b/src/gfn/marc/Feld.java index 2be9960..98e054c 100644 --- a/src/gfn/marc/Feld.java +++ b/src/gfn/marc/Feld.java @@ -1,6 +1,8 @@ package gfn.marc; import javax.swing.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; public class Feld { private static int feldAnzahl = 0; @@ -39,6 +41,20 @@ public class Feld { ((int) (rechteck.getPara3() * 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) { diff --git a/src/gfn/marc/Spiel.java b/src/gfn/marc/Spiel.java index afe48c4..58b1532 100644 --- a/src/gfn/marc/Spiel.java +++ b/src/gfn/marc/Spiel.java @@ -9,6 +9,7 @@ public class Spiel { private static Spieler spieler2; private Frame f; private Spielfeld spielfeld; + public static Zug zug; Spiel(Frame f, Spielfeld spielfeld) throws InterruptedException { @@ -37,7 +38,7 @@ public class Spiel { } } // Wenn der eingegebene Spielername vorhanden ist - if ( eingabe != null && !eingabe.equals("")) { + if (eingabe != null && !eingabe.equals("")) { for (Spieler spieler : Spieler.getSpieler()) { if (spieler != null) { if (eingabe.equals(spieler.getName())) { @@ -81,56 +82,56 @@ public class Spiel { } } - // Wenn der eingegebene Spielername vorhanden ist - if (eingabe != null && !eingabe.equals("")) { - for (Spieler spieler : Spieler.getSpieler()) { - if (spieler != null) { - if (eingabe.equals(spieler.getName())) { - spieler2 = spieler; - spieler2.setForm(new Kreis()); - break; + // Wenn der eingegebene Spielername vorhanden ist + if (eingabe != null && !eingabe.equals("")) { + for (Spieler spieler : Spieler.getSpieler()) { + if (spieler != null) { + if (eingabe.equals(spieler.getName())) { + spieler2 = spieler; + spieler2.setForm(new Kreis()); + break; + } } } + // Wenn kein Spielername eingegeben wurde + } else { + spieler2 = new Spieler(); + spieler2.setForm(new Kreis()); + spieler2.setName("Spieler2"); + } + // Wenn ein neuer Spielername eingegeben wurde + if (spieler2 == null) { + spieler2 = new Spieler(); + spieler2.setForm(new Kreis()); + spieler2.setName(eingabe); } - // Wenn kein Spielername eingegeben wurde - } else { - spieler2 = new Spieler(); - spieler2.setForm(new Kreis()); - spieler2.setName("Spieler2"); } - // Wenn ein neuer Spielername eingegeben wurde - if (spieler2 == null) { - spieler2 = new Spieler(); - spieler2.setForm(new Kreis()); - spieler2.setName(eingabe); - } - } // Neues Spielfeld anlegen - this.spielfeld =spielfeld; + this.spielfeld = spielfeld; -} + } public boolean spielen() { // Züge durchführen try { - Zug zug = new Zug(); // Zufälliger Spieler startet double startSpieler = Math.random(); while (Gewinner.ermittleGewinner(this) == null && Zug.getZugNummer() < 9) { + Spiel.zug = new Zug(); if (Zug.getZugNummer() % 2 == 0) { if (startSpieler <= 0.5d) { - Zug.macheZug(spieler1); + zug.macheZug(spieler1); } else { - Zug.macheZug(spieler2); + zug.macheZug(spieler2); } } else { if (startSpieler > 0.5d) { - Zug.macheZug(spieler1); + zug.macheZug(spieler1); } else { - Zug.macheZug(spieler2); + zug.macheZug(spieler2); } } } diff --git a/src/gfn/marc/Zug.java b/src/gfn/marc/Zug.java index 043a505..cadda23 100644 --- a/src/gfn/marc/Zug.java +++ b/src/gfn/marc/Zug.java @@ -1,90 +1,59 @@ package gfn.marc; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; public class Zug { - private static Frame f; - private static Spielfeld spielfeld; + private Frame f; private static int zugNummer = 0; - private static boolean zugLaeuft; - private static Spieler spieler; + private boolean zugLaeuft; + private Spieler spieler; public Zug() { - Zug.spielfeld = TicTacToe.getSpielfeld(); - Zug.f = TicTacToe.getF(); + this.f = TicTacToe.getF(); } // Zuganzahl hochzählen und Titelleiste setzen - public static void macheZug(Spieler spieler) { - Zug.spieler = spieler; - if (zugNummer == 9) { + public void macheZug(Spieler spieler) { + this.spieler = spieler; + if (Zug.zugNummer == 9) { Zug.zugNummer = 0; } Zug.zugNummer++; f.setTitle(spieler.getName() + " ist dran!"); - Zug.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)); - } - } + this.setZugLaeuft(true); // Auf setzen eines Feldes warten - while (Zug.isZugLaeuft()) { + while (this.isZugLaeuft()) { try { Thread.sleep(200); } catch (InterruptedException ie) { break; } } - - // MouseListener von allen Feldern entfernen - for (int i = 0; i < spielfeld.getFelder().length; i++) { - spielfeld.getFelder()[i].getLabel().removeMouseListener(new CustomMouseListener(i)); - } + f.repaint(); } public static int getZugNummer() { - return zugNummer; + return Zug.zugNummer; } - public static boolean isZugLaeuft() { - return zugLaeuft; + public boolean isZugLaeuft() { + return this.zugLaeuft; } - public static void setZugLaeuft(boolean zugLaeuft) { - Zug.zugLaeuft = zugLaeuft; + public void setZugLaeuft(boolean zugLaeuft) { + this.zugLaeuft = zugLaeuft; } public static void setZugNummer(int zugNummer) { Zug.zugNummer = zugNummer; } - // Lokale Klasse für CustomMouseListener - static class CustomMouseListener extends MouseAdapter { - - 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); - } + public Spieler getSpieler() { + return this.spieler; } - }