From c4d35b03a5728c57c504dce835605343a7c481fc Mon Sep 17 00:00:00 2001 From: 2211320 <2211320@stud.hs-mannheim.de> Date: Sun, 27 Nov 2022 20:51:25 +0100 Subject: [PATCH] =?UTF-8?q?Hennen=20Bot=20hinzugef=C3=BCgt=20und=20viele?= =?UTF-8?q?=20=C3=84nderungen=20an=20der=20Syntax=20gemacht.=20Array=20ist?= =?UTF-8?q?=20noch=20nicht=20vollst=C3=A4ndig.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/domain/BotEasyHenne.java | 40 ++++++++++++-- src/domain/Fuchs.java | 4 +- src/domain/Hennen.java | 8 ++- src/domain/Spiel.java | 63 +++++++++++++++++---- src/domain/Spielfigur.java | 9 ++- src/facade/Spielsystem.java | 89 +++++++++++++++++++++++++----- src/infrastructure/Persistenz.java | 6 +- src/ui/UI.java | 48 +++++++++------- 8 files changed, 206 insertions(+), 61 deletions(-) diff --git a/src/domain/BotEasyHenne.java b/src/domain/BotEasyHenne.java index 5cce3c2..b58728d 100644 --- a/src/domain/BotEasyHenne.java +++ b/src/domain/BotEasyHenne.java @@ -1,14 +1,44 @@ package domain; +import java.util.ArrayList; +import java.util.Random; + public class BotEasyHenne extends Bot { - public BotEasyHenne() { - - } - + // muss dann vielleicht noch an die neue Schreibweise des Arrays angepasst werden @Override public String zugBestimmen() { - return "Ich bins der Einfache Hennen Bot"; + String zug; + char[][] spielbrettArray = Spiel.getSpielbrettArray(); + ArrayList spielfigurExistiert = new ArrayList<>(); + + for(int i = 0; i < spielbrettArray.length; i++ ) + { + for(int k = 0; k < spielbrettArray[i].length; k++ ){ + if(spielbrettArray[i][k] == 'X') { + spielfigurExistiert.add("(" + i + "," + k + ")"); + } + } + } + + do { + Random rand = new Random(); + String random = spielfigurExistiert.get(rand.nextInt(spielfigurExistiert.size())); + // System.out.println(random); + + int var1 = random.charAt(1) - '0'; + int var2 = random.charAt(3) - '0'; + int var3 = rand.nextInt(((var1 + 1) - (var1 - 1)) + 1) + (var1 - 1); + int var4 = var2; + + if(var3 == var1) { + var4 = var2 - 1; + } + zug = "(" + var1 + "," + var2 + ") (" + var3 + "," + var4 + ")"; + // System.out.println(zug); + } while(Hennen.isValidMove(zug) == false); + + return zug; } } diff --git a/src/domain/Fuchs.java b/src/domain/Fuchs.java index dc0de1d..8a2ac11 100644 --- a/src/domain/Fuchs.java +++ b/src/domain/Fuchs.java @@ -6,7 +6,9 @@ public class Fuchs extends Spielfigur { } - public boolean isValidMove(String zug) { + // public boolean isValidMove(String zug) { + public static boolean isValidMove(String zug) { + System.out.println("Fuchsmethode aufgerufen"); return false; } diff --git a/src/domain/Hennen.java b/src/domain/Hennen.java index cd46cad..f2c8890 100644 --- a/src/domain/Hennen.java +++ b/src/domain/Hennen.java @@ -6,8 +6,12 @@ public class Hennen extends Spielfigur { } - public boolean isValidMove(String zug) { + // generell sehr fehleranfällig, mit Regex Filter Struktur vom String vorgeben + // public boolean isValidMove(String zug) { + public static boolean isValidMove(String zug) { + System.out.println("Hennenmethode aufgerufen"); - return false; + // return false; + return true; } } diff --git a/src/domain/Spiel.java b/src/domain/Spiel.java index b527d59..4cab2fe 100644 --- a/src/domain/Spiel.java +++ b/src/domain/Spiel.java @@ -5,24 +5,65 @@ import java.util.HashMap; public class Spiel { private String spielname; private HashMap spielbrett = new HashMap<>(); + + // private char[][] spielbrettArray = new char[10][10]; + private static char[][] spielbrettArray = new char[10][10]; public Spiel(String spielname) { this.spielname = spielname; - this.spielbrett = generiereSpielbrett(); + // this.spielbrett = generiereSpielbrett(); + // this.spielbrettArray = generiereSpielbrettArray(); + Spiel.spielbrettArray = generiereSpielbrettArray(); + } public void printBoard() { - int zähler = 0; - for (int i = 0; i < spielbrett.size(); i++) { - if (zähler == 9) { - System.out.println(spielbrett.get(i)); - zähler = 0; - } else { - System.out.print(spielbrett.get(i) + " "); - zähler++; - } + // int zähler = 0; + // for (int i = 0; i < spielbrett.size(); i++) { + // if (zähler == 9) { + // System.out.println(spielbrett.get(i)); + // zähler = 0; + // } else { + // System.out.print(spielbrett.get(i) + " "); + // zähler++; + // } + // } + // System.out.println(); + + for ( int zeile = 0; zeile < spielbrettArray.length; zeile++ ) + { + System.out.print("Zeile " + zeile + ": "); + for ( int spalte=0; spalte < spielbrettArray[zeile].length; spalte++ ) + System.out.print( spielbrettArray[zeile][spalte] + " "); + System.out.println(); } - System.out.println(); + } + + public char[][] generiereSpielbrettArray() { + spielbrettArray[0][0] = ' '; + spielbrettArray[0][1] = '0'; + spielbrettArray[0][2] = '1'; + spielbrettArray[0][3] = '2'; + spielbrettArray[0][4] = '3'; + spielbrettArray[0][5] = '4'; + spielbrettArray[0][6] = '5'; + spielbrettArray[0][7] = '6'; + spielbrettArray[0][8] = '7'; + spielbrettArray[0][9] = '8'; + spielbrettArray[1][0] = '0'; + spielbrettArray[1][1] = ' '; + spielbrettArray[1][2] = 'X'; + spielbrettArray[1][3] = 'X'; + spielbrettArray[1][4] = 'X'; + spielbrettArray[1][5] = ' '; + + return spielbrettArray; + } + + // public char[][] getSpielbrettArray() { + public static char[][] getSpielbrettArray() { + + return spielbrettArray; } //Erstellung Anfangsspielbrett mithilfe von Unicode Zeichen diff --git a/src/domain/Spielfigur.java b/src/domain/Spielfigur.java index 896d1ac..bad224e 100644 --- a/src/domain/Spielfigur.java +++ b/src/domain/Spielfigur.java @@ -1,9 +1,12 @@ package domain; public abstract class Spielfigur { - - public abstract boolean isValidMove(String zug); - + + // public abstract boolean isValidMove(String zug); + public static boolean isValidMove(String zug) { + return false; + } + public void moveSpielfigur(String zug) { } diff --git a/src/facade/Spielsystem.java b/src/facade/Spielsystem.java index 19905e8..96c4653 100644 --- a/src/facade/Spielsystem.java +++ b/src/facade/Spielsystem.java @@ -17,17 +17,66 @@ public class Spielsystem { private Spiel spiel; private Spielfigur henne; private Spielfigur fuchs; + private Spielfigur spieler; + private Spielfigur computer; private Bot ki; + private boolean aktiverSpieler; public Spielsystem(String spielname) throws Exception { this.spiel = new Spiel(spielname); this.henne = new Hennen(); this.fuchs = new Fuchs(); } + + public void spielerBestimmen(int spielerwahl) { + if(spielerwahl == 1) { + spieler = new Fuchs(); + } else if(spielerwahl == 2) { + spieler = new Hennen(); + } else { + //Scheiße + } + } + + public void computerBestimmen(int spielerwahl) { + if(spielerwahl == 2) { + computer = new Fuchs(); + } else if(spielerwahl == 1) { + computer = new Hennen(); + } else { + //Scheiße + } + } + + public void setAktivenSpieler(boolean überprüfung) { + if(überprüfung == true) { + // aktiverSpieler ist der Spieler + aktiverSpieler = true; + } else { + // aktiverSpieler ist der Computer + aktiverSpieler = false; + } + } public String getSpielname() { return spielname; } + + public boolean getSpielfigurComputer() { + if(computer instanceof Hennen) { + return true; + } else { + return false; + } + } + + public boolean getSpielfigurSpieler() { + if(spieler instanceof Hennen) { + return true; + } else { + return false; + } + } public Spielfigur getHenne() { return henne; @@ -57,35 +106,45 @@ public class Spielsystem { // true = Spieler1 | false = Spieler2 return true; } - -// public boolean isValidMove(String zug) { -// return this.isValidMove(zug); -// } + + // vorerst wird es ignoriert das static verlangt wird + public boolean isValidMove(String zug) { + if(aktiverSpieler == true) { + return spieler.isValidMove(zug); + } else { + return computer.isValidMove(zug); + } + } public String yourMove() { - return "H"; + return ki.zugBestimmen(); } public void myMove(String zug) { } -// public void moveSpielfigur(String zug) { -// -// } + public void moveSpielfigur(String zug) { + if(aktiverSpieler == true) { + spieler.moveSpielfigur(zug); + } else { + computer.moveSpielfigur(zug); + } + } - public void kiGenerieren(int spielerwahl, int kiLevel) { - if (kiLevel == 0 && spielerwahl == 1) { + public void start(boolean werBeginnt, int kiLevel) { + + if (kiLevel == 0 && computer instanceof Hennen) { ki = new BotEasyHenne(); - } else if ( kiLevel == 1 && spielerwahl == 1) { + } else if ( kiLevel == 1 && computer instanceof Hennen) { ki = new BotMediumHenne(); - } else if (kiLevel == 2 && spielerwahl == 1) { + } else if (kiLevel == 2 && computer instanceof Hennen) { ki = new BotHardHenne(); - } else if (kiLevel == 0 && spielerwahl == 2) { + } else if (kiLevel == 0 && computer instanceof Fuchs) { ki = new BotEasyFuchs(); - } else if ( kiLevel == 1 && spielerwahl == 2) { + } else if ( kiLevel == 1 && computer instanceof Fuchs) { ki = new BotMediumFuchs(); - } else if (kiLevel == 2 && spielerwahl == 2) { + } else if (kiLevel == 2 && computer instanceof Fuchs) { ki = new BotHardFuchs(); }else { //Fehleingabe diff --git a/src/infrastructure/Persistenz.java b/src/infrastructure/Persistenz.java index ee60023..9324134 100644 --- a/src/infrastructure/Persistenz.java +++ b/src/infrastructure/Persistenz.java @@ -2,9 +2,9 @@ package infrastructure; public class Persistenz { - public static void main(String[] args) { - // TODO Auto-generated method stub + // public static void main(String[] args) { + // // TODO Auto-generated method stub - } + // } } diff --git a/src/ui/UI.java b/src/ui/UI.java index 62f84f5..919eb74 100644 --- a/src/ui/UI.java +++ b/src/ui/UI.java @@ -118,6 +118,9 @@ public class UI { System.out.print("> "); int spielerwahl = Integer.parseInt(sc.nextLine()); System.out.println(); + + spielsystem.spielerBestimmen(spielerwahl); + spielsystem.computerBestimmen(spielerwahl); boolean werBeginnt = werBeginnt(); @@ -130,13 +133,16 @@ public class UI { int kiLevel = Integer.parseInt(sc.nextLine()); System.out.println(); - start(werBeginnt, spielerwahl, kiLevel); + spielsystem.start(werBeginnt, kiLevel); + start(werBeginnt, kiLevel); } - private void start(boolean werBeginnt, int spielerwahl, int kiLevel) { + private void start(boolean werBeginnt, int kiLevel) { boolean zugFuchs = false; boolean zugHenne = false; + boolean spielfigurComputer = spielsystem.getSpielfigurComputer(); + boolean spielfigurSpieler = spielsystem.getSpielfigurSpieler(); boolean erfolgreicherZug; String zug; @@ -146,8 +152,6 @@ public class UI { zugFuchs = true; } - spielsystem.kiGenerieren(spielerwahl, kiLevel); - System.out.println("Das Spiel wurde gestartet!"); if (kiLevel == 0) { System.out.println("Sie haben den Schwierigkeitsgrad -easy- ausgewählt"); @@ -164,22 +168,23 @@ public class UI { do { // Zug Henne KI - if (zugHenne == true && spielerwahl == 1) { + if (zugHenne == true && spielfigurComputer == true) { + spielsystem.setAktivenSpieler(false); System.out.println("Die Hennen sind am Zug:"); System.out.println("Die KI macht Ihren Zug"); System.out.println(); - zug = spielsystem.getBot().zugBestimmen(); - //System.out.println(zug); - //Kontrolle des Zuges sollte im Bot gemacht werden - //erfolgreicherZug = spielsystem.getHenne().isValidMove(zug); + zug = spielsystem.yourMove(); + System.out.println(); + System.out.println("Die KI hat folgenden Zug gemacht: " + zug); - spielsystem.getHenne().moveSpielfigur(zug); + spielsystem.moveSpielfigur(zug); zugHenne = false; zugFuchs = true; } // Zug Henne Spieler - else if (zugHenne == true && spielerwahl == 2) { + else if (zugHenne == true && spielfigurSpieler == true) { + spielsystem.setAktivenSpieler(true); System.out.println("Die Hennen sind am Zug:"); System.out.println("Spieler Sie sind dran"); do { @@ -188,7 +193,7 @@ public class UI { System.out.print("> "); zug = sc.nextLine(); System.out.println(); - erfolgreicherZug = spielsystem.getHenne().isValidMove(zug); + erfolgreicherZug = spielsystem.isValidMove(zug); if (erfolgreicherZug == false) { System.out.println("Ihre Zugeingabe: -" + zug + "- war leider kein valider Zug!"); @@ -203,7 +208,8 @@ public class UI { } // Zug Fuchs Spieler - else if (zugFuchs == true && spielerwahl == 1) { + 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 { @@ -212,7 +218,7 @@ public class UI { System.out.print("> "); zug = sc.nextLine(); System.out.println(); - erfolgreicherZug = spielsystem.getFuchs().isValidMove(zug); + erfolgreicherZug = spielsystem.isValidMove(zug); if (erfolgreicherZug == false) { System.out.println("Ihre Zugeingabe: -" + zug + "- war leider kein valider Zug!"); @@ -227,16 +233,16 @@ public class UI { } // Zug Fuchs KI - else if (zugFuchs == true && spielerwahl == 2) { + else if (zugFuchs == true && spielfigurComputer == false) { + spielsystem.setAktivenSpieler(false); System.out.println("Die Füchse sind am Zug:"); System.out.println("Die KI macht Ihren Zug"); System.out.println(); - zug = spielsystem.getBot().zugBestimmen(); - //System.out.println(zug); - //Kontrolle des Zuges sollte im Bot gemacht werden - //erfolgreicherZug = spielsystem.getFuchs().isValidMove(zug); - - spielsystem.getFuchs().moveSpielfigur(zug); + zug = spielsystem.yourMove(); + System.out.println(); + System.out.println("Die KI hat folgenden Zug gemacht: " + zug); + + spielsystem.moveSpielfigur(zug); zugHenne = true; zugFuchs = false; }