Hallo,
ich bin gerade dabei/ich habe vor, ein TicTacToe-Programm zu programmieren, das zur Laufzeit eine selbstgeschriebene KI laden kann.
Das Laden selbst ist kein Problem, allerdings bereitet mir die abstrakte Klasse, von der alle KIs erben müssen, einige Kopfschmerzen.
Bisher sieht es so aus:
TicTacToeAI.java
Die Konstanten dienen dazu, um zu erkennen, ob das Feld, auf das die KI setzen will, leer, vom Feind oder schon selbst besetzt wurde.
Eine einfache KI sieht so aus:
Meine Kopfschmerzen bereitet der Konstruktor:
Ich würde das gerne so machen, dass die Werte für die Konstanten nicht immer weitergereicht werden müssen. (Die Konstanten (außer EMPTY) sind unterschiedlich, weil KI Nr. 1
und
und KI Nr. 2 gerade umgedreht hat.)
Hat da jemand eine Idee?
MfG jason
ich bin gerade dabei/ich habe vor, ein TicTacToe-Programm zu programmieren, das zur Laufzeit eine selbstgeschriebene KI laden kann.
Das Laden selbst ist kein Problem, allerdings bereitet mir die abstrakte Klasse, von der alle KIs erben müssen, einige Kopfschmerzen.
Bisher sieht es so aus:
TicTacToeAI.java
Java:
package controller;
import model.TicTacToeField;
public abstract class TicTacToeAI {
protected final int PLAYER;
protected final int ENEMY;
protected final int EMPTY_FIELD;
public TicTacToeAI(int playerField, int enemyField, int emptyField) {
PLAYER = playerField;
EMPTY_FIELD = emptyField;
ENEMY = enemyField;
}
public abstract void compute(TicTacToeField field);
public abstract String getDeveloper();
public abstract String getAIName();
}
Eine einfache KI sieht so aus:
Java:
import controller.TicTacToeAI;
import model.TicTacToeField;
import java.util.Random;
public class MyTicTacToeAI extends TicTacToeAI {
private Random r;
public MyTicTacToeAI(int playerField, int enemyField, int emptyField) {
super(playerField, enemyField, emptyField);
r = new Random();
}
public String getAIName() {
return "MyAI";
}
public String getDeveloperName() {
return "jason";
}
public void compute(TicTacToeField field) {
int randX, randY;
do {
randX = r.nextInt() % 3;
randY = r.nextInt() % 3;
if (randX < 0)
randX *= -1;
if (randY < 0)
randY *= -1;
} while (field.get(randX, randY) != EMPTY_FIELD);
field.set(randX, randY);
}
}
Meine Kopfschmerzen bereitet der Konstruktor:
Ich würde das gerne so machen, dass die Werte für die Konstanten nicht immer weitergereicht werden müssen. (Die Konstanten (außer EMPTY) sind unterschiedlich, weil KI Nr. 1
Code:
PLAYER = 1
Code:
ENEMY = 2
Hat da jemand eine Idee?
MfG jason