BotHardHenne und BotHardFuchs angefangen. miniMax Konstrukt steht und Spiel mit einigen zum Bot passenden Methoden ergänzt
parent
f91dced51d
commit
b13e58d0d3
|
@ -1,5 +1,8 @@
|
|||
package domain;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class BotHardFuchs extends Bot {
|
||||
|
||||
public BotHardFuchs() {
|
||||
|
@ -7,7 +10,23 @@ public class BotHardFuchs extends Bot {
|
|||
}
|
||||
|
||||
@Override
|
||||
public String zugBestimmen(Spiel spiel, Spielfigur spielfigur) {
|
||||
public String zugBestimmen(Spiel spiel, Spielfigur fuchs) {
|
||||
char[][] spielbrettArray = spiel.getSpielbrettArray();
|
||||
char[][] kopieSpielbrett = Arrays.stream(spielbrettArray).map(char[]::clone).toArray(char[][]::new);
|
||||
|
||||
ArrayList<String> alleZüge = new ArrayList<>();
|
||||
|
||||
alleZüge = spiel.alleZügeFuchs(kopieSpielbrett, spiel);
|
||||
for (String züge : alleZüge) {
|
||||
System.out.println(züge);
|
||||
}
|
||||
|
||||
int bewertung = spiel.miniMax(kopieSpielbrett, null, 1, false, spiel);
|
||||
|
||||
System.out.println();
|
||||
System.out.println("HIER IST ENDE FÜR BOTHARDFUCHS! -----------------------------------------------------------------");
|
||||
System.out.println();
|
||||
|
||||
return "Ich bins der Harte Fuchs Bot";
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
package domain;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class BotHardHenne extends Bot {
|
||||
|
||||
public BotHardHenne() {
|
||||
|
@ -7,7 +10,23 @@ public class BotHardHenne extends Bot {
|
|||
}
|
||||
|
||||
@Override
|
||||
public String zugBestimmen(Spiel spiel, Spielfigur spielfigur) {
|
||||
public String zugBestimmen(Spiel spiel, Spielfigur henne) {
|
||||
char[][] spielbrettArray = spiel.getSpielbrettArray();
|
||||
char[][] kopieSpielbrett = Arrays.stream(spielbrettArray).map(char[]::clone).toArray(char[][]::new);
|
||||
|
||||
ArrayList<String> alleZüge = new ArrayList<>();
|
||||
|
||||
alleZüge = spiel.alleZügeHennen(kopieSpielbrett, spiel);
|
||||
for (String züge : alleZüge) {
|
||||
System.out.println(züge);
|
||||
}
|
||||
|
||||
int bewertung = spiel.miniMax(kopieSpielbrett, null, 1, true, spiel);
|
||||
|
||||
System.out.println();
|
||||
System.out.println("HIER IST ENDE FÜR BOTHARDHENNE! -----------------------------------------------------------------");
|
||||
System.out.println();
|
||||
|
||||
return "Ich bins der Harte Hennen Bot";
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package domain;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Random;
|
||||
|
||||
public class Spiel {
|
||||
private String spielname;
|
||||
|
@ -272,6 +273,160 @@ public class Spiel {
|
|||
return null;
|
||||
}
|
||||
|
||||
public int miniMax(char[][] kopieSpielbrett, String zug, int tiefe, boolean maxPlayer, Spiel spiel) {
|
||||
if(tiefe == 0) {
|
||||
int bewertung = bewerteSpielzug(zug);
|
||||
return bewertung;
|
||||
}
|
||||
|
||||
if(maxPlayer == true) {
|
||||
int maxWert = (-9999);
|
||||
ArrayList<String> potenzielleZüge = getMoves(kopieSpielbrett, maxPlayer, spiel);
|
||||
|
||||
for(int i = 0; i< potenzielleZüge.size(); i++) {
|
||||
zug = potenzielleZüge.get(i);
|
||||
ändereWertImArray(Character.getNumericValue(zug.charAt(0)), Character.getNumericValue(zug.charAt(2)), '\u25A1');
|
||||
ändereWertImArray(Character.getNumericValue(zug.charAt(4)), Character.getNumericValue(zug.charAt(6)), 'X');
|
||||
|
||||
int wert = miniMax(kopieSpielbrett, zug, tiefe-1, false, spiel);
|
||||
if(wert > maxWert) {
|
||||
maxWert = wert;
|
||||
}
|
||||
ändereWertImArray(Character.getNumericValue(zug.charAt(0)), Character.getNumericValue(zug.charAt(2)), 'X');
|
||||
ändereWertImArray(Character.getNumericValue(zug.charAt(4)), Character.getNumericValue(zug.charAt(6)), '\u25A1');
|
||||
}
|
||||
return maxWert;
|
||||
} else {
|
||||
int minWert = 9999;
|
||||
ArrayList<String> potenzielleZüge = getMoves(kopieSpielbrett, maxPlayer, spiel);
|
||||
|
||||
for(int i = 0; i< potenzielleZüge.size(); i++) {
|
||||
zug = potenzielleZüge.get(i);
|
||||
|
||||
// Änderung ist noch nicht wirklich richtig für den Fuchs ---------------------------------------------------------------------
|
||||
ändereWertImArray(zug.charAt(0), zug.charAt(2), '\u25A1');
|
||||
ändereWertImArray(zug.charAt(4), zug.charAt(6), 'O');
|
||||
|
||||
int wert = miniMax(kopieSpielbrett, zug, tiefe-1, true, spiel);
|
||||
if(wert > minWert) {
|
||||
minWert = wert;
|
||||
}
|
||||
// Änderung ist noch nicht wirklich richtig für den Fuchs ---------------------------------------------------------------------
|
||||
ändereWertImArray(zug.charAt(0), zug.charAt(2), 'O');
|
||||
ändereWertImArray(zug.charAt(4), zug.charAt(6), '\u25A1');
|
||||
}
|
||||
return minWert;
|
||||
}
|
||||
}
|
||||
|
||||
public int bewerteSpielzug(String zug) {
|
||||
int bewertung = 0;
|
||||
|
||||
return bewertung;
|
||||
}
|
||||
|
||||
public ArrayList<String> getMoves(char[][] kopieSpielbrett, boolean maxPlayer, Spiel spiel) {
|
||||
if(maxPlayer == true) {
|
||||
return alleZügeHennen(kopieSpielbrett, spiel);
|
||||
} else {
|
||||
return alleZügeFuchs(kopieSpielbrett, spiel);
|
||||
}
|
||||
}
|
||||
|
||||
public ArrayList<String> alleZügeHennen(char[][] kopieSpielbrett, Spiel spiel) {
|
||||
ArrayList<String> alleZüge = new ArrayList<>();
|
||||
ArrayList<String> spielfigurExistiert = new ArrayList<>();
|
||||
Spielfigur henne = new Hennen();
|
||||
String zug;
|
||||
Random rand = new Random();
|
||||
|
||||
spielfigurExistiert = spielfigurExistiert(henne);
|
||||
|
||||
do {
|
||||
int index = rand.nextInt(spielfigurExistiert.size());
|
||||
String random = spielfigurExistiert.get(index);
|
||||
|
||||
int altY = Character.getNumericValue(random.charAt(0));
|
||||
int altX = Character.getNumericValue(random.charAt(2));
|
||||
|
||||
int neuY = altY;
|
||||
for(int x = altX - 1; x < altX + 2; x += 2) {
|
||||
if(x == 0 || x == 10) {
|
||||
if(x == 0) {
|
||||
x += 2;
|
||||
}
|
||||
if(x == 10) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(kopieSpielbrett[altY][x] == '\u25A1') {
|
||||
zug = altY + "," + altX + " " + altY + "," + x;
|
||||
alleZüge.add(zug);
|
||||
}
|
||||
}
|
||||
if(neuY - 1 == -1) {
|
||||
// tue nichts
|
||||
} else {
|
||||
if(kopieSpielbrett[neuY - 1][altX] == '\u25A1') {
|
||||
zug = altY + "," + altX + " " + (neuY - 1) + "," + altX;
|
||||
alleZüge.add(zug);
|
||||
}
|
||||
}
|
||||
spielfigurExistiert.remove(index);
|
||||
} while(spielfigurExistiert.size() > 0);
|
||||
return alleZüge;
|
||||
}
|
||||
|
||||
public ArrayList<String> alleZügeFuchs(char[][] kopieSpielbrett, Spiel spiel) {
|
||||
ArrayList<String> alleZüge = new ArrayList<>();
|
||||
ArrayList<String> spielfigurExistiert = new ArrayList<>();
|
||||
Spielfigur fuchs = new Fuchs();
|
||||
String zug;
|
||||
Random rand = new Random();
|
||||
|
||||
spielfigurExistiert = spielfigurExistiert(fuchs);
|
||||
|
||||
do {
|
||||
int index = rand.nextInt(spielfigurExistiert.size());
|
||||
String random = spielfigurExistiert.get(index);
|
||||
|
||||
int altY = Character.getNumericValue(random.charAt(0));
|
||||
int altX = Character.getNumericValue(random.charAt(2));
|
||||
|
||||
for(int y = altY - 1; y < altY + 2; y++) {
|
||||
if(y == -1 || y == 9) {
|
||||
if(y == -1) {
|
||||
y++;
|
||||
}
|
||||
if(y == 9) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(int x = altX - 1; x < altX + 2; x++) {
|
||||
if(kopieSpielbrett[y][x] == kopieSpielbrett[altY][altX] || x == 0 || x == 10) {
|
||||
if(kopieSpielbrett[y][x] == kopieSpielbrett[altY][altX]) {
|
||||
x++;
|
||||
}
|
||||
if(x == 0) {
|
||||
x++;
|
||||
}
|
||||
if(x == 10) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// hier fehlt dem Bot noch das er Hennen erkennt bze. killen kann ------------------------------------------------------------
|
||||
if(kopieSpielbrett[y][x] == '\u25A1') {
|
||||
zug = altY + "," + altX + " " + y + "," + x;
|
||||
alleZüge.add(zug);
|
||||
}
|
||||
}
|
||||
}
|
||||
spielfigurExistiert.remove(index);
|
||||
} while(spielfigurExistiert.size() > 0);
|
||||
return alleZüge;
|
||||
}
|
||||
|
||||
public int[] wandelUmgekehrtUm(int umwandeln1, int umwandeln2, int umwandeln3, int umwandeln4) {
|
||||
int[] umgewandelt = new int[4];
|
||||
umgewandelt[0] = (umwandeln2 - 1);
|
||||
|
|
Loading…
Reference in New Issue