IsValidMove neu gemacht für mehrere Zugeingaben + kleine Änderungen +
Zug wandelt nun im isValidMove selbst um daher muss die KI den übergebenen Zug nochmal ändernpull/5/head
parent
f7541db1d6
commit
674ffa0584
|
@ -44,7 +44,7 @@ public class BotEasyFuchs extends Bot {
|
||||||
|
|
||||||
zug = altY + "," + altX + " " + neuY + "," + neuX;
|
zug = altY + "," + altX + " " + neuY + "," + neuX;
|
||||||
|
|
||||||
} while(fuchs.isValidMove(altY, altX, neuY, neuX, spiel) == false);
|
} while(fuchs.oberIsValidMove(zug, spiel) == false);
|
||||||
|
|
||||||
return zug;
|
return zug;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class BotEasyHenne extends Bot {
|
||||||
|
|
||||||
zug = altY + "," + altX + " " + neuY + "," + neuX;
|
zug = altY + "," + altX + " " + neuY + "," + neuX;
|
||||||
|
|
||||||
} while(henne.isValidMove(altY, altX, neuY, neuX, spiel) == false);
|
} while(henne.oberIsValidMove(zug, spiel) == false);
|
||||||
|
|
||||||
return zug;
|
return zug;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,33 @@ public class Fuchs extends Spielfigur {
|
||||||
spiel.ändereWertImArray(neueZielY, neueZielX, 'O');
|
spiel.ändereWertImArray(neueZielY, neueZielX, 'O');
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isValidMove(int neueStartY, int neueStartX, int neueZielY, int neueZielX, Spiel spiel) {
|
public boolean oberIsValidMove(String zug, Spiel spiel) {
|
||||||
|
int anzahlZüge = (zug.length() - 3) / 4;
|
||||||
|
String zwischenzug;
|
||||||
|
boolean erfolgreicherZwischenzug;
|
||||||
|
|
||||||
|
System.out.println(anzahlZüge);
|
||||||
|
|
||||||
|
for(int zugZähler = 1, beginnChar = 0, endeChar = 7; zugZähler <= anzahlZüge; zugZähler++, beginnChar = beginnChar + 4, endeChar = endeChar + 4) {
|
||||||
|
zwischenzug = zug.substring(beginnChar, endeChar);
|
||||||
|
System.out.println(zwischenzug);
|
||||||
|
int[] neueKoordinaten = spiel.berechneRichtigeKoordinaten(zwischenzug);
|
||||||
|
int neueStartY = neueKoordinaten[0];
|
||||||
|
int neueStartX = neueKoordinaten[1];
|
||||||
|
int neueZielY = neueKoordinaten[2];
|
||||||
|
int neueZielX = neueKoordinaten[3];
|
||||||
|
|
||||||
|
erfolgreicherZwischenzug = isValidMove(neueStartY, neueStartX, neueZielY, neueZielX, spiel, zugZähler);
|
||||||
|
|
||||||
|
if (erfolgreicherZwischenzug == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isValidMove(int neueStartY, int neueStartX, int neueZielY, int neueZielX, Spiel spiel, int zugZähler) {
|
||||||
|
|
||||||
int schritteY = Math.abs(neueStartY - neueZielY);
|
int schritteY = Math.abs(neueStartY - neueZielY);
|
||||||
int schritteX = Math.abs(neueStartX - neueZielX);
|
int schritteX = Math.abs(neueStartX - neueZielX);
|
||||||
|
@ -31,11 +57,18 @@ public class Fuchs extends Spielfigur {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fehler Spielsymbol beim Start oder Ziel falsch
|
// Fehler Spielsymbol beim Start oder Ziel falsch (nur beim ersten Durchgang nach O testen)
|
||||||
|
if (zugZähler == 1) {
|
||||||
if (spiel.getWertAusArray(neueStartY, neueStartX) != 'O' || spiel.getWertAusArray(neueZielY, neueZielX) != '\u25A1') {
|
if (spiel.getWertAusArray(neueStartY, neueStartX) != 'O' || spiel.getWertAusArray(neueZielY, neueZielX) != '\u25A1') {
|
||||||
System.out.println("Symbole an stellen falsch " + spiel.getWertAusArray(neueStartY, neueStartX) + " " + spiel.getWertAusArray(neueZielY, neueZielX));
|
System.out.println("Symbole an stellen falsch " + spiel.getWertAusArray(neueStartY, neueStartX) + " " + spiel.getWertAusArray(neueZielY, neueZielX));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (spiel.getWertAusArray(neueZielY, neueZielX) != '\u25A1') {
|
||||||
|
System.out.println("Symbol an der Endstelle falsch " + spiel.getWertAusArray(neueZielY, neueZielX));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Valider Zug einser Schritt
|
// Valider Zug einser Schritt
|
||||||
if (schritteY <= 1 && schritteX <= 1) {
|
if (schritteY <= 1 && schritteX <= 1) {
|
||||||
|
@ -265,7 +298,7 @@ public class Fuchs extends Spielfigur {
|
||||||
|
|
||||||
public boolean henneInSafeZone(int yAchse, int xAchse) {
|
public boolean henneInSafeZone(int yAchse, int xAchse) {
|
||||||
//Henne ist in der Safe Zone und darf nicht mehr gekillt werden:
|
//Henne ist in der Safe Zone und darf nicht mehr gekillt werden:
|
||||||
if (yAchse <= 3 && (xAchse == 4 || xAchse == 5 || xAchse == 6)) {
|
if (yAchse <= 2 && (xAchse == 4 || xAchse == 5 || xAchse == 6)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,12 @@ public class Hennen extends Spielfigur {
|
||||||
}
|
}
|
||||||
|
|
||||||
// generell sehr fehleranfällig, mit Regex Filter Struktur vom String vorgeben
|
// generell sehr fehleranfällig, mit Regex Filter Struktur vom String vorgeben
|
||||||
public boolean isValidMove(int neueStartY, int neueStartX, int neueZielY, int neueZielX, Spiel spiel) {
|
public boolean oberIsValidMove(String zug, Spiel spiel) {
|
||||||
|
int[] neueKoordinaten = spiel.berechneRichtigeKoordinaten(zug);
|
||||||
|
int neueStartY = neueKoordinaten[0];
|
||||||
|
int neueStartX = neueKoordinaten[1];
|
||||||
|
int neueZielY = neueKoordinaten[2];
|
||||||
|
int neueZielX = neueKoordinaten[3];
|
||||||
|
|
||||||
// Zug fehleingabe
|
// Zug fehleingabe
|
||||||
if (neueStartY == 1000 || neueStartX == 1000 || neueZielY == 1000 || neueZielX == 1000) {
|
if (neueStartY == 1000 || neueStartX == 1000 || neueZielY == 1000 || neueZielX == 1000) {
|
||||||
|
|
|
@ -24,6 +24,32 @@ public class 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 = wandelPassendUm(startKoord1, startKoord2);
|
||||||
|
int[] neueZielKoords = 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;
|
||||||
|
}
|
||||||
|
|
||||||
public char[][] generiereSpielbrett() {
|
public char[][] generiereSpielbrett() {
|
||||||
// O=Fuchs, X=Henne, \u25A1=ein Kasten
|
// O=Fuchs, X=Henne, \u25A1=ein Kasten
|
||||||
|
@ -43,7 +69,7 @@ public class Spiel {
|
||||||
spielbrettArray[1][1] = ' ';
|
spielbrettArray[1][1] = ' ';
|
||||||
spielbrettArray[1][2] = ' ';
|
spielbrettArray[1][2] = ' ';
|
||||||
spielbrettArray[1][3] = ' ';
|
spielbrettArray[1][3] = ' ';
|
||||||
spielbrettArray[1][4] = 'O';
|
spielbrettArray[1][4] = '\u25A1';
|
||||||
spielbrettArray[1][5] = 'X';
|
spielbrettArray[1][5] = 'X';
|
||||||
spielbrettArray[1][6] = 'O';
|
spielbrettArray[1][6] = 'O';
|
||||||
spielbrettArray[1][7] = ' ';
|
spielbrettArray[1][7] = ' ';
|
||||||
|
@ -54,8 +80,8 @@ public class Spiel {
|
||||||
spielbrettArray[2][1] = ' ';
|
spielbrettArray[2][1] = ' ';
|
||||||
spielbrettArray[2][2] = ' ';
|
spielbrettArray[2][2] = ' ';
|
||||||
spielbrettArray[2][3] = ' ';
|
spielbrettArray[2][3] = ' ';
|
||||||
spielbrettArray[2][4] = '\u25A1';
|
spielbrettArray[2][4] = 'O';
|
||||||
spielbrettArray[2][5] = 'X';
|
spielbrettArray[2][5] = '\u25A1';
|
||||||
spielbrettArray[2][6] = '\u25A1';
|
spielbrettArray[2][6] = '\u25A1';
|
||||||
spielbrettArray[2][7] = ' ';
|
spielbrettArray[2][7] = ' ';
|
||||||
spielbrettArray[2][8] = ' ';
|
spielbrettArray[2][8] = ' ';
|
||||||
|
@ -66,7 +92,7 @@ public class Spiel {
|
||||||
spielbrettArray[3][2] = '\u25A1';
|
spielbrettArray[3][2] = '\u25A1';
|
||||||
spielbrettArray[3][3] = '\u25A1';
|
spielbrettArray[3][3] = '\u25A1';
|
||||||
spielbrettArray[3][4] = '\u25A1';
|
spielbrettArray[3][4] = '\u25A1';
|
||||||
spielbrettArray[3][5] = '\u25A1';
|
spielbrettArray[3][5] = 'X';
|
||||||
spielbrettArray[3][6] = '\u25A1';
|
spielbrettArray[3][6] = '\u25A1';
|
||||||
spielbrettArray[3][7] = '\u25A1';
|
spielbrettArray[3][7] = '\u25A1';
|
||||||
spielbrettArray[3][8] = '\u25A1';
|
spielbrettArray[3][8] = '\u25A1';
|
||||||
|
@ -78,7 +104,7 @@ public class Spiel {
|
||||||
spielbrettArray[4][3] = 'X';
|
spielbrettArray[4][3] = 'X';
|
||||||
spielbrettArray[4][4] = 'X';
|
spielbrettArray[4][4] = 'X';
|
||||||
spielbrettArray[4][5] = 'X';
|
spielbrettArray[4][5] = 'X';
|
||||||
spielbrettArray[4][6] = 'X';
|
spielbrettArray[4][6] = '\u25A1';
|
||||||
spielbrettArray[4][7] = 'X';
|
spielbrettArray[4][7] = 'X';
|
||||||
spielbrettArray[4][8] = 'X';
|
spielbrettArray[4][8] = 'X';
|
||||||
spielbrettArray[4][9] = 'X';
|
spielbrettArray[4][9] = 'X';
|
||||||
|
@ -100,7 +126,7 @@ public class Spiel {
|
||||||
spielbrettArray[6][3] = ' ';
|
spielbrettArray[6][3] = ' ';
|
||||||
spielbrettArray[6][4] = 'X';
|
spielbrettArray[6][4] = 'X';
|
||||||
spielbrettArray[6][5] = 'X';
|
spielbrettArray[6][5] = 'X';
|
||||||
spielbrettArray[6][6] = 'X';
|
spielbrettArray[6][6] = '\u25A1';
|
||||||
spielbrettArray[6][7] = ' ';
|
spielbrettArray[6][7] = ' ';
|
||||||
spielbrettArray[6][8] = ' ';
|
spielbrettArray[6][8] = ' ';
|
||||||
spielbrettArray[6][9] = ' ';
|
spielbrettArray[6][9] = ' ';
|
||||||
|
|
|
@ -2,7 +2,7 @@ package domain;
|
||||||
|
|
||||||
public abstract class Spielfigur {
|
public abstract class Spielfigur {
|
||||||
|
|
||||||
public abstract boolean isValidMove(int neueStartY, int neueStartX, int neueZielY, int neueZielX, Spiel spiel);
|
public abstract boolean oberIsValidMove(String zug, Spiel spiel);
|
||||||
// public static boolean isValidMove(String zug) {
|
// public static boolean isValidMove(String zug) {
|
||||||
// return false;
|
// return false;
|
||||||
// }
|
// }
|
||||||
|
|
|
@ -190,45 +190,13 @@ public class Spielsystem {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isValidMove(String zug) {
|
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) {
|
if (aktiverSpieler == true) {
|
||||||
return spieler.isValidMove(neueStartY, neueStartX, neueZielY, neueZielX, spiel);
|
return spieler.oberIsValidMove(zug, spiel);
|
||||||
} else {
|
} else {
|
||||||
return computer.isValidMove(neueStartY, neueStartX, neueZielY, neueZielX, spiel);
|
return computer.oberIsValidMove(zug, 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)
|
// Noch falsche Ausgabe vom Zug (Array statt wie bei Eingabe vom Spieler)
|
||||||
// <---------------------------------------------------------------------
|
// <---------------------------------------------------------------------
|
||||||
|
@ -251,7 +219,10 @@ public class Spielsystem {
|
||||||
int counterMittlereReihe = 0;
|
int counterMittlereReihe = 0;
|
||||||
int counterUntereReihe = 0;
|
int counterUntereReihe = 0;
|
||||||
|
|
||||||
int[] neueKoordinaten = berechneRichtigeKoordinaten(zug);
|
String moveZug = moveZugBestimmen(zug);
|
||||||
|
System.out.println(moveZug);
|
||||||
|
|
||||||
|
int[] neueKoordinaten = spiel.berechneRichtigeKoordinaten(moveZug);
|
||||||
int neueStartY = neueKoordinaten[0];
|
int neueStartY = neueKoordinaten[0];
|
||||||
int neueStartX = neueKoordinaten[1];
|
int neueStartX = neueKoordinaten[1];
|
||||||
int neueZielY = neueKoordinaten[2];
|
int neueZielY = neueKoordinaten[2];
|
||||||
|
@ -284,6 +255,12 @@ public class Spielsystem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String moveZugBestimmen(String zug) {
|
||||||
|
int zugLänge = zug.length();
|
||||||
|
return "" + zug.charAt(0) + zug.charAt(1) + zug.charAt(2) + " " + zug.charAt(zugLänge - 3) + zug.charAt(zugLänge - 2) + zug.charAt(zugLänge - 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void start(boolean werBeginnt, int kiLevel) {
|
public void start(boolean werBeginnt, int kiLevel) {
|
||||||
|
|
||||||
if (kiLevel == 0 && computer instanceof Hennen) {
|
if (kiLevel == 0 && computer instanceof Hennen) {
|
||||||
|
@ -361,7 +338,7 @@ public class Spielsystem {
|
||||||
public boolean pushHenne(String zugPushHenne) {
|
public boolean pushHenne(String zugPushHenne) {
|
||||||
char[][] spielbrett = spiel.getSpielbrettArray();
|
char[][] spielbrett = spiel.getSpielbrettArray();
|
||||||
|
|
||||||
int[] neueKoordinaten = berechneRichtigeKoordinaten(zugPushHenne);
|
int[] neueKoordinaten = spiel.berechneRichtigeKoordinaten(zugPushHenne);
|
||||||
int neueStartY = neueKoordinaten[0];
|
int neueStartY = neueKoordinaten[0];
|
||||||
int neueStartX = neueKoordinaten[1];
|
int neueStartX = neueKoordinaten[1];
|
||||||
int neueZielY = neueKoordinaten[2];
|
int neueZielY = neueKoordinaten[2];
|
||||||
|
|
|
@ -322,6 +322,10 @@ public class UI {
|
||||||
|
|
||||||
zugHenne = true;
|
zugHenne = true;
|
||||||
zugFuchs = false;
|
zugFuchs = false;
|
||||||
|
|
||||||
|
if (spielsystem.fuchsUmzingelt() == true) {
|
||||||
|
spielsystem.killFuchs();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// nach jedem Zug das Spielbrett ausgeben
|
// nach jedem Zug das Spielbrett ausgeben
|
||||||
|
|
Loading…
Reference in New Issue