From 75bc558ff3daf4f264e9b8e31d4a1db990d9f502 Mon Sep 17 00:00:00 2001 From: 2211320 <2211320@stud.hs-mannheim.de> Date: Sat, 17 Dec 2022 22:04:21 +0100 Subject: [PATCH] =?UTF-8?q?BotHard=20und=20miniMax=20sind=20so=20gut=20wie?= =?UTF-8?q?=20fertig,=20fehlt=20nur=20noch=20die=20Bewertung=20der=20Z?= =?UTF-8?q?=C3=BCge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/domain/BotHardFuchs.java | 25 +- src/domain/BotHardHenne.java | 27 +- src/domain/Spiel.java | 753 ++++++++++++----------------------- 3 files changed, 297 insertions(+), 508 deletions(-) diff --git a/src/domain/BotHardFuchs.java b/src/domain/BotHardFuchs.java index 2e0a0f2..e1df386 100644 --- a/src/domain/BotHardFuchs.java +++ b/src/domain/BotHardFuchs.java @@ -1,6 +1,5 @@ package domain; -import java.util.ArrayList; import java.util.Arrays; public class BotHardFuchs extends Bot { @@ -14,15 +13,27 @@ public class BotHardFuchs extends Bot { char[][] spielbrettArray = spiel.getSpielbrettArray(); char[][] kopieSpielbrett = Arrays.stream(spielbrettArray).map(char[]::clone).toArray(char[][]::new); - ArrayList alleZüge = new ArrayList<>(); + // ArrayList alleZüge = new ArrayList<>(); - alleZüge = spiel.alleZügeFuchs(kopieSpielbrett, spiel); - for (String züge : alleZüge) { - System.out.println(züge); - } + // long start = System.currentTimeMillis(); + // alleZüge = spiel.alleZügeFuchs(kopieSpielbrett, spiel); + // for (String züge : alleZüge) { + // System.out.println(züge); + // } + // long end = System.currentTimeMillis(); + // System.out.println("--------------------------------------------------------"); + // System.out.println(end - start); + // System.out.println("--------------------------------------------------------"); - int bewertung = spiel.miniMax(kopieSpielbrett, null, 1, false, spiel); + long start = System.currentTimeMillis(); + int bewertung = spiel.miniMax(kopieSpielbrett, null, 5, false, spiel); + long end = System.currentTimeMillis(); + System.out.println("--------------------------------------------------------"); + System.out.println(end - start); + System.out.println("--------------------------------------------------------"); + System.out.println(); + System.out.println(bewertung); System.out.println(); System.out.println("HIER IST ENDE FÜR BOTHARDFUCHS! -----------------------------------------------------------------"); System.out.println(); diff --git a/src/domain/BotHardHenne.java b/src/domain/BotHardHenne.java index dbddbbd..d2917fe 100644 --- a/src/domain/BotHardHenne.java +++ b/src/domain/BotHardHenne.java @@ -1,6 +1,5 @@ package domain; -import java.util.ArrayList; import java.util.Arrays; public class BotHardHenne extends Bot { @@ -14,15 +13,27 @@ public class BotHardHenne extends Bot { char[][] spielbrettArray = spiel.getSpielbrettArray(); char[][] kopieSpielbrett = Arrays.stream(spielbrettArray).map(char[]::clone).toArray(char[][]::new); - ArrayList alleZüge = new ArrayList<>(); - - alleZüge = spiel.alleZügeHennen(kopieSpielbrett, spiel); - for (String züge : alleZüge) { - System.out.println(züge); - } + // ArrayList alleZüge = new ArrayList<>(); - int bewertung = spiel.miniMax(kopieSpielbrett, null, 1, true, spiel); + // long start = System.currentTimeMillis(); + // alleZüge = spiel.alleZügeHennen(kopieSpielbrett, spiel); + // for (String züge : alleZüge) { + // System.out.println(züge); + // } + // long end = System.currentTimeMillis(); + // System.out.println("--------------------------------------------------------"); + // System.out.println(end - start); + // System.out.println("--------------------------------------------------------"); + long start = System.currentTimeMillis(); + int bewertung = spiel.miniMax(kopieSpielbrett, null, 5, true, spiel); + long end = System.currentTimeMillis(); + System.out.println("--------------------------------------------------------"); + System.out.println(end - start); + System.out.println("--------------------------------------------------------"); + + System.out.println(); + System.out.println(bewertung); System.out.println(); System.out.println("HIER IST ENDE FÜR BOTHARDHENNE! -----------------------------------------------------------------"); System.out.println(); diff --git a/src/domain/Spiel.java b/src/domain/Spiel.java index 0752e3d..b40cd26 100644 --- a/src/domain/Spiel.java +++ b/src/domain/Spiel.java @@ -198,6 +198,7 @@ public class Spiel { return zug; } + // überprüfen wann und ob die Hennen gewonnen haben public boolean gewinnBedingungHennen() { if (spielbrettArray[0][4] == 'X' && spielbrettArray[0][5] == 'X' && spielbrettArray[0][6] == 'X' && spielbrettArray[1][4] == 'X' && spielbrettArray[1][5] == 'X' && spielbrettArray[1][6] == 'X' @@ -206,6 +207,7 @@ public class Spiel { } int spielfigurExistiert = 0; + // wenn kein Fuchs mehr existiert, dann ist automatisch gewonnen for (int i = 0; i < spielbrettArray.length; i++) { for (int k = 0; k < spielbrettArray[i].length; k++) { if (spielbrettArray[i][k] == 'O') { @@ -222,6 +224,7 @@ public class Spiel { return false; } + // überprüfen wann und ob der Fuchs gewonnen hat public boolean gewinnBedingungFuchs() { int spielfigurExistiert = 0; @@ -238,9 +241,11 @@ public class Spiel { return false; } + // prüfen ob und wie viele Spielfiguren eines Typs momentan auf dem Spielbrett existieren public ArrayList spielfigurExistiert(Spielfigur spielfigur) { ArrayList spielfigurExistiert = new ArrayList<>(); + // überprüfen wie viele Füchse momentan existieren, bei 2 ist Schluss, weil mehr können nicht gleichzeitig existieren if(spielfigur instanceof Fuchs) { for(int i = 0; i < spielbrettArray.length; i++ ) { @@ -256,6 +261,7 @@ public class Spiel { return spielfigurExistiert; } + // überprüfen wie viele Hennen momentan existieren, bei 27 ist Schluss, weil mehr können nicht gleichzeitig existieren if(spielfigur instanceof Hennen) { for(int i = 0; i < spielbrettArray.length; i++ ) { @@ -273,21 +279,27 @@ public class Spiel { return null; } + // rekursiver Aufruf zum Vorhersagen und bewerten der möglichen Züge die der Computer und Mensch tätigen könnten public int miniMax(char[][] kopieSpielbrett, String zug, int tiefe, boolean maxPlayer, Spiel spiel) { + // wenn Vorhersagungstiefe erreicht, dann aktuellen Zug bewerten if(tiefe == 0) { - int bewertung = bewerteSpielzug(zug); + int bewertung = bewerteSpielzug(zug, maxPlayer); + // System.out.println(bewertung); return bewertung; } - + // wenn Henne dran ist, dann vorhersagen welche Züge die Henne tätigen könnte if(maxPlayer == true) { - int maxWert = (-9999); + int maxWert = -9999; ArrayList potenzielleZüge = getMoves(kopieSpielbrett, maxPlayer, spiel); + // mit einem bestimmten Spielzug der Henne rekursiv vorhersagen wie optimal dieser ist for(int i = 0; i< potenzielleZüge.size(); i++) { zug = potenzielleZüge.get(i); + // Henne verschieben simulieren ändereWertImArray(Character.getNumericValue(zug.charAt(0)), Character.getNumericValue(zug.charAt(2)), '\u25A1'); ändereWertImArray(Character.getNumericValue(zug.charAt(4)), Character.getNumericValue(zug.charAt(6)), 'X'); + // rekursiv die Tiefe der Vorhersagung ändern int wert = miniMax(kopieSpielbrett, zug, tiefe-1, false, spiel); if(wert > maxWert) { maxWert = wert; @@ -296,35 +308,71 @@ public class Spiel { ändereWertImArray(Character.getNumericValue(zug.charAt(4)), Character.getNumericValue(zug.charAt(6)), '\u25A1'); } return maxWert; + + // wenn Fuchs dran ist, dann vorhersagen welche Züge der Fuchs tätigen könnte } else { int minWert = 9999; ArrayList potenzielleZüge = getMoves(kopieSpielbrett, maxPlayer, spiel); + // mit einem bestimmten Spielzug der Füchse rekursiv vorhersagen wie optimal dieser ist for(int i = 0; i< potenzielleZüge.size(); i++) { zug = potenzielleZüge.get(i); - // Änderung ist noch nicht wirklich richtig für den Fuchs --------------------------------------------------------------------- - ändereWertImArray(zug.charAt(0), zug.charAt(2), '\u25A1'); - ändereWertImArray(zug.charAt(4), zug.charAt(6), 'O'); + // alle speziellen Züge werden gesondert aufgeteilt und verändern das Spielbrett gesondert + if(zug.length() != 7) { + int anzahlZüge = zug.length() / 4; + String zwischenzug; - int wert = miniMax(kopieSpielbrett, zug, tiefe-1, true, spiel); - if(wert > minWert) { - minWert = wert; + // der erste Wert im Zug kann sofort verändert werden + ändereWertImArray(Character.getNumericValue(zug.charAt(0)), Character.getNumericValue(zug.charAt(2)), '\u25A1'); + + // Schleife um die Henne zu killen und um den Fuchs zu verschieben + for(int zugZähler = 2, beginnChar = 4, endeChar = 12; zugZähler <= anzahlZüge; zugZähler += 2, beginnChar += 8, endeChar += 8) { + zwischenzug = zug.substring(beginnChar, endeChar); + + ändereWertImArray(Character.getNumericValue(zwischenzug.charAt(0)), Character.getNumericValue(zwischenzug.charAt(2)), '\u25A1'); + ändereWertImArray(Character.getNumericValue(zwischenzug.charAt(4)), Character.getNumericValue(zwischenzug.charAt(6)), 'O'); + } + // rekursiv die Tiefe der Vorhersagung ändern + int wert = miniMax(kopieSpielbrett, zug, tiefe-1, true, spiel); + if(wert > minWert) { + minWert = wert; + } + // der erste Wert im Zug wird sofort wieder rückgängig gemacht + ändereWertImArray(Character.getNumericValue(zug.charAt(0)), Character.getNumericValue(zug.charAt(2)), 'O'); + + // Schleife um die Henne quasi wiederzubeleben und um den Fuchs wieder zurück zu verändern + for(int zugZähler = 2, beginnChar = 4, endeChar = 12; zugZähler <= anzahlZüge; zugZähler += 2, beginnChar += 8, endeChar += 8) { + zwischenzug = zug.substring(beginnChar, endeChar); + + ändereWertImArray(Character.getNumericValue(zwischenzug.charAt(0)), Character.getNumericValue(zwischenzug.charAt(2)), 'X'); + ändereWertImArray(Character.getNumericValue(zwischenzug.charAt(4)), Character.getNumericValue(zwischenzug.charAt(6)), '\u25A1'); + } + } else { + // bei einem normalen Zug ohne eine Henne zu killen, wird das Spielbrett normal verändert + ändereWertImArray(Character.getNumericValue(zug.charAt(0)), Character.getNumericValue(zug.charAt(2)), '\u25A1'); + ändereWertImArray(Character.getNumericValue(zug.charAt(4)), Character.getNumericValue(zug.charAt(6)), 'O'); + + int wert = miniMax(kopieSpielbrett, zug, tiefe-1, true, spiel); + if(wert > minWert) { + minWert = wert; + } + ändereWertImArray(Character.getNumericValue(zug.charAt(0)), Character.getNumericValue(zug.charAt(2)), 'O'); + ändereWertImArray(Character.getNumericValue(zug.charAt(4)), Character.getNumericValue(zug.charAt(6)), '\u25A1'); } - // Änderung ist noch nicht wirklich richtig für den Fuchs --------------------------------------------------------------------- - ändereWertImArray(zug.charAt(0), zug.charAt(2), 'O'); - ändereWertImArray(zug.charAt(4), zug.charAt(6), '\u25A1'); } return minWert; } } - public int bewerteSpielzug(String zug) { - int bewertung = 0; + // getätigten Spielzug bewerten + public int bewerteSpielzug(String zug, boolean maxPlayer) { + int bewertung = 5; return bewertung; } + // Liste mit allen möglichen Zügen der Spielfigur erstellen public ArrayList getMoves(char[][] kopieSpielbrett, boolean maxPlayer, Spiel spiel) { if(maxPlayer == true) { return alleZügeHennen(kopieSpielbrett, spiel); @@ -333,6 +381,7 @@ public class Spiel { } } + // packt alle möglichen Hennen Züge in eine ArrayList und übergibt sie getMoves public ArrayList alleZügeHennen(char[][] kopieSpielbrett, Spiel spiel) { ArrayList alleZüge = new ArrayList<>(); ArrayList spielfigurExistiert = new ArrayList<>(); @@ -350,6 +399,7 @@ public class Spiel { int altX = Character.getNumericValue(random.charAt(2)); int neuY = altY; + // links und rechts von der Henne frei? for(int x = altX - 1; x < altX + 2; x += 2) { if(x == 0 || x == 10) { if(x == 0) { @@ -359,7 +409,7 @@ public class Spiel { break; } } - if(kopieSpielbrett[altY][x] == '\u25A1') { + if(getWertAusArray(altY, x) == '\u25A1') { zug = altY + "," + altX + " " + altY + "," + x; alleZüge.add(zug); } @@ -367,7 +417,8 @@ public class Spiel { if(neuY - 1 == -1) { // tue nichts } else { - if(kopieSpielbrett[neuY - 1][altX] == '\u25A1') { + // über der Henne frei? + if(getWertAusArray(altY - 1, altX) == '\u25A1') { zug = altY + "," + altX + " " + (neuY - 1) + "," + altX; alleZüge.add(zug); } @@ -377,11 +428,11 @@ public class Spiel { return alleZüge; } + // packt alle möglichen Fuchs Züge in eine ArrayList und übergibt sie getMoves public ArrayList alleZügeFuchs(char[][] kopieSpielbrett, Spiel spiel) { ArrayList alleZüge = new ArrayList<>(); ArrayList spielfigurExistiert = new ArrayList<>(); Spielfigur fuchs = new Fuchs(); - String zug; Random rand = new Random(); spielfigurExistiert = spielfigurExistiert(fuchs); @@ -390,43 +441,202 @@ public class Spiel { int index = rand.nextInt(spielfigurExistiert.size()); String random = spielfigurExistiert.get(index); - int altY = Character.getNumericValue(random.charAt(0)); - int altX = Character.getNumericValue(random.charAt(2)); - - for(int y = altY - 1; y < altY + 2; y++) { - if(y == -1 || y == 9) { - if(y == -1) { - y++; - } - if(y == 9) { - break; - } - } - for(int x = altX - 1; x < altX + 2; x++) { - if(kopieSpielbrett[y][x] == kopieSpielbrett[altY][altX] || x == 0 || x == 10) { - if(kopieSpielbrett[y][x] == kopieSpielbrett[altY][altX]) { - x++; - } - if(x == 0) { - x++; - } - if(x == 10) { - break; - } - } + // rekursiver Aufruf zum überprüfen welche Züge ein bestimmter Fuchs gehen kann + rekursivFuchsZug(kopieSpielbrett, random, null, alleZüge); - // hier fehlt dem Bot noch das er Hennen erkennt bze. killen kann ------------------------------------------------------------ - if(kopieSpielbrett[y][x] == '\u25A1') { - zug = altY + "," + altX + " " + y + "," + x; - alleZüge.add(zug); - } - } - } spielfigurExistiert.remove(index); } while(spielfigurExistiert.size() > 0); return alleZüge; } + // es wird rekursiv überprüft welche Züge ein bestimmter Fuchs gehen kann + // rekursiv ist es nur damit der zurückgegebene String eine bestimmte Schreibweise hat + public void rekursivFuchsZug(char[][] kopieSpielbrett, String startKoordinate, String zgeKoordinaten, ArrayList alleZüge) { + String zug = null; + String neueStartkoordinate; + + int altY = Character.getNumericValue(startKoordinate.charAt(0)); + int altX = Character.getNumericValue(startKoordinate.charAt(2)); + + // über und unter dem Fuchs überprüfen + for(int y = altY - 1; y < altY + 2; y++) { + if(y == -1 || y == 9) { + if(y == -1) { + y++; + } + if(y == 9) { + break; + } + } + // seitlich vom Fuchs überprüfen + for(int x = altX - 1; x < altX + 2; x++) { + if(y == altY && x == altX || x == 0 || x == 10) { + if(y == altY && x == altX) { + x++; + } + if(x == 0) { + x++; + } + if(x == 10) { + break; + } + } + // wenn Feld leer, dann vermerken + if(getWertAusArray(y, x) == '\u25A1') { + zug = altY + "," + altX + " " + y + "," + x; + alleZüge.add(zug); + } + // wenn eine Henne zu killen ist und sich diese auf einem validen Feld befindet, dann rekursiv vermerken + if(getWertAusArray(y, x) == 'X' && y - 1 != -1 && y + 1 != 9 && x - 1 != 0 && x + 1 != 10 && henneInSafeZone(y, x) == false) { + if(y - altY == 1 || y - altY == -1) { + if(x - altX == 1 || x - altX == -1) { + if(x - altX == 1) { + if(y - altY == 1) { + if(getWertAusArray(y + 1, x + 1) == '\u25A1') { + // wenn von der Startkoordinate aus noch keine Henne gekillt wurde, dann so vermerken + if(zgeKoordinaten == null) { + zug = altY + "," + altX + " " + y + "," + x + " " + (y + 1) + "," + (x + 1) + " "; + alleZüge.add(zug); + } + // wenn von der Startkoordinate aus schon Hennen gekillt wurden, dann gestapelt vermerken + if(zgeKoordinaten != null) { + zug = zgeKoordinaten + y + "," + x + " " + (y + 1) + "," + (x + 1) + " "; + alleZüge.add(zug); + } + // Henne killen und Fuchs verschieben simulieren + neueStartkoordinate = (y + 1) + "," + (x + 1); + ändereWertImArray(altY, altX, '\u25A1'); ändereWertImArray(y, x, '\u25A1'); ändereWertImArray((y + 1), (x + 1), 'O'); + // rekursiv von der neuen und veränderten Position aus erneut überprüfen + rekursivFuchsZug(kopieSpielbrett, neueStartkoordinate, zug, alleZüge); + ändereWertImArray(altY, altX, 'O'); ändereWertImArray(y, x, 'X'); ändereWertImArray((y + 1), (x + 1), '\u25A1'); + } + } else { + if(getWertAusArray(y - 1, x - 1) == '\u25A1') { + if(zgeKoordinaten == null) { + zug = altY + "," + altX + " " + y + "," + x + " " + (y - 1) + "," + (x + 1) + " "; + alleZüge.add(zug); + } + if(zgeKoordinaten != null) { + zug = zgeKoordinaten + y + "," + x + " " + (y - 1) + "," + (x + 1) + " "; + alleZüge.add(zug); + } + neueStartkoordinate = (y - 1) + "," + (x + 1); + ändereWertImArray(altY, altX, '\u25A1'); ändereWertImArray(y, x, '\u25A1'); ändereWertImArray((y - 1), (x + 1), 'O'); + rekursivFuchsZug(kopieSpielbrett, neueStartkoordinate, zug, alleZüge); + ändereWertImArray(altY, altX, 'O'); ändereWertImArray(y, x, 'X'); ändereWertImArray((y - 1), (x + 1), '\u25A1'); + } + } + } else { + if(y - altY == 1) { + if(getWertAusArray(y + 1, x + 1) == '\u25A1') { + if(zgeKoordinaten == null) { + zug = altY + "," + altX + " " + y + "," + x + " " + (y + 1) + "," + (x - 1) + " "; + alleZüge.add(zug); + } + if(zgeKoordinaten != null) { + zug = zgeKoordinaten + y + "," + x + " " + (y + 1) + "," + (x - 1) + " "; + alleZüge.add(zug); + } + neueStartkoordinate = (y + 1) + "," + (x - 1); + ändereWertImArray(altY, altX, '\u25A1'); ändereWertImArray(y, x, '\u25A1'); ändereWertImArray((y + 1), (x - 1), 'O'); + rekursivFuchsZug(kopieSpielbrett, neueStartkoordinate, zug, alleZüge); + ändereWertImArray(altY, altX, 'O'); ändereWertImArray(y, x, 'X'); ändereWertImArray((y + 1), (x - 1), '\u25A1'); + } + } else { + if(getWertAusArray(y - 1, x - 1) == '\u25A1') { + if(zgeKoordinaten == null) { + zug = altY + "," + altX + " " + y + "," + x + " " + (y - 1) + "," + (x - 1) + " "; + alleZüge.add(zug); + } + if(zgeKoordinaten != null) { + zug = zgeKoordinaten + y + "," + x + " " + (y - 1) + "," + (x - 1) + " "; + alleZüge.add(zug); + } + neueStartkoordinate = (y - 1) + "," + (x - 1); + ändereWertImArray(altY, altX, '\u25A1'); ändereWertImArray(y, x, '\u25A1'); ändereWertImArray((y - 1), (x - 1), 'O'); + rekursivFuchsZug(kopieSpielbrett, neueStartkoordinate, zug, alleZüge); + ändereWertImArray(altY, altX, 'O'); ändereWertImArray(y, x, 'X'); ändereWertImArray((y - 1), (x - 1), '\u25A1'); + } + } + } + } else if(y - altY == 1) { + if(getWertAusArray(y + 1, x) == '\u25A1') { + if(zgeKoordinaten == null) { + zug = altY + "," + altX + " " + y + "," + x + " " + (y + 1) + "," + x + " "; + alleZüge.add(zug); + } + if(zgeKoordinaten != null) { + zug = zgeKoordinaten + y + "," + x + " " + (y + 1) + "," + x + " "; + alleZüge.add(zug); + } + neueStartkoordinate = (y + 1) + "," + x; + ändereWertImArray(altY, altX, '\u25A1'); ändereWertImArray(y, x, '\u25A1'); ändereWertImArray((y + 1), x, 'O'); + rekursivFuchsZug(kopieSpielbrett, neueStartkoordinate, zug, alleZüge); + ändereWertImArray(altY, altX, 'O'); ändereWertImArray(y, x, 'X'); ändereWertImArray((y + 1), x, '\u25A1'); + } + } else { + if(getWertAusArray(y - 1, x) == '\u25A1') { + if(zgeKoordinaten == null) { + zug = altY + "," + altX + " " + y + "," + x + " " + (y - 1) + "," + x + " "; + alleZüge.add(zug); + } + if(zgeKoordinaten != null) { + zug = zgeKoordinaten + y + "," + x + " " + (y - 1) + "," + x + " "; + alleZüge.add(zug); + } + neueStartkoordinate = (y - 1) + "," + x; + ändereWertImArray(altY, altX, '\u25A1'); ändereWertImArray(y, x, '\u25A1'); ändereWertImArray((y - 1), x, 'O'); + rekursivFuchsZug(kopieSpielbrett, neueStartkoordinate, zug, alleZüge); + ändereWertImArray(altY, altX, 'O'); ändereWertImArray(y, x, 'X'); ändereWertImArray((y - 1), x, '\u25A1'); + } + } + } else if(x - altX == 1 || x - altX == -1) { + if(x - altX == 1) { + if(getWertAusArray(y, x + 1) == '\u25A1') { + if(zgeKoordinaten == null) { + zug = altY + "," + altX + " " + y + "," + x + " " + y + "," + (x + 1) + " "; + alleZüge.add(zug); + } + if(zgeKoordinaten != null) { + zug = zgeKoordinaten + y + "," + x + " " + y + "," + (x + 1) + " "; + alleZüge.add(zug); + } + neueStartkoordinate = y + "," + (x + 1); + ändereWertImArray(altY, altX, '\u25A1'); ändereWertImArray(y, x, '\u25A1'); ändereWertImArray(y, (x + 1), 'O'); + rekursivFuchsZug(kopieSpielbrett, neueStartkoordinate, zug, alleZüge); + ändereWertImArray(altY, altX, 'O'); ändereWertImArray(y, x, 'X'); ändereWertImArray(y, (x + 1), '\u25A1'); + } + } else { + if(getWertAusArray(y, x - 1) == '\u25A1') { + if(zgeKoordinaten == null) { + zug = altY + "," + altX + " " + y + "," + x + " " + y + "," + (x - 1) + " "; + alleZüge.add(zug); + } + if(zgeKoordinaten != null) { + zug = zgeKoordinaten + y + "," + x + " " + y + "," + (x - 1) + " "; + alleZüge.add(zug); + } + neueStartkoordinate = y + "," + (x - 1); + ändereWertImArray(altY, altX, '\u25A1'); ändereWertImArray(y, x, '\u25A1'); ändereWertImArray(y, (x - 1), 'O'); + rekursivFuchsZug(kopieSpielbrett, neueStartkoordinate, zug, alleZüge); + ändereWertImArray(altY, altX, 'O'); ändereWertImArray(y, x, 'X'); ändereWertImArray(y, (x - 1), '\u25A1'); + } + } + } + } + } + } + } + + // quasi von der Fuchs Klasse kopiert + public boolean henneInSafeZone(int yAchse, int xAchse) { + if (yAchse <= 2 && (xAchse == 4 || xAchse == 5 || xAchse == 6)) { + return true; + } + return false; + } + + // wandelt Koordinaten von Array Schreibweise in menschliche Schreibweise um public int[] wandelUmgekehrtUm(int umwandeln1, int umwandeln2, int umwandeln3, int umwandeln4) { int[] umgewandelt = new int[4]; umgewandelt[0] = (umwandeln2 - 1); @@ -437,6 +647,7 @@ public class Spiel { return umgewandelt; } + // wandelt Koordinaten von menschlicher Schreibweise in Array Schreibweise um public int[] wandelPassendUm(int umwandeln1, int umwandeln2) { int[] umgewandelt = new int[2]; umgewandelt[0] = (8 - umwandeln2); @@ -444,448 +655,4 @@ public class Spiel { return umgewandelt; } - - // public int[] wandelPassendUm(int umwandeln1, int umwandeln2) { - // // Erlaubte Koordinaten sind: - // // 3,0 / 4,0 / 5,0 - 3,1 / 4,1 / 5,1 - 3,2 / 4,2 / 5,2 - // // 0,3 / 1,3 / 2,3 / 3,3 / 4,3 / 5,3 / 6,3 / 7,3 / 8,3 - // // 0,4 / ... - // // 0,5 / ... - // // 3,6 / 4,6 / 5,6 - 3,7 / 4,7 / 5,7 - 3,8 / 4,8 / 5,8 - - // // Fälle 3,0 / 4,0 / 5,0 - // if (umwandeln1 == 3 && umwandeln2 == 0) { - // umwandeln1 = 8; - // umwandeln2 = 4; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - - // } - // if (umwandeln1 == 4 && umwandeln2 == 0) { - // umwandeln1 = 8; - // umwandeln2 = 5; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 5 && umwandeln2 == 0 ) { - // umwandeln1 = 8 ; - // umwandeln2 = 6 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - - // // Fälle 3,1 / 4,1 / 5,1 - // if (umwandeln1 == 3 && umwandeln2 == 1 ) { - // umwandeln1 = 7 ; - // umwandeln2 = 4 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - - // } - // if (umwandeln1 == 4 && umwandeln2 == 1 ) { - // umwandeln1 = 7 ; - // umwandeln2 = 5 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 5 && umwandeln2 == 1 ) { - // umwandeln1 = 7 ; - // umwandeln2 = 6 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - - // // Fälle 3,2 / 4,2 / 5,2 - // if (umwandeln1 == 3 && umwandeln2 == 2 ) { - // umwandeln1 = 6 ; - // umwandeln2 = 4 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - - // } - // if (umwandeln1 == 4 && umwandeln2 == 2 ) { - // umwandeln1 = 6 ; - // umwandeln2 = 5 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 5 && umwandeln2 == 2 ) { - // umwandeln1 = 6 ; - // umwandeln2 = 6 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - - // // Fälle 0,3 - 8,3 - // if (umwandeln1 == 0 && umwandeln2 == 3 ) { - // umwandeln1 = 5 ; - // umwandeln2 = 1 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 1 && umwandeln2 == 3 ) { - // umwandeln1 = 5 ; - // umwandeln2 = 2 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 2 && umwandeln2 == 3 ) { - // umwandeln1 = 5 ; - // umwandeln2 = 3 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 3 && umwandeln2 == 3 ) { - // umwandeln1 = 5 ; - // umwandeln2 = 4 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 4 && umwandeln2 == 3 ) { - // umwandeln1 = 5 ; - // umwandeln2 = 5 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 5 && umwandeln2 == 3 ) { - // umwandeln1 = 5 ; - // umwandeln2 = 6 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 6 && umwandeln2 == 3 ) { - // umwandeln1 = 5 ; - // umwandeln2 = 7 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 7 && umwandeln2 == 3 ) { - // umwandeln1 = 5 ; - // umwandeln2 = 8 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 8 && umwandeln2 == 3 ) { - // umwandeln1 = 5 ; - // umwandeln2 = 9 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // // Fälle 0,4 - 8,4 - // if (umwandeln1 == 0 && umwandeln2 == 4 ) { - // umwandeln1 = 4 ; - // umwandeln2 = 1 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 1 && umwandeln2 == 4 ) { - // umwandeln1 = 4 ; - // umwandeln2 = 2 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 2 && umwandeln2 == 4 ) { - // umwandeln1 = 4 ; - // umwandeln2 = 3 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 3 && umwandeln2 == 4 ) { - // umwandeln1 = 4 ; - // umwandeln2 = 4 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 4 && umwandeln2 == 4 ) { - // umwandeln1 = 4 ; - // umwandeln2 = 5 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 5 && umwandeln2 == 4 ) { - // umwandeln1 = 4 ; - // umwandeln2 = 6 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 6 && umwandeln2 == 4 ) { - // umwandeln1 = 4 ; - // umwandeln2 = 7 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 7 && umwandeln2 == 4 ) { - // umwandeln1 = 4 ; - // umwandeln2 = 8 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 8 && umwandeln2 == 4 ) { - // umwandeln1 = 4 ; - // umwandeln2 = 9 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - - // // Fälle 0,5 - 8,5 - // if (umwandeln1 == 0 && umwandeln2 == 5 ) { - // umwandeln1 = 3 ; - // umwandeln2 = 1 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 1 && umwandeln2 == 5 ) { - // umwandeln1 = 3 ; - // umwandeln2 = 2 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 2 && umwandeln2 == 5 ) { - // umwandeln1 = 3 ; - // umwandeln2 = 3 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 3 && umwandeln2 == 5 ) { - // umwandeln1 = 3 ; - // umwandeln2 = 4 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 4 && umwandeln2 == 5 ) { - // umwandeln1 = 3 ; - // umwandeln2 = 5 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 5 && umwandeln2 == 5 ) { - // umwandeln1 = 3 ; - // umwandeln2 = 6 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 6 && umwandeln2 == 5 ) { - // umwandeln1 = 3 ; - // umwandeln2 = 7 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 7 && umwandeln2 == 5 ) { - // umwandeln1 = 3 ; - // umwandeln2 = 8 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 8 && umwandeln2 == 5 ) { - // umwandeln1 = 3 ; - // umwandeln2 = 9 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - - // //Fälle 3,6 - 5,6 - // if (umwandeln1 == 3 && umwandeln2 == 6) { - // umwandeln1 = 2; - // umwandeln2 = 4; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - - // } - // if (umwandeln1 == 4 && umwandeln2 == 6) { - // umwandeln1 = 2; - // umwandeln2 = 5; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 5 && umwandeln2 == 6 ) { - // umwandeln1 = 2 ; - // umwandeln2 = 6 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // //Fälle 3,7 - 5,7 - // if (umwandeln1 == 3 && umwandeln2 == 7) { - // umwandeln1 = 1; - // umwandeln2 = 4; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - - // } - // if (umwandeln1 == 4 && umwandeln2 == 7) { - // umwandeln1 = 1; - // umwandeln2 = 5; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 5 && umwandeln2 == 7 ) { - // umwandeln1 = 1 ; - // umwandeln2 = 6 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // //Fälle 3,8 - 5,8 - // if (umwandeln1 == 3 && umwandeln2 == 8) { - // umwandeln1 = 0; - // umwandeln2 = 4; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - - // } - // if (umwandeln1 == 4 && umwandeln2 == 8) { - // umwandeln1 = 0; - // umwandeln2 = 5; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - // if (umwandeln1 == 5 && umwandeln2 == 8 ) { - // umwandeln1 = 0 ; - // umwandeln2 = 6 ; - - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = umwandeln1; - // umgewandelt[1] = umwandeln2; - // return umgewandelt; - // } - - // //Fehlerwert ist 1000 - // int[] umgewandelt = new int[2]; - // umgewandelt[0] = 1000; - // umgewandelt[1] = 1000; - // return umgewandelt; - - // } - - -} +} \ No newline at end of file