IsValidMove Fuchs Anpassung SafeZone + Fuchs umzingelt und KillFuchs +

geändert, wo das Spielbrett generiert wird + Tipp für PushHenne als
Kommentar hinterlegt
pull/5/head
cedri 2022-12-07 19:37:11 +01:00
parent 6c4de27353
commit f7541db1d6
5 changed files with 184 additions and 23 deletions

View File

@ -18,6 +18,7 @@ public class Fuchs extends Spielfigur {
int schritteY = Math.abs(neueStartY - neueZielY); int schritteY = Math.abs(neueStartY - neueZielY);
int schritteX = Math.abs(neueStartX - neueZielX); int schritteX = Math.abs(neueStartX - neueZielX);
int anzahlSchritteZähler = 0; int anzahlSchritteZähler = 0;
boolean henneInSafeZone;
ArrayList<Integer> zuTöteneHennen = new ArrayList<>(); ArrayList<Integer> zuTöteneHennen = new ArrayList<>();
//System.out.println("schritte Y: " + schritteY); //System.out.println("schritte Y: " + schritteY);
@ -52,8 +53,14 @@ public class Fuchs extends Spielfigur {
//System.out.println(spiel.getWertAusArray(i, neueZielX)); //System.out.println(spiel.getWertAusArray(i, neueZielX));
// ungerade Schritte müssen freie Felder sein // ungerade Schritte müssen freie Felder sein
if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(i, neueZielX) == 'X') { if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(i, neueZielX) == 'X') {
zuTöteneHennen.add(i); henneInSafeZone = henneInSafeZone(i, neueZielX);
zuTöteneHennen.add(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 // gerade Schritte müssen freie Felder sein
} else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(i, neueZielX) == '\u25A1') { } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(i, neueZielX) == '\u25A1') {
@ -70,8 +77,14 @@ public class Fuchs extends Spielfigur {
anzahlSchritteZähler++; anzahlSchritteZähler++;
// ungerade Schritte müssen freie Felder sein // ungerade Schritte müssen freie Felder sein
if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(i, neueZielX) == 'X') { if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(i, neueZielX) == 'X') {
zuTöteneHennen.add(i); henneInSafeZone = henneInSafeZone(i, neueZielX);
zuTöteneHennen.add(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 // gerade Schritte müssen freie Felder sein
} else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(i, neueZielX) == '\u25A1') { } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(i, neueZielX) == '\u25A1') {
@ -92,8 +105,14 @@ public class Fuchs extends Spielfigur {
anzahlSchritteZähler++; anzahlSchritteZähler++;
// ungerade Schritte müssen freie Felder sein // ungerade Schritte müssen freie Felder sein
if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(neueZielY, i) == 'X') { if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(neueZielY, i) == 'X') {
zuTöteneHennen.add(neueZielY); henneInSafeZone = henneInSafeZone(neueZielY, i);
zuTöteneHennen.add(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 // gerade Schritte müssen freie Felder sein
} else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(neueZielY, i) == '\u25A1') { } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(neueZielY, i) == '\u25A1') {
@ -110,8 +129,14 @@ public class Fuchs extends Spielfigur {
anzahlSchritteZähler++; anzahlSchritteZähler++;
// ungerade Schritte müssen freie Felder sein // ungerade Schritte müssen freie Felder sein
if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(neueZielY, i) == 'X') { if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(neueZielY, i) == 'X') {
zuTöteneHennen.add(neueZielY); henneInSafeZone = henneInSafeZone(neueZielY, i);
zuTöteneHennen.add(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 // gerade Schritte müssen freie Felder sein
} else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(neueZielY, i) == '\u25A1') { } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(neueZielY, i) == '\u25A1') {
@ -132,8 +157,14 @@ public class Fuchs extends Spielfigur {
anzahlSchritteZähler++; anzahlSchritteZähler++;
// ungerade Schritte müssen freie Felder sein // ungerade Schritte müssen freie Felder sein
if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') { if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') {
zuTöteneHennen.add(y); henneInSafeZone = henneInSafeZone(y, x);
zuTöteneHennen.add(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 // gerade Schritte müssen freie Felder sein
} else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(y, x) == '\u25A1') { } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(y, x) == '\u25A1') {
System.out.println("gerader Schritt war kein leeres Feld"); System.out.println("gerader Schritt war kein leeres Feld");
@ -151,8 +182,14 @@ public class Fuchs extends Spielfigur {
anzahlSchritteZähler++; anzahlSchritteZähler++;
// ungerade Schritte müssen freie Felder sein // ungerade Schritte müssen freie Felder sein
if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') { if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') {
zuTöteneHennen.add(y); henneInSafeZone = henneInSafeZone(y, x);
zuTöteneHennen.add(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 // gerade Schritte müssen freie Felder sein
} else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(y, x) == '\u25A1') { } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(y, x) == '\u25A1') {
@ -169,8 +206,14 @@ public class Fuchs extends Spielfigur {
anzahlSchritteZähler++; anzahlSchritteZähler++;
// ungerade Schritte müssen freie Felder sein // ungerade Schritte müssen freie Felder sein
if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') { if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') {
zuTöteneHennen.add(y); henneInSafeZone = henneInSafeZone(y, x);
zuTöteneHennen.add(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 // gerade Schritte müssen freie Felder sein
} else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(y, x) == '\u25A1') { } else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(y, x) == '\u25A1') {
@ -187,8 +230,14 @@ public class Fuchs extends Spielfigur {
anzahlSchritteZähler++; anzahlSchritteZähler++;
// ungerade Schritte müssen freie Felder sein // ungerade Schritte müssen freie Felder sein
if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') { if ((anzahlSchritteZähler % 2) != 0 && spiel.getWertAusArray(y, x) == 'X') {
zuTöteneHennen.add(y); henneInSafeZone = henneInSafeZone(y, x);
zuTöteneHennen.add(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 // gerade Schritte müssen freie Felder sein
} else if ((anzahlSchritteZähler % 2) == 0 && spiel.getWertAusArray(y, x) == '\u25A1') { } 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); 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<Integer> 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');
}
}
}
} }

