From 674ffa05844952c9db1bfc5ac30375d937b2734c Mon Sep 17 00:00:00 2001 From: cedri Date: Thu, 8 Dec 2022 11:10:09 +0100 Subject: [PATCH] =?UTF-8?q?IsValidMove=20neu=20gemacht=20f=C3=BCr=20mehrer?= =?UTF-8?q?e=20Zugeingaben=20+=20kleine=20=C3=84nderungen=20+=20Zug=20wand?= =?UTF-8?q?elt=20nun=20im=20isValidMove=20selbst=20um=20daher=20muss=20die?= =?UTF-8?q?=20KI=20den=20=C3=BCbergebenen=20Zug=20nochmal=20=C3=A4ndern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/domain/BotEasyFuchs.java | 2 +- src/domain/BotEasyHenne.java | 2 +- src/domain/Fuchs.java | 45 ++++++- src/domain/Hennen.java | 9 +- src/domain/Spiel.java | 230 +++++++++++++++++++---------------- src/domain/Spielfigur.java | 2 +- src/facade/Spielsystem.java | 49 ++------ src/ui/UI.java | 4 + 8 files changed, 194 insertions(+), 149 deletions(-) diff --git a/src/domain/BotEasyFuchs.java b/src/domain/BotEasyFuchs.java index 6e95806..ec93b5e 100644 --- a/src/domain/BotEasyFuchs.java +++ b/src/domain/BotEasyFuchs.java @@ -44,7 +44,7 @@ public class BotEasyFuchs extends Bot { zug = altY + "," + altX + " " + neuY + "," + neuX; - } while(fuchs.isValidMove(altY, altX, neuY, neuX, spiel) == false); + } while(fuchs.oberIsValidMove(zug, spiel) == false); return zug; } diff --git a/src/domain/BotEasyHenne.java b/src/domain/BotEasyHenne.java index 5db4f0d..835406d 100644 --- a/src/domain/BotEasyHenne.java +++ b/src/domain/BotEasyHenne.java @@ -40,7 +40,7 @@ public class BotEasyHenne extends Bot { zug = altY + "," + altX + " " + neuY + "," + neuX; - } while(henne.isValidMove(altY, altX, neuY, neuX, spiel) == false); + } while(henne.oberIsValidMove(zug, spiel) == false); return zug; } diff --git a/src/domain/Fuchs.java b/src/domain/Fuchs.java index b2c5d3c..a1e8895 100644 --- a/src/domain/Fuchs.java +++ b/src/domain/Fuchs.java @@ -13,7 +13,33 @@ public class Fuchs extends Spielfigur { 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 schritteX = Math.abs(neueStartX - neueZielX); @@ -31,10 +57,17 @@ public class Fuchs extends Spielfigur { return false; } - // Fehler Spielsymbol beim Start oder Ziel falsch - 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)); - return false; + // 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') { + System.out.println("Symbole an stellen falsch " + spiel.getWertAusArray(neueStartY, neueStartX) + " " + spiel.getWertAusArray(neueZielY, neueZielX)); + 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 @@ -265,7 +298,7 @@ public class Fuchs extends Spielfigur { 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)) { + if (yAchse <= 2 && (xAchse == 4 || xAchse == 5 || xAchse == 6)) { return true; } diff --git a/src/domain/Hennen.java b/src/domain/Hennen.java index e96f4ef..d5adce6 100644 --- a/src/domain/Hennen.java +++ b/src/domain/Hennen.java @@ -12,8 +12,13 @@ public class Hennen extends Spielfigur { } // 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 if (neueStartY == 1000 || neueStartX == 1000 || neueZielY == 1000 || neueZielX == 1000) { System.out.println("Fehleingabe"); diff --git a/src/domain/Spiel.java b/src/domain/Spiel.java index 7dd0854..3dcc5f7 100644 --- a/src/domain/Spiel.java +++ b/src/domain/Spiel.java @@ -23,120 +23,146 @@ public class Spiel { System.out.println(); } } + + 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() { - // O=Fuchs, X=Henne, \u25A1=ein Kasten + public char[][] generiereSpielbrett() { + // O=Fuchs, X=Henne, \u25A1=ein Kasten - spielbrettArray[0][0] = '8'; - spielbrettArray[0][1] = ' '; - spielbrettArray[0][2] = ' '; - spielbrettArray[0][3] = ' '; - spielbrettArray[0][4] = 'X'; - spielbrettArray[0][5] = 'X'; - spielbrettArray[0][6] = '\u25A1'; - spielbrettArray[0][7] = ' '; - spielbrettArray[0][8] = ' '; - spielbrettArray[0][9] = ' '; + spielbrettArray[0][0] = '8'; + spielbrettArray[0][1] = ' '; + spielbrettArray[0][2] = ' '; + spielbrettArray[0][3] = ' '; + spielbrettArray[0][4] = 'X'; + spielbrettArray[0][5] = 'X'; + spielbrettArray[0][6] = '\u25A1'; + spielbrettArray[0][7] = ' '; + spielbrettArray[0][8] = ' '; + spielbrettArray[0][9] = ' '; - spielbrettArray[1][0] = '7'; - spielbrettArray[1][1] = ' '; - spielbrettArray[1][2] = ' '; - spielbrettArray[1][3] = ' '; - spielbrettArray[1][4] = 'O'; - spielbrettArray[1][5] = 'X'; - spielbrettArray[1][6] = 'O'; - spielbrettArray[1][7] = ' '; - spielbrettArray[1][8] = ' '; - spielbrettArray[1][9] = ' '; + spielbrettArray[1][0] = '7'; + spielbrettArray[1][1] = ' '; + spielbrettArray[1][2] = ' '; + spielbrettArray[1][3] = ' '; + spielbrettArray[1][4] = '\u25A1'; + spielbrettArray[1][5] = 'X'; + spielbrettArray[1][6] = 'O'; + spielbrettArray[1][7] = ' '; + spielbrettArray[1][8] = ' '; + spielbrettArray[1][9] = ' '; - spielbrettArray[2][0] = '6'; - spielbrettArray[2][1] = ' '; - spielbrettArray[2][2] = ' '; - spielbrettArray[2][3] = ' '; - spielbrettArray[2][4] = '\u25A1'; - spielbrettArray[2][5] = 'X'; - spielbrettArray[2][6] = '\u25A1'; - spielbrettArray[2][7] = ' '; - spielbrettArray[2][8] = ' '; - spielbrettArray[2][9] = ' '; + spielbrettArray[2][0] = '6'; + spielbrettArray[2][1] = ' '; + spielbrettArray[2][2] = ' '; + spielbrettArray[2][3] = ' '; + spielbrettArray[2][4] = 'O'; + spielbrettArray[2][5] = '\u25A1'; + spielbrettArray[2][6] = '\u25A1'; + spielbrettArray[2][7] = ' '; + spielbrettArray[2][8] = ' '; + spielbrettArray[2][9] = ' '; - spielbrettArray[3][0] = '5'; - spielbrettArray[3][1] = '\u25A1'; - spielbrettArray[3][2] = '\u25A1'; - spielbrettArray[3][3] = '\u25A1'; - spielbrettArray[3][4] = '\u25A1'; - spielbrettArray[3][5] = '\u25A1'; - spielbrettArray[3][6] = '\u25A1'; - spielbrettArray[3][7] = '\u25A1'; - spielbrettArray[3][8] = '\u25A1'; - spielbrettArray[3][9] = '\u25A1'; + spielbrettArray[3][0] = '5'; + spielbrettArray[3][1] = '\u25A1'; + spielbrettArray[3][2] = '\u25A1'; + spielbrettArray[3][3] = '\u25A1'; + spielbrettArray[3][4] = '\u25A1'; + spielbrettArray[3][5] = 'X'; + spielbrettArray[3][6] = '\u25A1'; + spielbrettArray[3][7] = '\u25A1'; + spielbrettArray[3][8] = '\u25A1'; + spielbrettArray[3][9] = '\u25A1'; - spielbrettArray[4][0] = '4'; - spielbrettArray[4][1] = 'X'; - spielbrettArray[4][2] = 'X'; - spielbrettArray[4][3] = 'X'; - spielbrettArray[4][4] = 'X'; - spielbrettArray[4][5] = 'X'; - spielbrettArray[4][6] = 'X'; - spielbrettArray[4][7] = 'X'; - spielbrettArray[4][8] = 'X'; - spielbrettArray[4][9] = 'X'; + spielbrettArray[4][0] = '4'; + spielbrettArray[4][1] = 'X'; + spielbrettArray[4][2] = 'X'; + spielbrettArray[4][3] = 'X'; + spielbrettArray[4][4] = 'X'; + spielbrettArray[4][5] = 'X'; + spielbrettArray[4][6] = '\u25A1'; + spielbrettArray[4][7] = 'X'; + spielbrettArray[4][8] = 'X'; + spielbrettArray[4][9] = 'X'; - spielbrettArray[5][0] = '3'; - spielbrettArray[5][1] = 'X'; - spielbrettArray[5][2] = 'X'; - spielbrettArray[5][3] = 'X'; - spielbrettArray[5][4] = 'X'; - spielbrettArray[5][5] = 'X'; - spielbrettArray[5][6] = 'X'; - spielbrettArray[5][7] = 'X'; - spielbrettArray[5][8] = 'X'; - spielbrettArray[5][9] = 'X'; + spielbrettArray[5][0] = '3'; + spielbrettArray[5][1] = 'X'; + spielbrettArray[5][2] = 'X'; + spielbrettArray[5][3] = 'X'; + spielbrettArray[5][4] = 'X'; + spielbrettArray[5][5] = 'X'; + spielbrettArray[5][6] = 'X'; + spielbrettArray[5][7] = 'X'; + spielbrettArray[5][8] = 'X'; + spielbrettArray[5][9] = 'X'; - spielbrettArray[6][0] = '2'; - spielbrettArray[6][1] = ' '; - spielbrettArray[6][2] = ' '; - spielbrettArray[6][3] = ' '; - spielbrettArray[6][4] = 'X'; - spielbrettArray[6][5] = 'X'; - spielbrettArray[6][6] = 'X'; - spielbrettArray[6][7] = ' '; - spielbrettArray[6][8] = ' '; - spielbrettArray[6][9] = ' '; + spielbrettArray[6][0] = '2'; + spielbrettArray[6][1] = ' '; + spielbrettArray[6][2] = ' '; + spielbrettArray[6][3] = ' '; + spielbrettArray[6][4] = 'X'; + spielbrettArray[6][5] = 'X'; + spielbrettArray[6][6] = '\u25A1'; + spielbrettArray[6][7] = ' '; + spielbrettArray[6][8] = ' '; + spielbrettArray[6][9] = ' '; - spielbrettArray[7][0] = '1'; - spielbrettArray[7][1] = ' '; - spielbrettArray[7][2] = ' '; - spielbrettArray[7][3] = ' '; - spielbrettArray[7][4] = 'X'; - spielbrettArray[7][5] = 'X'; - spielbrettArray[7][6] = 'X'; - spielbrettArray[7][7] = ' '; - spielbrettArray[7][8] = ' '; - spielbrettArray[7][9] = ' '; + spielbrettArray[7][0] = '1'; + spielbrettArray[7][1] = ' '; + spielbrettArray[7][2] = ' '; + spielbrettArray[7][3] = ' '; + spielbrettArray[7][4] = 'X'; + spielbrettArray[7][5] = 'X'; + spielbrettArray[7][6] = 'X'; + spielbrettArray[7][7] = ' '; + spielbrettArray[7][8] = ' '; + spielbrettArray[7][9] = ' '; - spielbrettArray[8][0] = '0'; - spielbrettArray[8][1] = ' '; - spielbrettArray[8][2] = ' '; - spielbrettArray[8][3] = ' '; - spielbrettArray[8][4] = 'X'; - spielbrettArray[8][5] = 'X'; - spielbrettArray[8][6] = 'X'; - spielbrettArray[8][7] = ' '; - spielbrettArray[8][8] = ' '; - spielbrettArray[8][9] = ' '; + spielbrettArray[8][0] = '0'; + spielbrettArray[8][1] = ' '; + spielbrettArray[8][2] = ' '; + spielbrettArray[8][3] = ' '; + spielbrettArray[8][4] = 'X'; + spielbrettArray[8][5] = 'X'; + spielbrettArray[8][6] = 'X'; + spielbrettArray[8][7] = ' '; + spielbrettArray[8][8] = ' '; + spielbrettArray[8][9] = ' '; - spielbrettArray[9][0] = ' '; - spielbrettArray[9][1] = '0'; - spielbrettArray[9][2] = '1'; - spielbrettArray[9][3] = '2'; - spielbrettArray[9][4] = '3'; - spielbrettArray[9][5] = '4'; - spielbrettArray[9][6] = '5'; - spielbrettArray[9][7] = '6'; - spielbrettArray[9][8] = '7'; - spielbrettArray[9][9] = '8'; + spielbrettArray[9][0] = ' '; + spielbrettArray[9][1] = '0'; + spielbrettArray[9][2] = '1'; + spielbrettArray[9][3] = '2'; + spielbrettArray[9][4] = '3'; + spielbrettArray[9][5] = '4'; + spielbrettArray[9][6] = '5'; + spielbrettArray[9][7] = '6'; + spielbrettArray[9][8] = '7'; + spielbrettArray[9][9] = '8'; return spielbrettArray; } diff --git a/src/domain/Spielfigur.java b/src/domain/Spielfigur.java index e788244..c5dedf7 100644 --- a/src/domain/Spielfigur.java +++ b/src/domain/Spielfigur.java @@ -2,7 +2,7 @@ package domain; 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) { // return false; // } diff --git a/src/facade/Spielsystem.java b/src/facade/Spielsystem.java index 8bc2141..b14251b 100644 --- a/src/facade/Spielsystem.java +++ b/src/facade/Spielsystem.java @@ -190,45 +190,13 @@ public class Spielsystem { } 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); + return spieler.oberIsValidMove(zug, spiel); } 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) // <--------------------------------------------------------------------- @@ -251,7 +219,10 @@ public class Spielsystem { int counterMittlereReihe = 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 neueStartX = neueKoordinaten[1]; int neueZielY = neueKoordinaten[2]; @@ -283,6 +254,12 @@ public class Spielsystem { computer.moveSpielfigur(neueStartY, neueStartX, neueZielY, neueZielX, spiel); } } + + 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) { @@ -361,7 +338,7 @@ public class Spielsystem { public boolean pushHenne(String zugPushHenne) { char[][] spielbrett = spiel.getSpielbrettArray(); - int[] neueKoordinaten = berechneRichtigeKoordinaten(zugPushHenne); + int[] neueKoordinaten = spiel.berechneRichtigeKoordinaten(zugPushHenne); int neueStartY = neueKoordinaten[0]; int neueStartX = neueKoordinaten[1]; int neueZielY = neueKoordinaten[2]; diff --git a/src/ui/UI.java b/src/ui/UI.java index a13eff7..54da4a1 100644 --- a/src/ui/UI.java +++ b/src/ui/UI.java @@ -322,6 +322,10 @@ public class UI { zugHenne = true; zugFuchs = false; + + if (spielsystem.fuchsUmzingelt() == true) { + spielsystem.killFuchs(); + } } // nach jedem Zug das Spielbrett ausgeben