Viele Updates und Struktur reingebracht. PVE Ansatz geschrieben.

Methodenköpfe geschrieben. Hashmap wird in der Klasse Spiel erzeigt und
ausgegeben.
pull/1/head
cedri 2022-11-24 20:24:10 +01:00
parent 9525392792
commit 93d0d71304
14 changed files with 426 additions and 150 deletions

View File

@ -2,7 +2,6 @@ package domain;
public abstract class Bot { 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 class Fuchs extends Spielfigur {
public int moveSpielfigur(int feldKey) { public Fuchs() {
return super.moveSpielfigur(feldKey);
} }
public boolean validMove(int startKey, int zielKey) { public boolean isValidMove(String zug) {
return super.validMove(startKey, zielKey); System.out.println("Fuchsmethode aufgerufen");
return false;
} }
} }

View File

@ -2,11 +2,12 @@ package domain;
public class Hennen extends Spielfigur { public class Hennen extends Spielfigur {
public int moveSpielfigur(int feldKey) { public Hennen() {
return super.moveSpielfigur(feldKey);
} }
public boolean validMove(int startKey, int zielKey) { public boolean isValidMove(String zug) {
return super.validMove(startKey, zielKey); System.out.println("Hennenmethode aufgerufen");
return false;
} }
} }

View File

