Viele Updates und Struktur reingebracht. PVE Ansatz geschrieben. #1

Merged
2210880 merged 1 commits from main into robin 2022-11-25 09:18:06 +01:00
14 changed files with 426 additions and 150 deletions

View File

@ -2,7 +2,6 @@ package domain;
public abstract class Bot {
public void zugBestimmen() {
}
public abstract String zugBestimmen();
}

View File

@ -0,0 +1,16 @@
package domain;
public class BotEasyFuchs extends Bot {
public BotEasyFuchs() {
}
@Override
public String zugBestimmen() {
return "Ich bins der Einfache Fuchs Bot";
}
}

View File

@ -0,0 +1,14 @@
package domain;
public class BotEasyHenne extends Bot {
public BotEasyHenne() {
}
@Override
public String zugBestimmen() {
return "Ich bins der Einfache Hennen Bot";
}
}

View File

@ -0,0 +1,14 @@
package domain;
public class BotHardFuchs extends Bot {
public BotHardFuchs() {
}
@Override
public String zugBestimmen() {
return "Ich bins der Harte Fuchs Bot";
}
}

View File

@ -0,0 +1,14 @@
package domain;
public class BotHardHenne extends Bot {
public BotHardHenne() {
}
@Override
public String zugBestimmen() {
return "Ich bins der Harte Hennen Bot";
}
}

View File

@ -0,0 +1,14 @@
package domain;
public class BotMediumFuchs extends Bot {
public BotMediumFuchs() {
}
@Override
public String zugBestimmen() {
return "Ich bins der Mittlere Fuchs Bot";
}
}

View File

@ -0,0 +1,14 @@
package domain;
public class BotMediumHenne extends Bot {
public BotMediumHenne() {
}
@Override
public String zugBestimmen() {
return "Ich bins der Mittlere Hennen Bot";
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -3,31 +3,42 @@ package domain;
import java.util.HashMap;
public class Spiel {
private String spielstandName;
private String spielname;
private HashMap<Integer, Character> 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<Integer, Character> 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;
}
}

View File

@ -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;
}
}

View File

@ -1,10 +0,0 @@
package domain;
public class TestenFürFunktionen {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}

View File

@ -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<Spiel> 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<Integer, Character> spielAnlegen(String spielstandName) {
this.spiel = new Spiel(spielstandName);
HashMap<Integer, Character> 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
}
}
}

View File

@ -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<Integer, Character> 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() {
}
}