Compare commits
5 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
1ff8b101ee | |
|
|
96a58c7b7e | |
|
|
8aa7e5e74b | |
|
|
dd061d182e | |
|
|
72fa1c57dd |
|
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 Marc Michalsky
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
@ -37,7 +38,7 @@ public class Spiel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Wenn der eingegebene Spielername vorhanden ist
|
// Wenn der eingegebene Spielername vorhanden ist
|
||||||
if ( eingabe != null && !eingabe.equals("")) {
|
if (eingabe != null && !eingabe.equals("")) {
|
||||||
for (Spieler spieler : Spieler.getSpieler()) {
|
for (Spieler spieler : Spieler.getSpieler()) {
|
||||||
if (spieler != null) {
|
if (spieler != null) {
|
||||||
if (eingabe.equals(spieler.getName())) {
|
if (eingabe.equals(spieler.getName())) {
|
||||||
|
|
@ -107,30 +108,30 @@ public class Spiel {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Neues Spielfeld anlegen
|
// Neues Spielfeld anlegen
|
||||||
this.spielfeld =spielfeld;
|
this.spielfeld = spielfeld;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean spielen() {
|
public boolean spielen() {
|
||||||
|
|
||||||
// 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,136 +1,63 @@
|
||||||
package gfn.marc;
|
package gfn.marc;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.awt.event.MouseListener;
|
|
||||||
|
|
||||||
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 CustomMouseListener[] cmls = new CustomMouseListener[9];
|
private Spieler spieler;
|
||||||
|
|
||||||
public Zug() {
|
public Zug() {
|
||||||
Zug.spielfeld = TicTacToe.getSpielfeld();
|
this.f = TicTacToe.getF();
|
||||||
Zug.f = TicTacToe.getF();
|
|
||||||
createMouseListeners();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Zuganzahl hochzählen und Titelleiste setzen
|
// Zuganzahl hochzählen und Titelleiste setzen
|
||||||
public static void macheZug(Spieler spieler) {
|
public void macheZug(Spieler spieler) {
|
||||||
if (zugNummer == 9) {
|
this.spieler = spieler;
|
||||||
|
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()) {
|
|
||||||
cmls[i].setSpieler(spieler);
|
|
||||||
spielfeld.getFelder()[i].getLabel().addMouseListener(cmls[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(cmls[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void createMouseListeners() {
|
|
||||||
for (int i = 0; i < spielfeld.getFelder().length; i++) {
|
|
||||||
cmls[i] = new CustomMouseListener(f, spielfeld.getFelder()[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 setF(Frame f) {
|
|
||||||
Zug.f = f;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setSpielfeld(Spielfeld spielfeld) {
|
|
||||||
Zug.spielfeld = spielfeld;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setZugNummer(int zugNummer) {
|
public static void setZugNummer(int zugNummer) {
|
||||||
Zug.zugNummer = zugNummer;
|
Zug.zugNummer = zugNummer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setCmls(CustomMouseListener[] cmls) {
|
public Spieler getSpieler() {
|
||||||
Zug.cmls = cmls;
|
return this.spieler;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class CustomMouseListener implements MouseListener {
|
|
||||||
|
|
||||||
private Frame f;
|
|
||||||
private Feld feld;
|
|
||||||
private Spieler spieler;
|
|
||||||
|
|
||||||
public CustomMouseListener(Frame f, Feld feld) {
|
|
||||||
this.f = f;
|
|
||||||
this.feld = feld;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSpieler(Spieler spieler) {
|
|
||||||
this.spieler = spieler;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Auf Setzen des Feldes prüfen und ggf. Form zeichnen lassen
|
|
||||||
@Override
|
|
||||||
public void mouseClicked(MouseEvent mouseEvent) {
|
|
||||||
this.feld.setZeichen(spieler.getForm());
|
|
||||||
f.repaint();
|
|
||||||
Zug.setZugLaeuft(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// notwendige Implementierungen ohne weitere Funktion
|
|
||||||
@Override
|
|
||||||
public void mousePressed(MouseEvent mouseEvent) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseReleased(MouseEvent mouseEvent) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseEntered(MouseEvent mouseEvent) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseExited(MouseEvent mouseEvent) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue