Hallo zusammen,
um den Min-Max-Algorithmus zu verstehen habe ich ein TicTacToe kreiert und dabei auch meine Swingkenntnisse vertieft.
Da ich aber noch sehr am Anfang stehe, bitte ich um ein paar Kommentare sowohl beim Handling wie auch beim Code...falls sich da jemand reinwühlt. Ich habe versucht das MVC-Pattern einzuhalten. Allerdings habe ich z.B. die View als Observer vom Model eingetragen. Ansonsten geben 2 Listener die Kommandos an den Controller und dieser leitet die nötigen Operationen.
Es gibt 3 KI-Gegner: sehr leicht, leicht und unbesiegbar.
Ein Random-Spieler, ein Spieler der 1-2 Züge vorrausdenkt und der Min-Max-Spieler.
Zusätzlich kann man den "Humanplayer" auswählen und Namen und Zeichen vergeben. Zeichen die doppelt vergeben werden, sollten durch mein Programm ausgetauscht werden. Dies klappte bei meinen Tests, ich habe aber noch keine Anzeige für diesen Fall.
So siehts aus:
Im Anhang sind auch die Source-Files, kann sein dass da noch eine Testklasse mit rumschwirrt.
Was vll. für jemanden noch interessant ist, ist die Methode initPlayer() in der Klasse ButtonListener:
Schonmal danke für die Kommentare falls es welche gibt
Gute Nacht
um den Min-Max-Algorithmus zu verstehen habe ich ein TicTacToe kreiert und dabei auch meine Swingkenntnisse vertieft.
Da ich aber noch sehr am Anfang stehe, bitte ich um ein paar Kommentare sowohl beim Handling wie auch beim Code...falls sich da jemand reinwühlt. Ich habe versucht das MVC-Pattern einzuhalten. Allerdings habe ich z.B. die View als Observer vom Model eingetragen. Ansonsten geben 2 Listener die Kommandos an den Controller und dieser leitet die nötigen Operationen.
Es gibt 3 KI-Gegner: sehr leicht, leicht und unbesiegbar.
Ein Random-Spieler, ein Spieler der 1-2 Züge vorrausdenkt und der Min-Max-Spieler.
Zusätzlich kann man den "Humanplayer" auswählen und Namen und Zeichen vergeben. Zeichen die doppelt vergeben werden, sollten durch mein Programm ausgetauscht werden. Dies klappte bei meinen Tests, ich habe aber noch keine Anzeige für diesen Fall.
So siehts aus:
Im Anhang sind auch die Source-Files, kann sein dass da noch eine Testklasse mit rumschwirrt.
Was vll. für jemanden noch interessant ist, ist die Methode initPlayer() in der Klasse ButtonListener:
Java:
public Player initPlayer(String playerKlasse, String playerName,
String playerChar) {
Player player = null;
if (playerKlasse.equals("HumanPlayer")) {
/*
* public HumanPlayer(PlayTicTacToe controller, String
* playerCharPar, String playerNamePar, TicTacToe view) {
*/
try {
Class<HumanPlayer> oneTmp = HumanPlayer.class;
@SuppressWarnings("rawtypes")
Class[] params = new Class[2];
params[0] = String.class;
params[1] = String.class;
Constructor<HumanPlayer> oConstr = oneTmp
.getConstructor(params);
Object[] aoParams = new Object[2];
aoParams[0] = playerChar;
;
aoParams[1] = playerName;
player = oConstr.newInstance(aoParams);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
} else {
try {
Class<?> oneTmp = Class.forName("computerPlayer."
+ playerKlasse);
@SuppressWarnings("rawtypes")
Class[] params = new Class[2];
params[0] = TicTacToeFramework.class;
params[1] = Player.class;
Constructor<?> oConstr = oneTmp.getConstructor(params);
Object[] aoParams = new Object[2];
aoParams[0] = model;
;
aoParams[1] = null;
player = (Player) oConstr.newInstance(aoParams);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return player;
}
Schonmal danke für die Kommentare falls es welche gibt
Gute Nacht