S
Sonnenschein
Gast
Hallo liebe Mitglieder,
ich beschäftige mich seit einigen Tagen mit dem Algorithmus für ein "TicTacToe" Programm ( 3 gewinnt). Es spielt"Mensch gegen Computer"..bzw sollte, allerdings kommt bei meiner Eingabe immer der Fehler, dass dieses ein ungültiger Zug ist. Desweiteren würde ich gerne, dass durch Zufall bestimmt wird, ob der Computer oder Mensch den ersten Zug macht. Kann mir jemand helfen ? Vielen Danke im Voraus.
Hier der Code :
ich beschäftige mich seit einigen Tagen mit dem Algorithmus für ein "TicTacToe" Programm ( 3 gewinnt). Es spielt"Mensch gegen Computer"..bzw sollte, allerdings kommt bei meiner Eingabe immer der Fehler, dass dieses ein ungültiger Zug ist. Desweiteren würde ich gerne, dass durch Zufall bestimmt wird, ob der Computer oder Mensch den ersten Zug macht. Kann mir jemand helfen ? Vielen Danke im Voraus.
Hier der Code :
Java:
import java.io.*;
public class TicTacToe {
private int[][] board;
private int spielerAmZug;
private int spielTiefe;
public TicTacToe(){
// Spielfeld von TicTacToe wird ausgeben!
System.out.println("Hier das Spielfeld :");
board = new int[3][3];
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
board[i][j] = 0;}
// das aktuelle Spielfeld von TicTacToe wird angezeigt
public void showBoard(){
System.out.println("\n**a*b*c**");
for (int i=0; i < 3; i++){
System.out.print((i+1)+" ");
for (int j=0; j < 3; j++){
if (board[i][j]==-1) System.out.print("O ");
else if (board[i][j]==1) System.out.print("X ");
else System.out.print(". ");
}
System.out.println(i+1);
}
System.out.println("**a*b*c**\n");
}
// Spiel schon zu Ende, da Spielzüge genug
public boolean finishedGame(){
if ((evaluate(board)!=0) || (countSigns(board)==9))
return true;
else return false;
}
// das Spielergebnis wird ausgegeben
public String resultGame(){
int wert = evaluate(board);
if (wert==0) return "Spiel endet unentschieden.";
else if (wert==1) return "Spieler X gewinnt.";
else return "Spieler O gewinnt.";
}
// Spieler ist am Zug
public boolean meinZug(int x, int y, int move) {
if ((x>=0)&&(x<3)&&(y>=0)&&(y<3)&&(board[x][y]==0)&&(spielerAmZug==move)) {
board[x][y] = move;
spielerAmZug = -spielerAmZug;
spielTiefe++;
return true;
} else
return false;
}
// Computer ist am Zug
public void compZug() {
if (spielerAmZug==-1) {
spielTiefe++;
spielerAmZug = -spielerAmZug;
} }
// zählt die Anzahl der bereits besetzten Felder
private int countSigns(int[][] b){
int count=0;
for (int i=0; i < 3; i++)
for (int j=0; j < 3; j++)
if (b[i][j]!=0)
count++;
return count;
}
// bewertet die aktuelle Stellung, -1 O-gewinnt, 1 X-gewinnt, sonst 0
private int evaluate(int[][] b){
// prüfe zeilen und spalten
int sum=0, sum2=0;
for (int i=0; i < 3; i++) {
sum = b[i][0] + b[i][1] + b[i][2];
sum2 = b[0][i] + b[1][i] + b[2][i];
if ((sum == -3)||(sum2 == -3)) return -1;
else if ((sum == 3)||(sum2 == 3)) return 1;
}
// prüfe die Diagonale links oben nach rechts unten
sum = b[0][0] + b[1][1] + b[2][2];
// prüfe die Diagonale links unten nach rechts oben
sum2 = b[0][2] + b[1][1] + b[2][0];
if ((sum == -3)||(sum2 == -3)) return -1;
else if ((sum == 3)||(sum2 == 3)) return 1;
// ansonsten ist es (noch) unentschieden
return 0;
}
public static void main(String[] args){
TicTacToe ttt = new TicTacToe();
;
// zur Kommunikation
InputStreamReader stdin = new InputStreamReader(System.in);
BufferedReader console = new BufferedReader(stdin);
int x, y;
while (true) {
ttt.showBoard();
System.out.println("Ihr Zug, zuerst x-Koordinate, dann y-Koordinate eingeben : ");
try {
x = Integer.parseInt(console.readLine());
y = Integer.parseInt(console.readLine());
} catch(Exception e){
System.out.println("Eingabefehler!Bitte versuchen Sie es noch einmal.");
continue;
}
// Zug außerhalb der Spielfeldkoordinaten
if (!ttt.meinZug(y-1, x-1, 1)) {
System.out.println("Ungültiger Zug, bitte versuchen Sie es noch einmal.");
continue;
}
if (ttt.finishedGame()) {
System.out.print("Das Spiel ist beendet! ");
System.out.println(ttt.resultGame());
ttt.showBoard();
break;
}
System.out.println("Der Computer hat gespielt: ");
ttt.compZug();
if (ttt.finishedGame()) {
System.out.print("Das Spiel ist beendet! ");
System.out.println(ttt.resultGame());
ttt.showBoard();
break;
}
}
}
}