2022-11-17 11:43:33 +01:00
|
|
|
package facade;
|
|
|
|
|
2022-11-24 20:24:10 +01:00
|
|
|
import domain.Bot;
|
|
|
|
import domain.BotEasyFuchs;
|
|
|
|
import domain.BotEasyHenne;
|
|
|
|
import domain.BotHardFuchs;
|
|
|
|
import domain.BotHardHenne;
|
|
|
|
import domain.BotMediumFuchs;
|
|
|
|
import domain.BotMediumHenne;
|
|
|
|
import domain.Fuchs;
|
|
|
|
import domain.Hennen;
|
2022-11-17 11:43:33 +01:00
|
|
|
import domain.Spiel;
|
2022-11-24 20:24:10 +01:00
|
|
|
import domain.Spielfigur;
|
2022-11-17 11:43:33 +01:00
|
|
|
|
|
|
|
public class Spielsystem {
|
2022-11-17 15:44:07 +01:00
|
|
|
private String spielname;
|
2022-11-17 11:43:33 +01:00
|
|
|
private Spiel spiel;
|
2022-11-24 20:24:10 +01:00
|
|
|
private Spielfigur henne;
|
|
|
|
private Spielfigur fuchs;
|
2022-11-27 20:51:25 +01:00
|
|
|
private Spielfigur spieler;
|
|
|
|
private Spielfigur computer;
|
2022-11-24 20:24:10 +01:00
|
|
|
private Bot ki;
|
2022-11-27 20:51:25 +01:00
|
|
|
private boolean aktiverSpieler;
|
2022-11-17 11:43:33 +01:00
|
|
|
|
|
|
|
public Spielsystem(String spielname) throws Exception {
|
2022-11-24 20:24:10 +01:00
|
|
|
this.spiel = new Spiel(spielname);
|
|
|
|
this.henne = new Hennen();
|
|
|
|
this.fuchs = new Fuchs();
|
2022-11-17 11:43:33 +01:00
|
|
|
}
|
2022-11-27 20:51:25 +01:00
|
|
|
|
|
|
|
public void spielerBestimmen(int spielerwahl) {
|
2022-12-04 12:37:54 +01:00
|
|
|
if (spielerwahl == 1) {
|
2022-11-27 20:51:25 +01:00
|
|
|
spieler = new Fuchs();
|
2022-12-04 12:37:54 +01:00
|
|
|
} else if (spielerwahl == 2) {
|
2022-11-27 20:51:25 +01:00
|
|
|
spieler = new Hennen();
|
|
|
|
} else {
|
2022-12-04 12:37:54 +01:00
|
|
|
// Scheiße
|
2022-11-27 20:51:25 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void computerBestimmen(int spielerwahl) {
|
2022-12-04 12:37:54 +01:00
|
|
|
if (spielerwahl == 2) {
|
2022-11-27 20:51:25 +01:00
|
|
|
computer = new Fuchs();
|
2022-12-04 12:37:54 +01:00
|
|
|
} else if (spielerwahl == 1) {
|
2022-11-27 20:51:25 +01:00
|
|
|
computer = new Hennen();
|
|
|
|
} else {
|
2022-12-04 12:37:54 +01:00
|
|
|
// Scheiße
|
2022-11-27 20:51:25 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setAktivenSpieler(boolean überprüfung) {
|
2022-12-04 12:37:54 +01:00
|
|
|
if (überprüfung == true) {
|
|
|
|
// aktiverSpieler ist der Spieler
|
2022-11-27 20:51:25 +01:00
|
|
|
aktiverSpieler = true;
|
|
|
|
} else {
|
2022-12-04 12:37:54 +01:00
|
|
|
// aktiverSpieler ist der Computer
|
2022-11-27 20:51:25 +01:00
|
|
|
aktiverSpieler = false;
|
|
|
|
}
|
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-17 11:43:33 +01:00
|
|
|
public String getSpielname() {
|
2022-11-17 15:44:07 +01:00
|
|
|
return spielname;
|
2022-11-17 11:43:33 +01:00
|
|
|
}
|
2022-11-27 20:51:25 +01:00
|
|
|
|
|
|
|
public boolean getSpielfigurComputer() {
|
2022-12-04 12:37:54 +01:00
|
|
|
if (computer instanceof Hennen) {
|
2022-11-27 20:51:25 +01:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean getSpielfigurSpieler() {
|
2022-12-04 12:37:54 +01:00
|
|
|
if (spieler instanceof Hennen) {
|
2022-11-27 20:51:25 +01:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-24 20:24:10 +01:00
|
|
|
public Spielfigur getHenne() {
|
|
|
|
return henne;
|
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-24 20:24:10 +01:00
|
|
|
public Spielfigur getFuchs() {
|
|
|
|
return fuchs;
|
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-24 20:24:10 +01:00
|
|
|
public Bot getBot() {
|
|
|
|
return ki;
|
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-24 20:24:10 +01:00
|
|
|
public void printBoard() {
|
|
|
|
spiel.printBoard();
|
|
|
|
}
|
2022-12-03 20:37:56 +01:00
|
|
|
|
|
|
|
public boolean gewinnBedingungHennen() {
|
|
|
|
char[][] spielbrettArray = spiel.getSpielbrettArray();
|
|
|
|
|
2022-12-04 12:37:54 +01:00
|
|
|
if (spielbrettArray[0][4] == 'X' && spielbrettArray[0][5] == 'X' && spielbrettArray[0][6] == 'X'
|
|
|
|
&& spielbrettArray[1][4] == 'X' && spielbrettArray[1][5] == 'X' && spielbrettArray[1][6] == 'X'
|
|
|
|
&& spielbrettArray[2][4] == 'X' && spielbrettArray[2][5] == 'X' && spielbrettArray[2][6] == 'X') {
|
2022-12-03 20:37:56 +01:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
int spielfigurExistiert = 0;
|
|
|
|
|
2022-12-04 12:37:54 +01:00
|
|
|
for (int i = 0; i < spielbrettArray.length; i++) {
|
|
|
|
for (int k = 0; k < spielbrettArray[i].length; k++) {
|
|
|
|
if (spielbrettArray[i][k] == 'O') {
|
|
|
|
spielfigurExistiert++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (spielfigurExistiert >= 1) {
|
|
|
|
break;
|
2022-12-03 20:37:56 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-04 12:37:54 +01:00
|
|
|
if (spielfigurExistiert == 0) {
|
2022-12-03 20:37:56 +01:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean gewinnBedingungFuchs() {
|
|
|
|
char[][] spielbrettArray = spiel.getSpielbrettArray();
|
|
|
|
int spielfigurExistiert = 0;
|
|
|
|
|
2022-12-04 12:37:54 +01:00
|
|
|
for (int i = 0; i < spielbrettArray.length; i++) {
|
|
|
|
for (int k = 0; k < spielbrettArray[i].length; k++) {
|
|
|
|
if (spielbrettArray[i][k] == 'X') {
|
|
|
|
spielfigurExistiert++;
|
|
|
|
}
|
2022-12-03 20:37:56 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-04 12:37:54 +01:00
|
|
|
if (spielfigurExistiert <= 8) {
|
2022-12-03 20:37:56 +01:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-24 20:24:10 +01:00
|
|
|
public boolean isWon() {
|
2022-12-04 12:37:54 +01:00
|
|
|
if (gewinnBedingungHennen() == true) {
|
2022-12-03 20:37:56 +01:00
|
|
|
System.out.println("Hennen haben gewonnen");
|
|
|
|
whoWon();
|
|
|
|
return true;
|
|
|
|
} else if (gewinnBedingungFuchs() == true) {
|
|
|
|
System.out.println("Füchse haben gewonnen");
|
|
|
|
whoWon();
|
|
|
|
return true;
|
|
|
|
}
|
2022-11-24 20:24:10 +01:00
|
|
|
return false;
|
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-24 20:24:10 +01:00
|
|
|
public boolean isRunning() {
|
2022-12-04 12:37:54 +01:00
|
|
|
if (isWon() == false) {
|
2022-12-03 21:22:16 +01:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
2022-11-24 20:24:10 +01:00
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-24 20:24:10 +01:00
|
|
|
public boolean whoWon() {
|
2022-12-04 12:37:54 +01:00
|
|
|
if (gewinnBedingungFuchs() == true) {
|
|
|
|
if (spieler instanceof Fuchs) {
|
2022-12-03 20:37:56 +01:00
|
|
|
System.out.println("Spieler 1 gewinnt");
|
|
|
|
return true;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
System.out.println("Spieler 2 gewinnt");
|
|
|
|
return false;
|
2022-12-04 12:37:54 +01:00
|
|
|
}
|
2022-12-03 20:37:56 +01:00
|
|
|
} else {
|
2022-12-04 12:37:54 +01:00
|
|
|
if (spieler instanceof Hennen) {
|
2022-12-03 20:37:56 +01:00
|
|
|
System.out.println("Spieler 1 gewinnt");
|
|
|
|
return true;
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-12-03 20:37:56 +01:00
|
|
|
} else {
|
|
|
|
System.out.println("Spieler 2 gewinnt");
|
|
|
|
return false;
|
2022-12-04 12:37:54 +01:00
|
|
|
}
|
2022-12-03 20:37:56 +01:00
|
|
|
}
|
2022-11-24 20:24:10 +01:00
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-27 20:51:25 +01:00
|
|
|
public boolean isValidMove(String zug) {
|
2022-12-02 02:59:18 +01:00
|
|
|
int[] neueKoordinaten = berechneRichtigeKoordinaten(zug);
|
|
|
|
int neueStartY = neueKoordinaten[0];
|
|
|
|
int neueStartX = neueKoordinaten[1];
|
|
|
|
int neueZielY = neueKoordinaten[2];
|
|
|
|
int neueZielX = neueKoordinaten[3];
|
2022-12-04 12:37:54 +01:00
|
|
|
|
|
|
|
if (aktiverSpieler == true) {
|
2022-12-02 02:59:18 +01:00
|
|
|
return spieler.isValidMove(neueStartY, neueStartX, neueZielY, neueZielX, spiel);
|
2022-11-27 20:51:25 +01:00
|
|
|
} else {
|
2022-12-02 02:59:18 +01:00
|
|
|
return computer.isValidMove(neueStartY, neueStartX, neueZielY, neueZielX, spiel);
|
2022-11-27 20:51:25 +01:00
|
|
|
}
|
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-12-02 02:59:18 +01:00
|
|
|
public int[] berechneRichtigeKoordinaten(String zug) {
|
|
|
|
// Form vom Zug: "5,5 4,5"
|
|
|
|
|
|
|
|
// Zug wurde getätigt....
|
|
|
|
// Werte als Char
|
|
|
|
|
|
|
|
char startKoordinate1 = zug.charAt(0);
|
|
|
|
char startKoordinate2 = zug.charAt(2);
|
|
|
|
char zielKoordinate1 = zug.charAt(4);
|
|
|
|
char zielKoordinate2 = zug.charAt(6);
|
|
|
|
|
|
|
|
// Werte als int
|
|
|
|
int startKoord1 = Character.getNumericValue(startKoordinate1);
|
|
|
|
int startKoord2 = Character.getNumericValue(startKoordinate2);
|
|
|
|
int zielKoord1 = Character.getNumericValue(zielKoordinate1);
|
|
|
|
int zielKoord2 = Character.getNumericValue(zielKoordinate2);
|
|
|
|
|
|
|
|
int[] neueStartKoords = spiel.wandelPassendUm(startKoord1, startKoord2);
|
|
|
|
int[] neueZielKoords = spiel.wandelPassendUm(zielKoord1, zielKoord2);
|
|
|
|
|
|
|
|
// Werte angepasst auf unser Board, die Form des Zuges hat sich geändert von X,Y
|
|
|
|
// auf Y,X
|
2022-12-04 12:37:54 +01:00
|
|
|
int[] neueKoordinaten = { neueStartKoords[0], neueStartKoords[1], neueZielKoords[0], neueZielKoords[1] };
|
|
|
|
|
2022-12-02 02:59:18 +01:00
|
|
|
return neueKoordinaten;
|
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
|
|
|
// Noch falsche Ausgabe vom Zug (Array statt wie bei Eingabe vom Spieler)
|
|
|
|
// <---------------------------------------------------------------------
|
2022-11-24 20:24:10 +01:00
|
|
|
public String yourMove() {
|
2022-12-03 19:15:18 +01:00
|
|
|
String zug = ki.zugBestimmen(spiel, computer);
|
|
|
|
|
|
|
|
int neueStartY = Character.getNumericValue(zug.charAt(0));
|
|
|
|
int neueStartX = Character.getNumericValue(zug.charAt(2));
|
|
|
|
int neueZielY = Character.getNumericValue(zug.charAt(4));
|
|
|
|
int neueZielX = Character.getNumericValue(zug.charAt(6));
|
|
|
|
|
|
|
|
computer.moveSpielfigur(neueStartY, neueStartX, neueZielY, neueZielX, spiel);
|
|
|
|
|
|
|
|
return zug;
|
2022-11-24 20:24:10 +01:00
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-24 20:24:10 +01:00
|
|
|
public void myMove(String zug) {
|
2022-12-04 12:37:54 +01:00
|
|
|
char[][] spielbrettArray = spiel.getSpielbrettArray();
|
|
|
|
int counterObersteReihe = 0;
|
|
|
|
int counterMittlereReihe = 0;
|
|
|
|
int counterUntereReihe = 0;
|
|
|
|
|
2022-12-02 03:11:49 +01:00
|
|
|
int[] neueKoordinaten = berechneRichtigeKoordinaten(zug);
|
|
|
|
int neueStartY = neueKoordinaten[0];
|
|
|
|
int neueStartX = neueKoordinaten[1];
|
|
|
|
int neueZielY = neueKoordinaten[2];
|
|
|
|
int neueZielX = neueKoordinaten[3];
|
2022-12-04 12:37:54 +01:00
|
|
|
|
|
|
|
if (aktiverSpieler == true) {
|
2022-12-02 03:11:49 +01:00
|
|
|
spieler.moveSpielfigur(neueStartY, neueStartX, neueZielY, neueZielX, spiel);
|
2022-12-04 12:37:54 +01:00
|
|
|
// Check ob eine Henne respawnen kann, nachdem die oberste Reihe gefüllt wurde
|
|
|
|
if (spielbrettArray[0][4] == 'X' && spielbrettArray[0][5] == 'X' && spielbrettArray[0][6] == 'X') {
|
|
|
|
Hennen.hennenRespawn(spiel, counterObersteReihe);
|
|
|
|
counterObersteReihe++;
|
|
|
|
}
|
|
|
|
// Check ob die oberere und die mittlere Reihe gefüllt wurden mit dem Zug
|
|
|
|
if ((spielbrettArray[0][4] == 'X' && spielbrettArray[0][5] == 'X' && spielbrettArray[0][6] == 'X')
|
|
|
|
&& (spielbrettArray[1][4] == 'X' && spielbrettArray[1][5] == 'X' && spielbrettArray[1][6] == 'X')) {
|
|
|
|
Hennen.hennenRespawn(spiel, counterMittlereReihe);
|
|
|
|
counterMittlereReihe++;
|
|
|
|
}
|
|
|
|
// für die Vollständigkeit trotzdem dazu, obwohl der Fall nicht eintreten kann,
|
|
|
|
// da die Hennen dann gewonnen haben
|
|
|
|
if (spielbrettArray[0][4] == 'X' && spielbrettArray[0][5] == 'X' && spielbrettArray[0][6] == 'X'
|
|
|
|
&& spielbrettArray[1][4] == 'X' && spielbrettArray[1][5] == 'X' && spielbrettArray[1][6] == 'X'
|
|
|
|
&& spielbrettArray[2][4] == 'X' && spielbrettArray[2][5] == 'X' && spielbrettArray[2][6] == 'X') {
|
|
|
|
Hennen.hennenRespawn(spiel, counterUntereReihe);
|
|
|
|
counterUntereReihe++;
|
|
|
|
}
|
|
|
|
|
2022-11-27 20:51:25 +01:00
|
|
|
} else {
|
2022-12-02 03:11:49 +01:00
|
|
|
computer.moveSpielfigur(neueStartY, neueStartX, neueZielY, neueZielX, spiel);
|
2022-11-27 20:51:25 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-04 12:37:54 +01:00
|
|
|
public void start(boolean werBeginnt, int kiLevel) {
|
2022-11-24 20:24:10 +01:00
|
|
|
|
2022-11-27 20:51:25 +01:00
|
|
|
if (kiLevel == 0 && computer instanceof Hennen) {
|
2022-11-24 20:24:10 +01:00
|
|
|
ki = new BotEasyHenne();
|
2022-12-04 12:37:54 +01:00
|
|
|
} else if (kiLevel == 1 && computer instanceof Hennen) {
|
2022-11-24 20:24:10 +01:00
|
|
|
ki = new BotMediumHenne();
|
2022-11-27 20:51:25 +01:00
|
|
|
} else if (kiLevel == 2 && computer instanceof Hennen) {
|
2022-11-24 20:24:10 +01:00
|
|
|
ki = new BotHardHenne();
|
2022-11-27 20:51:25 +01:00
|
|
|
} else if (kiLevel == 0 && computer instanceof Fuchs) {
|
2022-11-24 20:24:10 +01:00
|
|
|
ki = new BotEasyFuchs();
|
2022-12-04 12:37:54 +01:00
|
|
|
} else if (kiLevel == 1 && computer instanceof Fuchs) {
|
2022-11-24 20:24:10 +01:00
|
|
|
ki = new BotMediumFuchs();
|
2022-11-27 20:51:25 +01:00
|
|
|
} else if (kiLevel == 2 && computer instanceof Fuchs) {
|
2022-11-24 20:24:10 +01:00
|
|
|
ki = new BotHardFuchs();
|
2022-12-04 12:37:54 +01:00
|
|
|
} else {
|
|
|
|
// Fehleingabe
|
2022-11-24 20:24:10 +01:00
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-28 16:13:39 +01:00
|
|
|
// UI.start(werBeginnt, kiLevel);
|
2022-11-17 15:44:07 +01:00
|
|
|
}
|
2022-12-04 12:37:54 +01:00
|
|
|
|
2022-11-17 11:43:33 +01:00
|
|
|
}
|