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;
|
package domain;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class BotHardFuchs extends Bot {
|
public class BotHardFuchs extends Bot {
|
||||||
|
|
||||||
public BotHardFuchs() {
|
public BotHardFuchs() {
|
||||||
|
@ -7,7 +10,23 @@ public class BotHardFuchs extends Bot {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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";
|
return "Ich bins der Harte Fuchs Bot";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
package domain;
|
package domain;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class BotHardHenne extends Bot {
|
public class BotHardHenne extends Bot {
|
||||||
|
|
||||||
public BotHardHenne() {
|
public BotHardHenne() {
|
||||||
|
@ -7,7 +10,23 @@ public class BotHardHenne extends Bot {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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";
|
return "Ich bins der Harte Hennen Bot";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package domain;
|
package domain;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
public class Spiel {
|
public class Spiel {
|
||||||
private String spielname;
|
private String spielname;
|
||||||
|
@ -272,6 +273,160 @@ public class Spiel {
|
||||||
return null;
|
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) {
|
public int[] wandelUmgekehrtUm(int umwandeln1, int umwandeln2, int umwandeln3, int umwandeln4) {
|
||||||
int[] umgewandelt = new int[4];
|
int[] umgewandelt = new int[4];
|
||||||
umgewandelt[0] = (umwandeln2 - 1);
|
umgewandelt[0] = (umwandeln2 - 1);
|
||||||
|
|
Loading…
Reference in New Issue