From 93d0d713045227fc23e2827efbe3d13f966d1cf1 Mon Sep 17 00:00:00 2001 From: cedri Date: Thu, 24 Nov 2022 20:24:10 +0100 Subject: [PATCH] =?UTF-8?q?Viele=20Updates=20und=20Struktur=20reingebracht?= =?UTF-8?q?.=20PVE=20Ansatz=20geschrieben.=20Methodenk=C3=B6pfe=20geschrie?= =?UTF-8?q?ben.=20Hashmap=20wird=20in=20der=20Klasse=20Spiel=20erzeigt=20u?= =?UTF-8?q?nd=20ausgegeben.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/domain/Bot.java | 5 +- src/domain/BotEasyFuchs.java | 16 ++ src/domain/BotEasyHenne.java | 14 ++ src/domain/BotHardFuchs.java | 14 ++ src/domain/BotHardHenne.java | 14 ++ src/domain/BotMediumFuchs.java | 14 ++ src/domain/BotMediumHenne.java | 14 ++ src/domain/Fuchs.java | 9 +- src/domain/Hennen.java | 9 +- src/domain/Spiel.java | 122 ++++++++------- src/domain/Spielfigur.java | 19 +-- src/domain/TestenFürFunktionen.java | 10 -- src/facade/Spielsystem.java | 88 +++++++++-- src/ui/UI.java | 228 ++++++++++++++++++++++------ 14 files changed, 426 insertions(+), 150 deletions(-) create mode 100644 src/domain/BotEasyFuchs.java create mode 100644 src/domain/BotEasyHenne.java create mode 100644 src/domain/BotHardFuchs.java create mode 100644 src/domain/BotHardHenne.java create mode 100644 src/domain/BotMediumFuchs.java create mode 100644 src/domain/BotMediumHenne.java delete mode 100644 src/domain/TestenFürFunktionen.java diff --git a/src/domain/Bot.java b/src/domain/Bot.java index 333c89f..658edbf 100644 --- a/src/domain/Bot.java +++ b/src/domain/Bot.java @@ -2,7 +2,6 @@ package domain; public abstract class Bot { - public void zugBestimmen() { - - } + public abstract String zugBestimmen(); + } diff --git a/src/domain/BotEasyFuchs.java b/src/domain/BotEasyFuchs.java new file mode 100644 index 0000000..28f789d --- /dev/null +++ b/src/domain/BotEasyFuchs.java @@ -0,0 +1,16 @@ +package domain; + +public class BotEasyFuchs extends Bot { + + public BotEasyFuchs() { + + } + + @Override + public String zugBestimmen() { + + return "Ich bins der Einfache Fuchs Bot"; + } + + +} diff --git a/src/domain/BotEasyHenne.java b/src/domain/BotEasyHenne.java new file mode 100644 index 0000000..5cce3c2 --- /dev/null +++ b/src/domain/BotEasyHenne.java @@ -0,0 +1,14 @@ +package domain; + +public class BotEasyHenne extends Bot { + + public BotEasyHenne() { + + } + + @Override + public String zugBestimmen() { + return "Ich bins der Einfache Hennen Bot"; + } + +} diff --git a/src/domain/BotHardFuchs.java b/src/domain/BotHardFuchs.java new file mode 100644 index 0000000..6d7b863 --- /dev/null +++ b/src/domain/BotHardFuchs.java @@ -0,0 +1,14 @@ +package domain; + +public class BotHardFuchs extends Bot { + + public BotHardFuchs() { + + } + + @Override + public String zugBestimmen() { + return "Ich bins der Harte Fuchs Bot"; + } + +} diff --git a/src/domain/BotHardHenne.java b/src/domain/BotHardHenne.java new file mode 100644 index 0000000..666151b --- /dev/null +++ b/src/domain/BotHardHenne.java @@ -0,0 +1,14 @@ +package domain; + +public class BotHardHenne extends Bot { + + public BotHardHenne() { + + } + + @Override + public String zugBestimmen() { + return "Ich bins der Harte Hennen Bot"; + } + +} diff --git a/src/domain/BotMediumFuchs.java b/src/domain/BotMediumFuchs.java new file mode 100644 index 0000000..f9702fb --- /dev/null +++ b/src/domain/BotMediumFuchs.java @@ -0,0 +1,14 @@ +package domain; + +public class BotMediumFuchs extends Bot { + + public BotMediumFuchs() { + + } + + @Override + public String zugBestimmen() { + return "Ich bins der Mittlere Fuchs Bot"; + } + +} diff --git a/src/domain/BotMediumHenne.java b/src/domain/BotMediumHenne.java new file mode 100644 index 0000000..53b0de7 --- /dev/null +++ b/src/domain/BotMediumHenne.java @@ -0,0 +1,14 @@ +package domain; + +public class BotMediumHenne extends Bot { + + public BotMediumHenne() { + + } + + @Override + public String zugBestimmen() { + return "Ich bins der Mittlere Hennen Bot"; + } + +} diff --git a/src/domain/Fuchs.java b/src/domain/Fuchs.java index e82351f..dc0de1d 100644 --- a/src/domain/Fuchs.java +++ b/src/domain/Fuchs.java @@ -2,11 +2,12 @@ package domain; public class Fuchs extends Spielfigur { - public int moveSpielfigur(int feldKey) { - return super.moveSpielfigur(feldKey); + public Fuchs() { + } - public boolean validMove(int startKey, int zielKey) { - return super.validMove(startKey, zielKey); + public boolean isValidMove(String zug) { + System.out.println("Fuchsmethode aufgerufen"); + return false; } } diff --git a/src/domain/Hennen.java b/src/domain/Hennen.java index a85d405..cd46cad 100644 --- a/src/domain/Hennen.java +++ b/src/domain/Hennen.java @@ -2,11 +2,12 @@ package domain; public class Hennen extends Spielfigur { - public int moveSpielfigur(int feldKey) { - return super.moveSpielfigur(feldKey); + public Hennen() { + } - public boolean validMove(int startKey, int zielKey) { - return super.validMove(startKey, zielKey); + public boolean isValidMove(String zug) { + System.out.println("Hennenmethode aufgerufen"); + return false; } } diff --git a/src/domain/Spiel.java b/src/domain/Spiel.java index 51cd3aa..b527d59 100644 --- a/src/domain/Spiel.java +++ b/src/domain/Spiel.java @@ -3,31 +3,42 @@ package domain; import java.util.HashMap; public class Spiel { - private String spielstandName; + private String spielname; private HashMap spielbrett = new HashMap<>(); - public Spiel(String spielstandName) { - this.spielstandName = spielstandName; + public Spiel(String spielname) { + this.spielname = spielname; + this.spielbrett = generiereSpielbrett(); } - - public String getSpielstandName() { - return spielstandName; + + 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++; + } + } + System.out.println(); } //Erstellung Anfangsspielbrett mithilfe von Unicode Zeichen public HashMap generiereSpielbrett() { - // X=Fuchs, O=Henne, \u25A1=ein Kasten + // O=Fuchs, X=Henne, \u25A1=ein Kasten spielbrett.put(0, ' '); - spielbrett.put(1, '1'); - spielbrett.put(2, '2'); - spielbrett.put(3, '3'); - spielbrett.put(4, '4'); - spielbrett.put(5, '5'); - spielbrett.put(6, '6'); - spielbrett.put(7, '7'); - spielbrett.put(8, '8'); - spielbrett.put(9, '9'); - spielbrett.put(10, '1'); + spielbrett.put(1, '0'); + spielbrett.put(2, '1'); + spielbrett.put(3, '2'); + spielbrett.put(4, '3'); + spielbrett.put(5, '4'); + spielbrett.put(6, '5'); + spielbrett.put(7, '6'); + spielbrett.put(8, '7'); + spielbrett.put(9, '8'); + spielbrett.put(10, '0'); spielbrett.put(11, ' '); spielbrett.put(12, ' '); spielbrett.put(13, ' '); @@ -37,17 +48,17 @@ public class Spiel { spielbrett.put(17, ' '); spielbrett.put(18, ' '); spielbrett.put(19, ' '); - spielbrett.put(20, '2'); + spielbrett.put(20, '1'); spielbrett.put(21, ' '); spielbrett.put(22, ' '); spielbrett.put(23, ' '); - spielbrett.put(24, 'X'); + spielbrett.put(24, 'O'); spielbrett.put(25, '\u25A1'); - spielbrett.put(26, 'X'); + spielbrett.put(26, 'O'); spielbrett.put(27, ' '); spielbrett.put(28, ' '); spielbrett.put(29, ' '); - spielbrett.put(30, '3'); + spielbrett.put(30, '2'); spielbrett.put(31, ' '); spielbrett.put(32, ' '); spielbrett.put(33, ' '); @@ -57,7 +68,7 @@ public class Spiel { spielbrett.put(37, ' '); spielbrett.put(38, ' '); spielbrett.put(39, ' '); - spielbrett.put(40, '4'); + spielbrett.put(40, '3'); spielbrett.put(41, '\u25A1'); spielbrett.put(42, '\u25A1'); spielbrett.put(43, '\u25A1'); @@ -67,61 +78,58 @@ public class Spiel { spielbrett.put(47, '\u25A1'); spielbrett.put(48, '\u25A1'); spielbrett.put(49, '\u25A1'); - spielbrett.put(50, '5'); - spielbrett.put(51, 'O'); - spielbrett.put(52, 'O'); - spielbrett.put(53, 'O'); - spielbrett.put(54, 'O'); - spielbrett.put(55, 'O'); - spielbrett.put(56, 'O'); - spielbrett.put(57, 'O'); - spielbrett.put(58, 'O'); - spielbrett.put(59, 'O'); - spielbrett.put(60, '6'); - spielbrett.put(61, 'O'); - spielbrett.put(62, 'O'); - spielbrett.put(63, 'O'); - spielbrett.put(64, 'O'); - spielbrett.put(65, 'O'); - spielbrett.put(66, 'O'); - spielbrett.put(67, 'O'); - spielbrett.put(68, 'O'); - spielbrett.put(69, 'O'); - spielbrett.put(70, '7'); + spielbrett.put(50, '4'); + spielbrett.put(51, 'X'); + spielbrett.put(52, 'X'); + spielbrett.put(53, 'X'); + spielbrett.put(54, 'X'); + spielbrett.put(55, 'X'); + spielbrett.put(56, 'X'); + spielbrett.put(57, 'X'); + spielbrett.put(58, 'X'); + spielbrett.put(59, 'X'); + spielbrett.put(60, '5'); + spielbrett.put(61, 'X'); + spielbrett.put(62, 'X'); + spielbrett.put(63, 'X'); + spielbrett.put(64, 'X'); + spielbrett.put(65, 'X'); + spielbrett.put(66, 'X'); + spielbrett.put(67, 'X'); + spielbrett.put(68, 'X'); + spielbrett.put(69, 'X'); + spielbrett.put(70, '6'); spielbrett.put(71, ' '); spielbrett.put(72, ' '); spielbrett.put(73, ' '); - spielbrett.put(74, 'O'); - spielbrett.put(75, 'O'); - spielbrett.put(76, 'O'); + spielbrett.put(74, 'X'); + spielbrett.put(75, 'X'); + spielbrett.put(76, 'X'); spielbrett.put(77, ' '); spielbrett.put(78, ' '); spielbrett.put(79, ' '); - spielbrett.put(80, '8'); + spielbrett.put(80, '7'); spielbrett.put(81, ' '); spielbrett.put(82, ' '); spielbrett.put(83, ' '); - spielbrett.put(84, 'O'); - spielbrett.put(85, 'O'); - spielbrett.put(86, 'O'); + spielbrett.put(84, 'X'); + spielbrett.put(85, 'X'); + spielbrett.put(86, 'X'); spielbrett.put(87, ' '); spielbrett.put(88, ' '); spielbrett.put(89, ' '); - spielbrett.put(90, '9'); + spielbrett.put(90, '8'); spielbrett.put(91, ' '); spielbrett.put(92, ' '); spielbrett.put(93, ' '); - spielbrett.put(94, 'O'); - spielbrett.put(95, 'O'); - spielbrett.put(96, 'O'); + spielbrett.put(94, 'X'); + spielbrett.put(95, 'X'); + spielbrett.put(96, 'X'); spielbrett.put(97, ' '); spielbrett.put(98, ' '); spielbrett.put(99, ' '); - //System.out.println(spielbrett.values()); - return spielbrett; - } } diff --git a/src/domain/Spielfigur.java b/src/domain/Spielfigur.java index bd8f2e3..896d1ac 100644 --- a/src/domain/Spielfigur.java +++ b/src/domain/Spielfigur.java @@ -1,20 +1,11 @@ package domain; public abstract class Spielfigur { - - public int selectSpielfigur(int feldKey) { - return feldKey; + + public abstract boolean isValidMove(String zug); + + public void moveSpielfigur(String zug) { + } - public int moveSpielfigur(int feldKey) { - return feldKey; - } - - public boolean findeSpielfigur(int feldKey) { - return false; - } - - public boolean validMove(int startKey, int zielKey) { - return false; - } } diff --git a/src/domain/TestenFürFunktionen.java b/src/domain/TestenFürFunktionen.java deleted file mode 100644 index 9fec3ec..0000000 --- a/src/domain/TestenFürFunktionen.java +++ /dev/null @@ -1,10 +0,0 @@ -package domain; - -public class TestenFürFunktionen { - - public static void main(String[] args) { - // TODO Auto-generated method stub - - } - -} diff --git a/src/facade/Spielsystem.java b/src/facade/Spielsystem.java index bf44f6b..19905e8 100644 --- a/src/facade/Spielsystem.java +++ b/src/facade/Spielsystem.java @@ -1,33 +1,95 @@ package facade; -import java.util.ArrayList; -import java.util.HashMap; - +import domain.Bot; +import domain.BotEasyFuchs; +import domain.BotEasyHenne; +import domain.BotHardFuchs; +import domain.BotHardHenne; +import domain.BotMediumFuchs; +import domain.BotMediumHenne; +import domain.Fuchs; +import domain.Hennen; import domain.Spiel; +import domain.Spielfigur; public class Spielsystem { private String spielname; - private Spiel spiel; - //wird benötigt wenn mehrere Spiele angelegt werden sollen - //private ArrayList alleSpiele = new ArrayList<>(); + private Spielfigur henne; + private Spielfigur fuchs; + private Bot ki; public Spielsystem(String spielname) throws Exception { - this.spielname = spielname; + this.spiel = new Spiel(spielname); + this.henne = new Hennen(); + this.fuchs = new Fuchs(); } public String getSpielname() { return spielname; } - public HashMap spielAnlegen(String spielstandName) { - this.spiel = new Spiel(spielstandName); - HashMap spielbrett = spiel.generiereSpielbrett(); + public Spielfigur getHenne() { + return henne; + } + + public Spielfigur getFuchs() { + return fuchs; + } + + public Bot getBot() { + return ki; + } + + public void printBoard() { + spiel.printBoard(); + } + + public boolean isWon() { + return false; + } + + public boolean isRunning() { + return true; + } + + public boolean whoWon() { + // true = Spieler1 | false = Spieler2 + return true; + } - //wird benötigt wenn mehrere Spiele angelegt werden sollen - //alleSpiele.add(spiel); +// public boolean isValidMove(String zug) { +// return this.isValidMove(zug); +// } + + public String yourMove() { + return "H"; + } + + public void myMove(String zug) { - return spielbrett; + } + +// public void moveSpielfigur(String zug) { +// +// } + + public void kiGenerieren(int spielerwahl, int kiLevel) { + if (kiLevel == 0 && spielerwahl == 1) { + ki = new BotEasyHenne(); + } else if ( kiLevel == 1 && spielerwahl == 1) { + ki = new BotMediumHenne(); + } else if (kiLevel == 2 && spielerwahl == 1) { + ki = new BotHardHenne(); + } else if (kiLevel == 0 && spielerwahl == 2) { + ki = new BotEasyFuchs(); + } else if ( kiLevel == 1 && spielerwahl == 2) { + ki = new BotMediumFuchs(); + } else if (kiLevel == 2 && spielerwahl == 2) { + ki = new BotHardFuchs(); + }else { + //Fehleingabe + } } } diff --git a/src/ui/UI.java b/src/ui/UI.java index 1d214c0..62f84f5 100644 --- a/src/ui/UI.java +++ b/src/ui/UI.java @@ -1,9 +1,10 @@ package ui; -import java.util.HashMap; import java.util.Scanner; + import facade.Spielsystem; + public class UI { private Spielsystem spielsystem; Scanner sc = new Scanner(System.in); @@ -22,16 +23,14 @@ public class UI { System.out.println("--------"); System.out.println("Hauptmenü:"); System.out.println("1 -> Neues Spiel starten"); - System.out.println("2 -> Alten Spielstand laden"); - System.out.println("3 -> Regeln anzeigen"); - System.out.println("7 -> Highscore anzeigen"); + 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; + int input = 0; try { input = Integer.parseInt(sc.nextLine()); System.out.println(); @@ -41,10 +40,10 @@ public class UI { try { switch(input) { - case 1: spielStarten(); gameloop(); break; - case 2: spielstandLaden(); break; - case 3: regelnAnzeigen(); break; - case 7: highscoreAnzeigen(); break; + case 1: gameloop(); break; + //case 2: spielstandLaden(); break; + case 2: regelnAnzeigen(); break; + //case 7: highscoreAnzeigen(); break; case 8: creditsAnzeigen(); break; case 9: break mainloop; } @@ -55,15 +54,17 @@ public class UI { System.out.println("Auf Wiedersehen!"); } + + // hauptmenü + // case 1: private void gameloop() { gameloop: while(true) { System.out.println(); System.out.println("--------"); System.out.println("Spielmenü:"); - System.out.println("1 -> Einspieler auswählen"); - System.out.println("2 -> Mehrspieler auswählen"); - System.out.println("3 -> KI Schwierigkeit auswählen"); + System.out.println("1 -> Player vs. Player"); + System.out.println("2 -> Player vs. KI"); System.out.println("9 -> Zurück"); System.out.println(); @@ -79,9 +80,8 @@ public class UI { try { switch(input) { - case 1: break; - case 2: break; - case 3: break; + case 1: pVP(); break; + case 2: pVE(); break; case 9: break gameloop; } } catch(Exception e) { @@ -90,43 +90,181 @@ public class UI { } } - // hauptmenü + // case 2: + private void regelnAnzeigen() { + + } + + // case 8: + private void creditsAnzeigen() { + + } + + + // gameloop // case 1: - private void spielStarten() { - //Evtl. wichtig für später, um Spielstände anzulegen und zu persistieren - System.out.println("Bitte vergeben Sie Ihren Spielstand einen Namen: \n"); + private void pVP() { + boolean werBeginnt = werBeginnt(); + + + } + + // case 2: + private void pVE() { + System.out.println("Wollen Sie als Spieler die Füchse oder Hennen spielen?"); + System.out.println("1 -> Füchse spielen"); + System.out.println("2 -> Hennen spielen"); + System.out.println(); System.out.print("> "); - String spielstandName = sc.nextLine(); + int spielerwahl = Integer.parseInt(sc.nextLine()); System.out.println(); - HashMap spielbrett = spielsystem.spielAnlegen(spielstandName); + boolean werBeginnt = werBeginnt(); - //Spielbrett ausgeben - 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("Auf welchen Schwierigkeitsgrad wollen Sie spielen?"); + System.out.println("0 -> easy"); + System.out.println("1 -> medium"); + System.out.println("2 -> hard"); + System.out.println(); + System.out.print("> "); + int kiLevel = Integer.parseInt(sc.nextLine()); + System.out.println(); + + start(werBeginnt, spielerwahl, kiLevel); + } + + + private void start(boolean werBeginnt, int spielerwahl, int kiLevel) { + boolean zugFuchs = false; + boolean zugHenne = false; + boolean erfolgreicherZug; + String zug; + + if (werBeginnt == true) { + zugHenne = true; + } else { + 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"); + } else if (kiLevel == 1) { + System.out.println("Sie haben den Schwierigkeitsgrad -medium- ausgewählt"); + } 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(); + + do { + // Zug Henne KI + if (zugHenne == true && spielerwahl == 1) { + 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); + + spielsystem.getHenne().moveSpielfigur(zug); + zugHenne = false; + zugFuchs = true; } + + // Zug Henne Spieler + else if (zugHenne == true && spielerwahl == 2) { + System.out.println("Die Hennen 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.getHenne().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.getHenne().moveSpielfigur(zug); + zugHenne = false; + zugFuchs = true; + } + + // Zug Fuchs Spieler + else if (zugFuchs == true && spielerwahl == 1) { + 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.getFuchs().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.getFuchs().moveSpielfigur(zug); + zugHenne = true; + zugFuchs = false; + } + + // Zug Fuchs KI + else if (zugFuchs == true && spielerwahl == 2) { + 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); + zugHenne = true; + zugFuchs = false; + } + + //nach jedem Zug das Spielbrett ausgeben + spielsystem.printBoard(); + + } while (spielsystem.isWon() == false); + + } + + + private boolean werBeginnt() { + System.out.println("Sollen die Füchse oder Hennen beginnen?"); + System.out.println("1 -> Füchse beginnen"); + System.out.println("2 -> Hennen beginnen"); + System.out.println(); + System.out.print("> "); + int werBeginnt = Integer.parseInt(sc.nextLine()); + System.out.println(); + + if (werBeginnt == 1) { + //Füchse starten + return false; + } else { + //Hennen starten + return true; } } - public void spielstandLaden() { - - } - - public void regelnAnzeigen() { - - } - - public void highscoreAnzeigen() { - - } - - public void creditsAnzeigen() { - - } } -- 2.43.0