View File

@ -80,6 +80,19 @@ public class Hennen extends Spielfigur {
return false; 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 // unten links
if (spielbrettArray[8][4] == '\u25A1') { if (spielbrettArray[8][4] == '\u25A1') {
spiel.ändereWertImArray(8, 4, 'X'); spiel.ändereWertImArray(8, 4, 'X');

View File

@ -8,10 +8,13 @@ public class Spiel {
public Spiel(String spielname) { public Spiel(String spielname) {
this.spielname = spielname; this.spielname = spielname;
this.spielbrettArray = generiereSpielbrett();
} }
public String getSpielname() {
return spielname;
}
public void printBoard() { public void printBoard() {
for (int i = 0; i < spielbrettArray.length; i++) { for (int i = 0; i < spielbrettArray.length; i++) {
for (int j = 0; j < spielbrettArray[i].length; j++) { for (int j = 0; j < spielbrettArray[i].length; j++) {
@ -29,8 +32,8 @@ public class Spiel {
spielbrettArray[0][1] = ' '; spielbrettArray[0][1] = ' ';
spielbrettArray[0][2] = ' '; spielbrettArray[0][2] = ' ';
spielbrettArray[0][3] = ' '; spielbrettArray[0][3] = ' ';
spielbrettArray[0][4] = '\u25A1'; spielbrettArray[0][4] = 'X';
spielbrettArray[0][5] = '\u25A1'; spielbrettArray[0][5] = 'X';
spielbrettArray[0][6] = '\u25A1'; spielbrettArray[0][6] = '\u25A1';
spielbrettArray[0][7] = ' '; spielbrettArray[0][7] = ' ';
spielbrettArray[0][8] = ' '; spielbrettArray[0][8] = ' ';
@ -41,7 +44,7 @@ public class Spiel {
spielbrettArray[1][2] = ' '; spielbrettArray[1][2] = ' ';
spielbrettArray[1][3] = ' '; spielbrettArray[1][3] = ' ';
spielbrettArray[1][4] = 'O'; spielbrettArray[1][4] = 'O';
spielbrettArray[1][5] = '\u25A1'; spielbrettArray[1][5] = 'X';
spielbrettArray[1][6] = 'O'; spielbrettArray[1][6] = 'O';
spielbrettArray[1][7] = ' '; spielbrettArray[1][7] = ' ';
spielbrettArray[1][8] = ' '; spielbrettArray[1][8] = ' ';
@ -52,7 +55,7 @@ public class Spiel {
spielbrettArray[2][2] = ' '; spielbrettArray[2][2] = ' ';
spielbrettArray[2][3] = ' '; spielbrettArray[2][3] = ' ';
spielbrettArray[2][4] = '\u25A1'; spielbrettArray[2][4] = '\u25A1';
spielbrettArray[2][5] = '\u25A1'; spielbrettArray[2][5] = 'X';
spielbrettArray[2][6] = '\u25A1'; spielbrettArray[2][6] = '\u25A1';
spielbrettArray[2][7] = ' '; spielbrettArray[2][7] = ' ';
spielbrettArray[2][8] = ' '; spielbrettArray[2][8] = ' ';

View File

@ -13,7 +13,6 @@ import domain.Spiel;
import domain.Spielfigur; import domain.Spielfigur;
public class Spielsystem { public class Spielsystem {
private String spielname;
private Spiel spiel; private Spiel spiel;
private Spielfigur henne; private Spielfigur henne;
private Spielfigur fuchs; private Spielfigur fuchs;
@ -59,7 +58,7 @@ public class Spielsystem {
} }
public String getSpielname() { public String getSpielname() {
return spielname; return spiel.getSpielname();
} }
public boolean getSpielfigurComputer() { public boolean getSpielfigurComputer() {
@ -93,6 +92,14 @@ public class Spielsystem {
public void printBoard() { public void printBoard() {
spiel.printBoard(); spiel.printBoard();
} }
public boolean fuchsUmzingelt() {
return Fuchs.fuchsUmzingelt(spiel);
}
public void killFuchs() {
Fuchs.killFuchs(spiel);
}
public boolean gewinnBedingungHennen() { public boolean gewinnBedingungHennen() {
char[][] spielbrettArray = spiel.getSpielbrettArray(); char[][] spielbrettArray = spiel.getSpielbrettArray();
@ -294,6 +301,8 @@ public class Spielsystem {
} else { } else {
// Fehleingabe // Fehleingabe
} }
spiel.generiereSpielbrett();
// UI.start(werBeginnt, kiLevel); // UI.start(werBeginnt, kiLevel);
} }

View File

@ -222,6 +222,14 @@ public class UI {
else if (zugFuchs == true && spielfigurSpieler == false) { else if (zugFuchs == true && spielfigurSpieler == false) {
spielsystem.setAktivenSpieler(true); spielsystem.setAktivenSpieler(true);
System.out.println("Die Füchse sind am Zug:"); 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("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!"); System.out.println("Denken Sie daran, dass Sie den Sonderzug nur - 1x - benutzen können!");
int eingabe = Integer.parseInt(sc.nextLine()); int eingabe = Integer.parseInt(sc.nextLine());
@ -288,9 +296,18 @@ public class UI {
} while (freiesFeld == false); } while (freiesFeld == false);
erfolgreichGepusht = spielsystem.pushHenne(zugPushHenne); erfolgreichGepusht = spielsystem.pushHenne(zugPushHenne);
System.out.println("Henne wurde erfolgreich geschoben. "); System.out.println("Henne wurde erfolgreich geschoben. ");
zugHenne = true;
zugFuchs = false;
break; 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 // Zug Fuchs KI