From f1a94b7b961c701f5749eed0efc9c6c887769d14 Mon Sep 17 00:00:00 2001 From: robinschumann Date: Mon, 5 Dec 2022 09:57:14 +0100 Subject: [PATCH] Sonderzug (Push Henne) dazu --- src/domain/Spiel.java | 6 +- src/facade/Spielsystem.java | 67 +++++++++ src/ui/UI.java | 285 ++++++++++++++++++++++-------------- 3 files changed, 242 insertions(+), 116 deletions(-) diff --git a/src/domain/Spiel.java b/src/domain/Spiel.java index ac4c05a..d67d9f7 100644 --- a/src/domain/Spiel.java +++ b/src/domain/Spiel.java @@ -40,9 +40,9 @@ public class Spiel { spielbrettArray[1][1] = ' '; spielbrettArray[1][2] = ' '; spielbrettArray[1][3] = ' '; - spielbrettArray[1][4] = '\u25A1'; + spielbrettArray[1][4] = 'O'; spielbrettArray[1][5] = '\u25A1'; - spielbrettArray[1][6] = '\u25A1'; + spielbrettArray[1][6] = 'O'; spielbrettArray[1][7] = ' '; spielbrettArray[1][8] = ' '; spielbrettArray[1][9] = ' '; @@ -210,7 +210,7 @@ public class Spiel { umgewandelt[1] = umwandeln2; return umgewandelt; } - if (umwandeln1 == 4 && umwandeln2 == 1 ) { + if (umwandeln1 == 5 && umwandeln2 == 1 ) { umwandeln1 = 7 ; umwandeln2 = 6 ; diff --git a/src/facade/Spielsystem.java b/src/facade/Spielsystem.java index 6f18772..bc386f4 100644 --- a/src/facade/Spielsystem.java +++ b/src/facade/Spielsystem.java @@ -298,4 +298,71 @@ public class Spielsystem { // UI.start(werBeginnt, kiLevel); } + public boolean findeHenne(String henneGewählt) { + + char[][] spielbrett = spiel.getSpielbrettArray(); + + char startKoordinate1 = henneGewählt.charAt(0); + char startKoordinate2 = henneGewählt.charAt(2); + + // Werte als int + int koordX = Character.getNumericValue(startKoordinate1); + int koordY = Character.getNumericValue(startKoordinate2); + + int[] neueKoordinaten = spiel.wandelPassendUm(koordX, koordY); + + int neuesX = neueKoordinaten[1]; + int neuesY = neueKoordinaten[0]; + + if (spielbrett[neuesY][neuesX] == 'X') { + System.out.println("Henne gefunden"); + return true; + } else { + System.out.println("Keine Henne an der gewählten Stelle"); + return false; + } + + } + + public boolean findeFreiesFeld(String pushHenne) { + char[][] spielbrett = spiel.getSpielbrettArray(); + + char startKoordinate1 = pushHenne.charAt(0); + char startKoordinate2 = pushHenne.charAt(2); + + // Werte als int + int koordX = Character.getNumericValue(startKoordinate1); + int koordY = Character.getNumericValue(startKoordinate2); + + int[] neueKoordinaten = spiel.wandelPassendUm(koordX, koordY); + + int neuesX = neueKoordinaten[1]; + int neuesY = neueKoordinaten[0]; + + if (spielbrett[neuesY][neuesX] == '\u25A1') { + System.out.println("freies Feld gefunden"); + return true; + } else { + System.out.println("Keine kein freies Feld an der gewählten Stelle"); + return false; + } + + } + + public boolean pushHenne(String zugPushHenne) { + char[][] spielbrett = spiel.getSpielbrettArray(); + + int[] neueKoordinaten = berechneRichtigeKoordinaten(zugPushHenne); + int neueStartY = neueKoordinaten[0]; + int neueStartX = neueKoordinaten[1]; + int neueZielY = neueKoordinaten[2]; + int neueZielX = neueKoordinaten[3]; + + spiel.ändereWertImArray(neueZielY, neueZielX, 'X'); + spiel.ändereWertImArray(neueStartY, neueStartX, '\u25A1'); + + return true; + + } + } diff --git a/src/ui/UI.java b/src/ui/UI.java index 56e1e1d..da54633 100644 --- a/src/ui/UI.java +++ b/src/ui/UI.java @@ -4,7 +4,6 @@ import java.util.Scanner; import facade.Spielsystem; - public class UI { private Spielsystem spielsystem; Scanner sc = new Scanner(System.in); @@ -17,98 +16,105 @@ public class UI { private void hauptmenü() { System.out.println("Willkommen beim Spiel des Jahres: " + spielsystem.getSpielname() + "!"); - mainloop: - while (true) { - System.out.println(); - System.out.println("--------"); - System.out.println("Hauptmenü:"); - System.out.println("1 -> Neues Spiel starten"); - System.out.println("2 -> Regeln anzeigen"); - System.out.println("8 -> Credits anzeigen"); + mainloop: while (true) { + System.out.println(); + System.out.println("--------"); + System.out.println("Hauptmenü:"); + System.out.println("1 -> Neues Spiel starten"); + System.out.println("2 -> Regeln anzeigen"); + System.out.println("8 -> Credits anzeigen"); - System.out.println("9 -> Beenden"); - System.out.println(); - System.out.print("> "); - - int input = 0; - try { - input = Integer.parseInt(sc.nextLine()); - System.out.println(); - } catch (NumberFormatException nfe) { - System.out.println("\nLeider haben Sie keine Zahl eingegeben. Bitte geben Sie eine Zahl ein:"); - } + System.out.println("9 -> Beenden"); + System.out.println(); + System.out.print("> "); - try { - switch(input) { - case 1: gameloop(); break; - //case 2: spielstandLaden(); break; - case 2: regelnAnzeigen(); break; - //case 7: highscoreAnzeigen(); break; - case 8: creditsAnzeigen(); break; - case 9: break mainloop; - } - } catch (Exception e) { - System.err.println(e.getLocalizedMessage()); - } + int input = 0; + try { + input = Integer.parseInt(sc.nextLine()); + System.out.println(); + } catch (NumberFormatException nfe) { + System.out.println("\nLeider haben Sie keine Zahl eingegeben. Bitte geben Sie eine Zahl ein:"); } + + try { + switch (input) { + case 1: + gameloop(); + break; + // case 2: spielstandLaden(); break; + case 2: + regelnAnzeigen(); + break; + // case 7: highscoreAnzeigen(); break; + case 8: + creditsAnzeigen(); + break; + case 9: + break mainloop; + } + } catch (Exception e) { + System.err.println(e.getLocalizedMessage()); + } + } System.out.println("Auf Wiedersehen!"); } - - + // hauptmenü // case 1: private void gameloop() { - gameloop: - while(true) { + gameloop: while (true) { + System.out.println(); + System.out.println("--------"); + System.out.println("Spielmenü:"); + System.out.println("1 -> Player vs. Player"); + System.out.println("2 -> Player vs. KI"); + + System.out.println("9 -> Zurück"); + System.out.println(); + System.out.print("> "); + int input = 0; + + try { + input = Integer.parseInt(sc.nextLine()); System.out.println(); - System.out.println("--------"); - System.out.println("Spielmenü:"); - System.out.println("1 -> Player vs. Player"); - System.out.println("2 -> Player vs. KI"); - - System.out.println("9 -> Zurück"); - System.out.println(); - System.out.print("> "); - int input = 0; - - try { - input = Integer.parseInt(sc.nextLine()); - System.out.println(); - } catch(NumberFormatException nfe){ - System.out.println("\nLeider haben Sie keine Zahl eingegeben. Bitte geben Sie eine Zahl ein:"); - } - - try { - switch(input) { - case 1: pVP(); break; - case 2: pVE(); break; - case 9: break gameloop; - } - } catch(Exception e) { - System.err.println(e.getLocalizedMessage()); - } + } catch (NumberFormatException nfe) { + System.out.println("\nLeider haben Sie keine Zahl eingegeben. Bitte geben Sie eine Zahl ein:"); } + + try { + switch (input) { + case 1: + pVP(); + break; + case 2: + pVE(); + break; + case 9: + break gameloop; + } + } catch (Exception e) { + System.err.println(e.getLocalizedMessage()); + } + } } - + // case 2: private void regelnAnzeigen() { - + } // case 8: private void creditsAnzeigen() { - + } - - + // gameloop // case 1: private void pVP() { boolean werBeginnt = werBeginnt(); - - + } - + // case 2: private void pVE() { System.out.println("Wollen Sie als Spieler die Füchse oder Hennen spielen?"); @@ -121,9 +127,9 @@ public class UI { spielsystem.spielerBestimmen(spielerwahl); spielsystem.computerBestimmen(spielerwahl); - + boolean werBeginnt = werBeginnt(); - + System.out.println("Auf welchen Schwierigkeitsgrad wollen Sie spielen?"); System.out.println("0 -> easy"); System.out.println("1 -> medium"); @@ -132,26 +138,31 @@ public class UI { System.out.print("> "); int kiLevel = Integer.parseInt(sc.nextLine()); System.out.println(); - + spielsystem.start(werBeginnt, kiLevel); start(werBeginnt, kiLevel); } - - + public void start(boolean werBeginnt, int kiLevel) { boolean zugFuchs = false; boolean zugHenne = false; boolean spielfigurComputer = spielsystem.getSpielfigurComputer(); boolean spielfigurSpieler = spielsystem.getSpielfigurSpieler(); boolean erfolgreicherZug; + boolean erfolgreich; + boolean freiesFeld; + boolean erfolgreichGepusht; + String zugPushHenne = ""; + int counter = 0; + String zug; - + if (werBeginnt == true) { zugHenne = true; } else { zugFuchs = true; } - + System.out.println("Das Spiel wurde gestartet!"); if (kiLevel == 0) { System.out.println("Sie haben den Schwierigkeitsgrad -easy- ausgewählt"); @@ -160,13 +171,13 @@ public class UI { } else if (kiLevel == 2) { System.out.println("Sie haben den Schwierigkeitsgrad -hard- ausgewählt"); } - + System.out.println(); System.out.println("Das Startspielbrett sieht wie folgt aus:"); System.out.println(); spielsystem.printBoard(); System.out.println(); - + do { // Zug Henne KI if (zugHenne == true && spielfigurComputer == true) { @@ -177,11 +188,11 @@ public class UI { zug = spielsystem.yourMove(); System.out.println(); System.out.println("Die KI hat folgenden Zug gemacht: " + zug); - + zugHenne = false; zugFuchs = true; } - + // Zug Henne Spieler else if (zugHenne == true && spielfigurSpieler == true) { spielsystem.setAktivenSpieler(true); @@ -194,45 +205,94 @@ public class UI { zug = sc.nextLine(); System.out.println(); erfolgreicherZug = spielsystem.isValidMove(zug); - + if (erfolgreicherZug == false) { System.out.println("Ihre Zugeingabe: -" + zug + "- war leider kein valider Zug!"); System.out.println("Sie sind weiterhin am Zug"); System.out.println(); } } while (erfolgreicherZug == false); - + spielsystem.myMove(zug); zugHenne = false; zugFuchs = true; } - + // Zug Fuchs Spieler else if (zugFuchs == true && spielfigurSpieler == false) { spielsystem.setAktivenSpieler(true); System.out.println("Die Füchse sind am Zug:"); - System.out.println("Spieler Sie sind dran"); - do { - System.out.println("Bitte geben Sie Ihren Zug ein:"); - System.out.println(); - System.out.print("> "); - zug = sc.nextLine(); - System.out.println(); - erfolgreicherZug = spielsystem.isValidMove(zug); - - if (erfolgreicherZug == false) { - System.out.println("Ihre Zugeingabe: -" + zug + "- war leider kein valider Zug!"); - System.out.println("Sie sind weiterhin am Zug"); + 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()); + switch (eingabe) { + case 1: + System.out.println("Spieler Sie sind dran"); + do { + System.out.println("Bitte geben Sie Ihren Zug ein:"); System.out.println(); - } - } while (erfolgreicherZug == false); - - spielsystem.myMove(zug); + System.out.print("> "); + zug = sc.nextLine(); + System.out.println(); + erfolgreicherZug = spielsystem.isValidMove(zug); - zugHenne = true; - zugFuchs = false; + if (erfolgreicherZug == false) { + System.out.println("Ihre Zugeingabe: -" + zug + "- war leider kein valider Zug!"); + System.out.println("Sie sind weiterhin am Zug"); + System.out.println(); + } + } while (erfolgreicherZug == false); + + spielsystem.myMove(zug); + + zugHenne = true; + zugFuchs = false; + break; + case 2: + if (counter == 1) { + System.out.println("Sonderzug wurde schon verbraucht. "); + break; + } + do { + System.out.println("Sonderzug gewählt. "); + System.out.println("Bitte wählen Sie die Henne, die Sie bewegen möchten: "); + String henneGewählt = sc.nextLine(); + erfolgreich = spielsystem.findeHenne(henneGewählt); + + if (erfolgreich == false) { + System.out.println("Ihre Zugeingabe -" + henneGewählt + "- war leider kein valider Zug!"); + System.out.println("Sie sind weiterhin am Zug"); + System.out.println(); + + } else if (erfolgreich == true) { + zugPushHenne += henneGewählt; + + } + + } while (erfolgreich == false); + do { + System.out.println("Henne wurde erfolgreich gewählt. Wo soll sie hingeschoben werden? "); + String pushHenne = sc.nextLine(); + freiesFeld = spielsystem.findeFreiesFeld(pushHenne); + + if (freiesFeld == false) { + System.out.println("Ihre Zugeingabe -" + pushHenne + "- war leider kein valider Zug!"); + System.out.println("Sie sind weiterhin am Zug"); + System.out.println(); + + } else if (freiesFeld == true) { + zugPushHenne += " " + pushHenne; + counter++; + } + + } while (freiesFeld == false); + erfolgreichGepusht = spielsystem.pushHenne(zugPushHenne); + System.out.println("Henne wurde erfolgreich geschoben. "); + break; + + } } - + // Zug Fuchs KI else if (zugFuchs == true && spielfigurComputer == false) { spielsystem.setAktivenSpieler(false); @@ -246,15 +306,14 @@ public class UI { zugHenne = true; zugFuchs = false; } - - //nach jedem Zug das Spielbrett ausgeben + + // nach jedem Zug das Spielbrett ausgeben spielsystem.printBoard(); - + } while (spielsystem.isRunning() == true); - + } - - + private boolean werBeginnt() { System.out.println("Sollen die Füchse oder Hennen beginnen?"); System.out.println("1 -> Füchse beginnen"); @@ -263,14 +322,14 @@ public class UI { System.out.print("> "); int werBeginnt = Integer.parseInt(sc.nextLine()); System.out.println(); - + if (werBeginnt == 1) { - //Füchse starten + // Füchse starten return false; } else { - //Hennen starten + // Hennen starten return true; } } - + }