IsValidMove Fuchs Anpassung SafeZone + Fuchs umzingelt und KillFuchs +
geändert, wo das Spielbrett generiert wird + Tipp für PushHenne als Kommentar hinterlegtpull/5/head
parent
6c4de27353
commit
f7541db1d6
|
@ -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<Integer> 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<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');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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] = ' ';
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue