Hennen-und-Fuechse/src/facade/Spielsystem.java

302 lines
8.1 KiB
Java
Raw Normal View History

2022-11-17 11:43:33 +01:00
package facade;
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;
import domain.Spielfigur;
2022-11-17 11:43:33 +01:00
public class Spielsystem {
private String spielname;
2022-11-17 11:43:33 +01:00
private Spiel spiel;
private Spielfigur henne;
private Spielfigur fuchs;
private Spielfigur spieler;
private Spielfigur computer;
private Bot ki;
private boolean aktiverSpieler;
2022-11-17 11:43:33 +01:00
public Spielsystem(String spielname) throws Exception {
this.spiel = new Spiel(spielname);
this.henne = new Hennen();
this.fuchs = new Fuchs();
2022-11-17 11:43:33 +01:00
}
public void spielerBestimmen(int spielerwahl) {
if (spielerwahl == 1) {
spieler = new Fuchs();
} else if (spielerwahl == 2) {
spieler = new Hennen();
} else {
// Scheiße
}
}
public void computerBestimmen(int spielerwahl) {
if (spielerwahl == 2) {
computer = new Fuchs();
} else if (spielerwahl == 1) {
computer = new Hennen();
} else {
// Scheiße
}
}
public void setAktivenSpieler(boolean überprüfung) {
if (überprüfung == true) {
// aktiverSpieler ist der Spieler
aktiverSpieler = true;
} else {
// aktiverSpieler ist der Computer
aktiverSpieler = false;
}
}
2022-11-17 11:43:33 +01:00
public String getSpielname() {
return spielname;
2022-11-17 11:43:33 +01:00
}
public boolean getSpielfigurComputer() {
if (computer instanceof Hennen) {
return true;
} else {
return false;
}
}
public boolean getSpielfigurSpieler() {
if (spieler instanceof Hennen) {
return true;
} else {
return false;
}
}
public Spielfigur getHenne() {
return henne;
}
public Spielfigur getFuchs() {
return fuchs;
}
public Bot getBot() {
return ki;
}
public void printBoard() {
spiel.printBoard();
}
2022-12-03 20:37:56 +01:00
public boolean gewinnBedingungHennen() {
char[][] spielbrettArray = spiel.getSpielbrettArray();
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;
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
}
}
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;
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
}
}
if (spielfigurExistiert <= 8) {
2022-12-03 20:37:56 +01:00
return true;
}
return false;
}
public boolean isWon() {
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;
}
return false;
}
public boolean isRunning() {
if (isWon() == false) {
2022-12-03 21:22:16 +01:00
return true;
}
return false;
}
public boolean whoWon() {
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-03 20:37:56 +01:00
} else {
if (spieler instanceof Hennen) {
2022-12-03 20:37:56 +01:00
System.out.println("Spieler 1 gewinnt");
return true;
2022-12-03 20:37:56 +01:00
} else {
System.out.println("Spieler 2 gewinnt");
return false;
}
2022-12-03 20:37:56 +01:00
}
}
public boolean isValidMove(String zug) {
int[] neueKoordinaten = berechneRichtigeKoordinaten(zug);
int neueStartY = neueKoordinaten[0];
int neueStartX = neueKoordinaten[1];
int neueZielY = neueKoordinaten[2];
int neueZielX = neueKoordinaten[3];
if (aktiverSpieler == true) {
return spieler.isValidMove(neueStartY, neueStartX, neueZielY, neueZielX, spiel);
} else {
return computer.isValidMove(neueStartY, neueStartX, neueZielY, neueZielX, spiel);
}
}
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
int[] neueKoordinaten = { neueStartKoords[0], neueStartKoords[1], neueZielKoords[0], neueZielKoords[1] };
return neueKoordinaten;
}
// Noch falsche Ausgabe vom Zug (Array statt wie bei Eingabe vom Spieler)
// <---------------------------------------------------------------------
public String yourMove() {
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;
}
public void myMove(String zug) {
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];
if (aktiverSpieler == true) {
2022-12-02 03:11:49 +01:00
spieler.moveSpielfigur(neueStartY, neueStartX, neueZielY, neueZielX, spiel);
// 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++;
}
} else {
2022-12-02 03:11:49 +01:00
computer.moveSpielfigur(neueStartY, neueStartX, neueZielY, neueZielX, spiel);
}
}
public void start(boolean werBeginnt, int kiLevel) {
if (kiLevel == 0 && computer instanceof Hennen) {
ki = new BotEasyHenne();
} else if (kiLevel == 1 && computer instanceof Hennen) {
ki = new BotMediumHenne();
} else if (kiLevel == 2 && computer instanceof Hennen) {
ki = new BotHardHenne();
} else if (kiLevel == 0 && computer instanceof Fuchs) {
ki = new BotEasyFuchs();
} else if (kiLevel == 1 && computer instanceof Fuchs) {
ki = new BotMediumFuchs();
} else if (kiLevel == 2 && computer instanceof Fuchs) {
ki = new BotHardFuchs();
} else {
// Fehleingabe
}
// UI.start(werBeginnt, kiLevel);
}
2022-11-17 11:43:33 +01:00
}