@ -3,31 +3,42 @@ package domain;
import java.util.HashMap; import java.util.HashMap;
public class Spiel { public class Spiel {
private String spielstandName; private String spielname;
private HashMap<Integer, Character> spielbrett = new HashMap<>(); private HashMap<Integer, Character> spielbrett = new HashMap<>();
public Spiel(String spielstandName) { public Spiel(String spielname) {
this.spielstandName = spielstandName; this.spielname = spielname;
this.spielbrett = generiereSpielbrett();
} }
public String getSpielstandName() { public void printBoard() {
return spielstandName; 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 //Erstellung Anfangsspielbrett mithilfe von Unicode Zeichen
public HashMap<Integer, Character> generiereSpielbrett() { public HashMap<Integer, Character> generiereSpielbrett() {
// X=Fuchs, O=Henne, \u25A1=ein Kasten // O=Fuchs, X=Henne, \u25A1=ein Kasten
spielbrett.put(0, ' '); spielbrett.put(0, ' ');
spielbrett.put(1, '1'); spielbrett.put(1, '0');
spielbrett.put(2, '2'); spielbrett.put(2, '1');
spielbrett.put(3, '3'); spielbrett.put(3, '2');
spielbrett.put(4, '4'); spielbrett.put(4, '3');
spielbrett.put(5, '5'); spielbrett.put(5, '4');
spielbrett.put(6, '6'); spielbrett.put(6, '5');
spielbrett.put(7, '7'); spielbrett.put(7, '6');
spielbrett.put(8, '8'); spielbrett.put(8, '7');
spielbrett.put(9, '9'); spielbrett.put(9, '8');
spielbrett.put(10, '1'); spielbrett.put(10, '0');
spielbrett.put(11, ' '); spielbrett.put(11, ' ');
spielbrett.put(12, ' '); spielbrett.put(12, ' ');
spielbrett.put(13, ' '); spielbrett.put(13, ' ');
@ -37,17 +48,17 @@ public class Spiel {
spielbrett.put(17, ' '); spielbrett.put(17, ' ');
spielbrett.put(18, ' '); spielbrett.put(18, ' ');
spielbrett.put(19, ' '); spielbrett.put(19, ' ');
spielbrett.put(20, '2'); spielbrett.put(20, '1');
spielbrett.put(21, ' '); spielbrett.put(21, ' ');
spielbrett.put(22, ' '); spielbrett.put(22, ' ');
spielbrett.put(23, ' '); spielbrett.put(23, ' ');
spielbrett.put(24, 'X'); spielbrett.put(24, 'O');
spielbrett.put(25, '\u25A1'); spielbrett.put(25, '\u25A1');
spielbrett.put(26, 'X'); spielbrett.put(26, 'O');
spielbrett.put(27, ' '); spielbrett.put(27, ' ');
spielbrett.put(28, ' '); spielbrett.put(28, ' ');
spielbrett.put(29, ' '); spielbrett.put(29, ' ');
spielbrett.put(30, '3'); spielbrett.put(30, '2');
spielbrett.put(31, ' '); spielbrett.put(31, ' ');
spielbrett.put(32, ' '); spielbrett.put(32, ' ');
spielbrett.put(33, ' '); spielbrett.put(33, ' ');
@ -57,7 +68,7 @@ public class Spiel {
spielbrett.put(37, ' '); spielbrett.put(37, ' ');
spielbrett.put(38, ' '); spielbrett.put(38, ' ');
spielbrett.put(39, ' '); spielbrett.put(39, ' ');
spielbrett.put(40, '4'); spielbrett.put(40, '3');
spielbrett.put(41, '\u25A1'); spielbrett.put(41, '\u25A1');
spielbrett.put(42, '\u25A1'); spielbrett.put(42, '\u25A1');
spielbrett.put(43, '\u25A1'); spielbrett.put(43, '\u25A1');
@ -67,61 +78,58 @@ public class Spiel {
spielbrett.put(47, '\u25A1'); spielbrett.put(47, '\u25A1');
spielbrett.put(48, '\u25A1'); spielbrett.put(48, '\u25A1');
spielbrett.put(49, '\u25A1'); spielbrett.put(49, '\u25A1');
spielbrett.put(50, '5'); spielbrett.put(50, '4');
spielbrett.put(51, 'O'); spielbrett.put(51, 'X');
spielbrett.put(52, 'O'); spielbrett.put(52, 'X');
spielbrett.put(53, 'O'); spielbrett.put(53, 'X');
spielbrett.put(54, 'O'); spielbrett.put(54, 'X');
spielbrett.put(55, 'O'); spielbrett.put(55, 'X');
spielbrett.put(56, 'O'); spielbrett.put(56, 'X');
spielbrett.put(57, 'O'); spielbrett.put(57, 'X');
spielbrett.put(58, 'O'); spielbrett.put(58, 'X');
spielbrett.put(59, 'O'); spielbrett.put(59, 'X');
spielbrett.put(60, '6'); spielbrett.put(60, '5');
spielbrett.put(61, 'O'); spielbrett.put(61, 'X');
spielbrett.put(62, 'O'); spielbrett.put(62, 'X');
spielbrett.put(63, 'O'); spielbrett.put(63, 'X');
spielbrett.put(64, 'O'); spielbrett.put(64, 'X');
spielbrett.put(65, 'O'); spielbrett.put(65, 'X');
spielbrett.put(66, 'O'); spielbrett.put(66, 'X');
spielbrett.put(67, 'O'); spielbrett.put(67, 'X');
spielbrett.put(68, 'O'); spielbrett.put(68, 'X');
spielbrett.put(69, 'O'); spielbrett.put(69, 'X');
spielbrett.put(70, '7'); spielbrett.put(70, '6');
spielbrett.put(71, ' '); spielbrett.put(71, ' ');
spielbrett.put(72, ' '); spielbrett.put(72, ' ');
spielbrett.put(73, ' '); spielbrett.put(73, ' ');
spielbrett.put(74, 'O'); spielbrett.put(74, 'X');
spielbrett.put(75, 'O'); spielbrett.put(75, 'X');
spielbrett.put(76, 'O'); spielbrett.put(76, 'X');
spielbrett.put(77, ' '); spielbrett.put(77, ' ');
spielbrett.put(78, ' '); spielbrett.put(78, ' ');
spielbrett.put(79, ' '); spielbrett.put(79, ' ');
spielbrett.put(80, '8'); spielbrett.put(80, '7');
spielbrett.put(81, ' '); spielbrett.put(81, ' ');
spielbrett.put(82, ' '); spielbrett.put(82, ' ');
spielbrett.put(83, ' '); spielbrett.put(83, ' ');
spielbrett.put(84, 'O'); spielbrett.put(84, 'X');
spielbrett.put(85, 'O'); spielbrett.put(85, 'X');
spielbrett.put(86, 'O'); spielbrett.put(86, 'X');
spielbrett.put(87, ' '); spielbrett.put(87, ' ');
spielbrett.put(88, ' '); spielbrett.put(88, ' ');
spielbrett.put(89, ' '); spielbrett.put(89, ' ');
spielbrett.put(90, '9'); spielbrett.put(90, '8');
spielbrett.put(91, ' '); spielbrett.put(91, ' ');
spielbrett.put(92, ' '); spielbrett.put(92, ' ');
spielbrett.put(93, ' '); spielbrett.put(93, ' ');
spielbrett.put(94, 'O'); spielbrett.put(94, 'X');
spielbrett.put(95, 'O'); spielbrett.put(95, 'X');
spielbrett.put(96, 'O'); spielbrett.put(96, 'X');
spielbrett.put(97, ' '); spielbrett.put(97, ' ');
spielbrett.put(98, ' '); spielbrett.put(98, ' ');
spielbrett.put(99, ' '); spielbrett.put(99, ' ');
//System.out.println(spielbrett.values());
return spielbrett; return spielbrett;
} }
} }

View File

@ -2,19 +2,10 @@ package domain;
public abstract class Spielfigur { public abstract class Spielfigur {
public int selectSpielfigur(int feldKey) { public abstract boolean isValidMove(String zug);
return feldKey;
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; package facade;
import java.util.ArrayList; import domain.Bot;
import java.util.HashMap; 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.Spiel;
import domain.Spielfigur;
public class Spielsystem { public class Spielsystem {
private String spielname; private String spielname;
private Spiel spiel; private Spiel spiel;
//wird benötigt wenn mehrere Spiele angelegt werden sollen private Spielfigur henne;
//private ArrayList<Spiel> alleSpiele = new ArrayList<>(); private Spielfigur fuchs;
private Bot ki;
public Spielsystem(String spielname) throws Exception { 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() { public String getSpielname() {
return spielname; return spielname;
} }
public HashMap<Integer, Character> spielAnlegen(String spielstandName) { public Spielfigur getHenne() {
this.spiel = new Spiel(spielstandName); return henne;
HashMap<Integer, Character> spielbrett = spiel.generiereSpielbrett(); }
//wird benötigt wenn mehrere Spiele angelegt werden sollen public Spielfigur getFuchs() {
//alleSpiele.add(spiel); return fuchs;
}
return spielbrett; 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;
}
// public boolean isValidMove(String zug) {
// return this.isValidMove(zug);
// }
public String yourMove() {
return "H";
}
public void myMove(String zug) {
}
// 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; package ui;
import java.util.HashMap;
import java.util.Scanner; import java.util.Scanner;
import facade.Spielsystem; import facade.Spielsystem;
public class UI { public class UI {
private Spielsystem spielsystem; private Spielsystem spielsystem;
Scanner sc = new Scanner(System.in); Scanner sc = new Scanner(System.in);
@ -22,16 +23,14 @@ public class UI {
System.out.println("--------"); System.out.println("--------");
System.out.println("Hauptmenü:"); System.out.println("Hauptmenü:");
System.out.println("1 -> Neues Spiel starten"); System.out.println("1 -> Neues Spiel starten");
System.out.println("2 -> Alten Spielstand laden"); System.out.println("2 -> Regeln anzeigen");
System.out.println("3 -> Regeln anzeigen");
System.out.println("7 -> Highscore anzeigen");
System.out.println("8 -> Credits anzeigen"); System.out.println("8 -> Credits anzeigen");
System.out.println("9 -> Beenden"); System.out.println("9 -> Beenden");
System.out.println(); System.out.println();
System.out.print("> "); System.out.print("> ");
int input = 0;
int input = 0;
try { try {
input = Integer.parseInt(sc.nextLine()); input = Integer.parseInt(sc.nextLine());
System.out.println(); System.out.println();
@ -41,10 +40,10 @@ public class UI {
try { try {
switch(input) { switch(input) {
case 1: spielStarten(); gameloop(); break; case 1: gameloop(); break;
case 2: spielstandLaden(); break; //case 2: spielstandLaden(); break;
case 3: regelnAnzeigen(); break; case 2: regelnAnzeigen(); break;
case 7: highscoreAnzeigen(); break; //case 7: highscoreAnzeigen(); break;
case 8: creditsAnzeigen(); break; case 8: creditsAnzeigen(); break;
case 9: break mainloop; case 9: break mainloop;
} }
@ -55,15 +54,17 @@ public class UI {
System.out.println("Auf Wiedersehen!"); System.out.println("Auf Wiedersehen!");
} }
// hauptmenü
// case 1:
private void gameloop() { private void gameloop() {
gameloop: gameloop:
while(true) { while(true) {
System.out.println(); System.out.println();
System.out.println("--------"); System.out.println("--------");
System.out.println("Spielmenü:"); System.out.println("Spielmenü:");
System.out.println("1 -> Einspieler auswählen"); System.out.println("1 -> Player vs. Player");
System.out.println("2 -> Mehrspieler auswählen"); System.out.println("2 -> Player vs. KI");
System.out.println("3 -> KI Schwierigkeit auswählen");
System.out.println("9 -> Zurück"); System.out.println("9 -> Zurück");
System.out.println(); System.out.println();
@ -79,9 +80,8 @@ public class UI {
try { try {
switch(input) { switch(input) {
case 1: break; case 1: pVP(); break;
case 2: break; case 2: pVE(); break;
case 3: break;
case 9: break gameloop; case 9: break gameloop;
} }
} catch(Exception e) { } catch(Exception e) {
@ -90,43 +90,181 @@ public class UI {
} }
} }
// hauptmenü // case 2:
private void regelnAnzeigen() {
}
// case 8:
private void creditsAnzeigen() {
}
// gameloop
// case 1: // case 1:
private void spielStarten() { private void pVP() {
//Evtl. wichtig für später, um Spielstände anzulegen und zu persistieren boolean werBeginnt = werBeginnt();
System.out.println("Bitte vergeben Sie Ihren Spielstand einen Namen: \n");
}
// 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("> "); System.out.print("> ");
String spielstandName = sc.nextLine(); int spielerwahl = Integer.parseInt(sc.nextLine());
System.out.println(); System.out.println();
HashMap<Integer, Character> spielbrett = spielsystem.spielAnlegen(spielstandName); boolean werBeginnt = werBeginnt();
//Spielbrett ausgeben System.out.println("Auf welchen Schwierigkeitsgrad wollen Sie spielen?");
int zähler = 0; System.out.println("0 -> easy");
for (int i = 0; i < spielbrett.size(); i++) { System.out.println("1 -> medium");
if (zähler == 9) { System.out.println("2 -> hard");
System.out.println(spielbrett.get(i)); System.out.println();
zähler = 0; System.out.print("> ");
} else { int kiLevel = Integer.parseInt(sc.nextLine());
System.out.print(spielbrett.get(i) + " "); System.out.println();
zähler++;
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() {
}
} }