77 lines
1.5 KiB
Java
77 lines
1.5 KiB
Java
package main;
|
|
|
|
public class TicTacToe {
|
|
|
|
Board board;
|
|
Player player1, player2;
|
|
Player turn;
|
|
|
|
private boolean running;
|
|
|
|
public static final int MODE_NORMAL = 0;
|
|
public static final int MODE_AI = 1;
|
|
|
|
public TicTacToe(int mode) {
|
|
|
|
board = new Board();
|
|
|
|
switch (mode) {
|
|
case MODE_NORMAL:
|
|
player1 = new Player(Options.player1Symbol);
|
|
player2 = new Player(Options.player2Symbol);
|
|
break;
|
|
case MODE_AI:
|
|
player1 = new Player(Options.player1Symbol);
|
|
player2 = new PlayerAI(Options.player2Symbol);
|
|
break;
|
|
}
|
|
turn = player1;
|
|
|
|
running = true;
|
|
while (running) {
|
|
loop();
|
|
}
|
|
}
|
|
|
|
public void loop() {
|
|
board.draw();
|
|
turn.printTurnMessage();
|
|
if (turn instanceof PlayerAI) {
|
|
if (!((PlayerAI) turn).calculateNextMove(board.getBoard())) {
|
|
System.exit(0);
|
|
}
|
|
}
|
|
int field = turn.makeTurn();
|
|
while (!board.isFieldFree(field)) {
|
|
board.draw();
|
|
System.out.println("Das Feld ist schon belegt!");
|
|
field = turn.makeTurn();
|
|
}
|
|
board.place(field, turn.getSymbol());
|
|
char winner = board.testWinner();
|
|
if (winner > 1) {
|
|
Cmd.cls();
|
|
board.draw();
|
|
System.out.println(winner + " hat gewonnen!");
|
|
} else if (winner == 1) {
|
|
Cmd.cls();
|
|
board.draw();
|
|
System.out.println("Unetschieden!");
|
|
}
|
|
if (winner != 0) {
|
|
System.out.println("Noch eine Runde? [y/n]");
|
|
if (Input.yesNoDialog()) {
|
|
board.clear();
|
|
} else {
|
|
running = false;
|
|
}
|
|
}
|
|
if (turn.equals(player1)) {
|
|
turn = player2;
|
|
} else {
|
|
turn = player1;
|
|
}
|
|
Cmd.cls();
|
|
}
|
|
}
|