diff --git a/src/domain/Fuchs.java b/src/domain/Fuchs.java index 45456f9..b2c5d3c 100644 --- a/src/domain/Fuchs.java +++ b/src/domain/Fuchs.java @@ -18,6 +18,7 @@ public class Fuchs extends Spielfigur { int schritteY = Math.abs(neueStartY - neueZielY); int schritteX = Math.abs(neueStartX - neueZielX); int anzahlSchritteZähler = 0; + boolean henneInSafeZone; ArrayList zuTöteneHennen = new ArrayList<>(); //System.out.println("schritte Y: " + schritteY); @@ -52,8 +53,14 @@ public class Fuchs extends Spielfigur { //System.out.println(spiel.getWertAusArray(i, neueZielX)); // ungerade Schritte müssen freie Felder sein if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(i, neueZielX) == 'X') { - zuTöteneHennen.add(i); - zuTöteneHennen.add(neueZielX); + henneInSafeZone = henneInSafeZone(i, neueZielX); + if (henneInSafeZone == true) { + System.out.println("Henne in Safe Zone = nicht killbar"); + return false; + } else { + zuTöteneHennen.add(i); + zuTöteneHennen.add(neueZielX); + } // gerade Schritte müssen freie Felder sein } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(i, neueZielX) == '\u25A1') { @@ -70,8 +77,14 @@ public class Fuchs extends Spielfigur { anzahlSchritteZähler++; // ungerade Schritte müssen freie Felder sein if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(i, neueZielX) == 'X') { - zuTöteneHennen.add(i); - zuTöteneHennen.add(neueZielX); + henneInSafeZone = henneInSafeZone(i, neueZielX); + if (henneInSafeZone == true) { + System.out.println("Henne in Safe Zone = nicht killbar"); + return false; + } else { + zuTöteneHennen.add(i); + zuTöteneHennen.add(neueZielX); + } // gerade Schritte müssen freie Felder sein } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(i, neueZielX) == '\u25A1') { @@ -92,8 +105,14 @@ public class Fuchs extends Spielfigur { anzahlSchritteZähler++; // ungerade Schritte müssen freie Felder sein if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(neueZielY, i) == 'X') { - zuTöteneHennen.add(neueZielY); - zuTöteneHennen.add(i); + henneInSafeZone = henneInSafeZone(neueZielY, i); + if (henneInSafeZone == true) { + System.out.println("Henne in Safe Zone = nicht killbar"); + return false; + } else { + zuTöteneHennen.add(neueZielY); + zuTöteneHennen.add(i); + } // gerade Schritte müssen freie Felder sein } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(neueZielY, i) == '\u25A1') { @@ -110,8 +129,14 @@ public class Fuchs extends Spielfigur { anzahlSchritteZähler++; // ungerade Schritte müssen freie Felder sein if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(neueZielY, i) == 'X') { - zuTöteneHennen.add(neueZielY); - zuTöteneHennen.add(i); + henneInSafeZone = henneInSafeZone(neueZielY, i); + if (henneInSafeZone == true) { + System.out.println("Henne in Safe Zone = nicht killbar"); + return false; + } else { + zuTöteneHennen.add(neueZielY); + zuTöteneHennen.add(i); + } // gerade Schritte müssen freie Felder sein } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(neueZielY, i) == '\u25A1') { @@ -132,8 +157,14 @@ public class Fuchs extends Spielfigur { anzahlSchritteZähler++; // ungerade Schritte müssen freie Felder sein if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') { - zuTöteneHennen.add(y); - zuTöteneHennen.add(x); + henneInSafeZone = henneInSafeZone(y, x); + if (henneInSafeZone == true) { + System.out.println("Henne in Safe Zone = nicht killbar"); + return false; + } else { + zuTöteneHennen.add(y); + zuTöteneHennen.add(x); + } // gerade Schritte müssen freie Felder sein } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(y, x) == '\u25A1') { System.out.println("gerader Schritt war kein leeres Feld"); @@ -151,8 +182,14 @@ public class Fuchs extends Spielfigur { anzahlSchritteZähler++; // ungerade Schritte müssen freie Felder sein if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') { - zuTöteneHennen.add(y); - zuTöteneHennen.add(x); + henneInSafeZone = henneInSafeZone(y, x); + if (henneInSafeZone == true) { + System.out.println("Henne in Safe Zone = nicht killbar"); + return false; + } else { + zuTöteneHennen.add(y); + zuTöteneHennen.add(x); + } // gerade Schritte müssen freie Felder sein } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(y, x) == '\u25A1') { @@ -169,8 +206,14 @@ public class Fuchs extends Spielfigur { anzahlSchritteZähler++; // ungerade Schritte müssen freie Felder sein if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') { - zuTöteneHennen.add(y); - zuTöteneHennen.add(x); + henneInSafeZone = henneInSafeZone(y, x); + if (henneInSafeZone == true) { + System.out.println("Henne in Safe Zone = nicht killbar"); + return false; + } else { + zuTöteneHennen.add(y); + zuTöteneHennen.add(x); + } // gerade Schritte müssen freie Felder sein } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(y, x) == '\u25A1') { @@ -187,8 +230,14 @@ public class Fuchs extends Spielfigur { anzahlSchritteZähler++; // ungerade Schritte müssen freie Felder sein if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') { - zuTöteneHennen.add(y); - zuTöteneHennen.add(x); + henneInSafeZone = henneInSafeZone(y, x); + if (henneInSafeZone == true) { + System.out.println("Henne in Safe Zone = nicht killbar"); + return false; + } else { + zuTöteneHennen.add(y); + zuTöteneHennen.add(x); + } // gerade Schritte müssen freie Felder sein } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(y, x) == '\u25A1') { @@ -213,4 +262,74 @@ public class Fuchs extends Spielfigur { spiel.ändereWertImArray(zuTöteneHennen.get(y), zuTöteneHennen.get(x), symbol); } } + + public boolean henneInSafeZone(int yAchse, int xAchse) { + //Henne ist in der Safe Zone und darf nicht mehr gekillt werden: + if (yAchse <= 3 && (xAchse == 4 || xAchse == 5 || xAchse == 6)) { + return true; + } + + //Henne darf getötet werden + return false; + } + + public static boolean fuchsUmzingelt(Spiel spiel) { + //Füchse mit Koordinaten finden + for (int yAchse = 0; yAchse <= 8; yAchse++ ) { + for (int xAchse = 1; xAchse <= 9; xAchse++ ) { + if (spiel.getWertAusArray(yAchse, xAchse) == 'O') { + //gefundenen Fuchs prüfen + for (int y = (yAchse - 1); y <= (yAchse + 1); y++) { + for (int x = (xAchse - 1); x <= (xAchse + 1); x++) { + if (y < 0 || y > 9 || x < 1 || x > 10 || (x == xAchse && y == yAchse)) { + //nichts prüfen weil nicht mehr im Spielbrett + } else { + if (spiel.getWertAusArray(y, x) == '\u25A1') { + return false; + } + } + } + } + return true; + + } + } + } + return true; + } + + public static void killFuchs(Spiel spiel) { + ArrayList fuchskoordinaten = new ArrayList<>(); + + //Füchse mit Koordinaten finden + for (int yAchse = 0; yAchse <= 8; yAchse++ ) { + for (int xAchse = 1; xAchse <= 9; xAchse++ ) { + if (spiel.getWertAusArray(yAchse, xAchse) == 'O') { + fuchskoordinaten.add(yAchse); + fuchskoordinaten.add(xAchse); + } + } + } + + //gefundenen Fuchs prüfen und killen + for(int i = 0; i < fuchskoordinaten.size(); i = i + 2) { + boolean fuchsKill = true; + for (int y = (fuchskoordinaten.get(i) - 1); y <= (fuchskoordinaten.get(i) + 1); y++) { + for (int x = (fuchskoordinaten.get(i+1) - 1); x <= (fuchskoordinaten.get(i+1) + 1); x++) { + if (y < 0 || y > 9 || x < 1 || x > 10 || (x == fuchskoordinaten.get(i+1) && y == fuchskoordinaten.get(i))) { + //nichts prüfen weil nicht mehr im Spielbrett + } else { + if (spiel.getWertAusArray(y, x) == '\u25A1') { + fuchsKill = false; + } + } + } + } + if (fuchsKill == true) { + spiel.ändereWertImArray(fuchskoordinaten.get(i), fuchskoordinaten.get(i+1), '\u25A1'); + } + } + + } + } diff --git a/src/domain/Hennen.java b/src/domain/Hennen.java index b180fb5..e96f4ef 100644 --- a/src/domain/Hennen.java +++ b/src/domain/Hennen.java @@ -80,6 +80,19 @@ public class Hennen extends Spielfigur { return false; } + + //Noch Implementieren bezüglich max. Anzahl Hennen mehr als 27 geht nicht + + //Idee zum lösen ohne genaue Abfrage +// for(int i = 8; i <= 3; i--) { +// for(int j = 1; j <= 9; j++) { +// if (spielbrettArray[i][j] == '\u25A1') { +// spiel.ändereWertImArray(i, j, 'X'); +// System.out.println("an der Stelle " + i + ", " + j + " ist eine neue Henne gespawnt"); +// } +// } +// } + // unten links if (spielbrettArray[8][4] == '\u25A1') { spiel.ändereWertImArray(8, 4, 'X'); diff --git a/src/domain/Spiel.java b/src/domain/Spiel.java index d67d9f7..7dd0854 100644 --- a/src/domain/Spiel.java +++ b/src/domain/Spiel.java @@ -8,10 +8,13 @@ public class Spiel { public Spiel(String spielname) { this.spielname = spielname; - this.spielbrettArray = generiereSpielbrett(); } + public String getSpielname() { + return spielname; + } + public void printBoard() { for (int i = 0; i < spielbrettArray.length; i++) { for (int j = 0; j < spielbrettArray[i].length; j++) { @@ -29,8 +32,8 @@ public class Spiel { spielbrettArray[0][1] = ' '; spielbrettArray[0][2] = ' '; spielbrettArray[0][3] = ' '; - spielbrettArray[0][4] = '\u25A1'; - spielbrettArray[0][5] = '\u25A1'; + spielbrettArray[0][4] = 'X'; + spielbrettArray[0][5] = 'X'; spielbrettArray[0][6] = '\u25A1'; spielbrettArray[0][7] = ' '; spielbrettArray[0][8] = ' '; @@ -41,7 +44,7 @@ public class Spiel { spielbrettArray[1][2] = ' '; spielbrettArray[1][3] = ' '; spielbrettArray[1][4] = 'O'; - spielbrettArray[1][5] = '\u25A1'; + spielbrettArray[1][5] = 'X'; spielbrettArray[1][6] = 'O'; spielbrettArray[1][7] = ' '; spielbrettArray[1][8] = ' '; @@ -52,7 +55,7 @@ public class Spiel { spielbrettArray[2][2] = ' '; spielbrettArray[2][3] = ' '; spielbrettArray[2][4] = '\u25A1'; - spielbrettArray[2][5] = '\u25A1'; + spielbrettArray[2][5] = 'X'; spielbrettArray[2][6] = '\u25A1'; spielbrettArray[2][7] = ' '; spielbrettArray[2][8] = ' '; diff --git a/src/facade/Spielsystem.java b/src/facade/Spielsystem.java index bc386f4..8bc2141 100644 --- a/src/facade/Spielsystem.java +++ b/src/facade/Spielsystem.java @@ -13,7 +13,6 @@ import domain.Spiel; import domain.Spielfigur; public class Spielsystem { - private String spielname; private Spiel spiel; private Spielfigur henne; private Spielfigur fuchs; @@ -59,7 +58,7 @@ public class Spielsystem { } public String getSpielname() { - return spielname; + return spiel.getSpielname(); } public boolean getSpielfigurComputer() { @@ -93,6 +92,14 @@ public class Spielsystem { public void printBoard() { spiel.printBoard(); } + + public boolean fuchsUmzingelt() { + return Fuchs.fuchsUmzingelt(spiel); + } + + public void killFuchs() { + Fuchs.killFuchs(spiel); + } public boolean gewinnBedingungHennen() { char[][] spielbrettArray = spiel.getSpielbrettArray(); @@ -294,6 +301,8 @@ public class Spielsystem { } else { // Fehleingabe } + + spiel.generiereSpielbrett(); // UI.start(werBeginnt, kiLevel); } diff --git a/src/ui/UI.java b/src/ui/UI.java index da54633..a13eff7 100644 --- a/src/ui/UI.java +++ b/src/ui/UI.java @@ -222,6 +222,14 @@ public class UI { else if (zugFuchs == true && spielfigurSpieler == false) { spielsystem.setAktivenSpieler(true); System.out.println("Die Füchse sind am Zug:"); + + if (spielsystem.fuchsUmzingelt() == true) { + System.out.println(); + System.out.println("Mindestens einer Ihrer Füchse in umzingelt!"); + System.out.println("Wenn Sie nichts dagegen tun können, wird dieser Fuchs am Ende des Zuges eliminiert."); + System.out.println(); + } + System.out.println("Bitte wählen Sie entweder (1) normaler Zug oder (2) Sonderzug Push Henne"); System.out.println("Denken Sie daran, dass Sie den Sonderzug nur - 1x - benutzen können!"); int eingabe = Integer.parseInt(sc.nextLine()); @@ -288,9 +296,18 @@ public class UI { } while (freiesFeld == false); erfolgreichGepusht = spielsystem.pushHenne(zugPushHenne); System.out.println("Henne wurde erfolgreich geschoben. "); + zugHenne = true; + zugFuchs = false; break; } + if (spielsystem.fuchsUmzingelt() == true) { + System.out.println(); + System.out.println("Leider ist noch ein Fuchs umzingelt!"); + System.out.println("Dieser wird nun ausgelöscht."); + System.out.println(); + spielsystem.killFuchs(); + } } // Zug Fuchs KI