Hallo, ich bin gerade dabei TicTacToe zu programmieren und bekomme aus irgendeinem Grund bei der Abfrage ob das Spiel schon vorbei ist und ich komme nicht drauf wieso.
Hier ist erstmal die Abfrage ob jemand gewonnen hat oder das Spielfeld voll ist:
availableGameMoves ist eineListe, die schaut auf wie vielen Feldern man noch setzen kann:
So, das alles steht in meiner Klasse "Board".
Wenn ich jetzt in der Mainmethode das Spiel beginnen will, kommt die Exception an dieser Stelle:
Also sprich ab dem Anfang der while-Schleife ist Schluss und der Compiler wirft mir die Exception. Leider habe ich wie gesagt keine Ahnung wieso, das brd-Objekt ist oben als
initialisiert und dürfte daher eigentlich nicht Null sein.
Vielleicht kann mir ja jemand helfen, danke schonmal!
Hier ist erstmal die Abfrage ob jemand gewonnen hat oder das Spielfeld voll ist:
Java:
/**
* Prüfen, ob einer der Gewinnfälle oder ein Unentschieden eintritt
* @return
* has1Won = Spieler gewinnt
* has2Won = Computer gewinnt
* availableGameMoves.isEmpty() = Unentschieden (keine freien Felder mehr)
*/
boolean isGameOver(){
return has1Won() || has2Won() || availableGameMoves.isEmpty();
}
/**
* Diese Methode prüft in Diagonalen sowie in Spalten/Zeilen auf den Gewinn der Ziffer "1"
*/
static boolean has1Won() {
//Diagonal
if ((gameBoard[0][0] == gameBoard[1][1] && gameBoard[0][0] == gameBoard[2][2] && gameBoard[0][0] == 1)
|| (gameBoard[0][2] == gameBoard[1][1] && gameBoard[0][2] == gameBoard[2][0] && gameBoard[0][2] == 1)) {
return true;
}
//Spalten/Zeilen
for (int i = 0; i < 3; ++i) {
if (((gameBoard[i][0] == gameBoard[i][1] && gameBoard[i][0] == gameBoard[i][2] && gameBoard[i][0] == 1)
|| (gameBoard[0][i] == gameBoard[1][i] && gameBoard[0][i] == gameBoard[2][i] && gameBoard[0][i] == 1))) {
// System.out.println("X Row or Column win");
return true;
}
}
return false;
}
/**
* Diese Methode prüft in Diagonalen sowie in Spalten/Zeilen auf den Gewinn der Ziffer "2"
*/
static boolean has2Won() {
//Diagonal
if ((gameBoard[0][0] == gameBoard[1][1] && gameBoard[0][0] == gameBoard[2][2] && gameBoard[0][0] == 2)
|| (gameBoard[0][2] == gameBoard[1][1] && gameBoard[0][2] == gameBoard[2][0] && gameBoard[0][2] == 2)) {
return true;
}
//Spalten/Zeilen
for (int i = 0; i < 3; ++i) {
if (((gameBoard[i][0] == gameBoard[i][1] && gameBoard[i][0] == gameBoard[i][2] && gameBoard[i][0] == 2)
|| (gameBoard[0][i] == gameBoard[1][i] && gameBoard[0][i] == gameBoard[2][i] && gameBoard[0][i] == 2))) {
return true;
}
}
return false;
}
availableGameMoves ist eineListe, die schaut auf wie vielen Feldern man noch setzen kann:
Java:
public static List<GameMove> getAvailableGameMoves() {
availableGameMoves = new ArrayList<GameMove>();
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (gameBoard[i][j] == 0)
availableGameMoves.add(new GameMove(i, j));
}
}
return availableGameMoves;
}
So, das alles steht in meiner Klasse "Board".
Wenn ich jetzt in der Mainmethode das Spiel beginnen will, kommt die Exception an dieser Stelle:
Java:
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("Willkommen zum TicTacToe-Game!");
System.out.println("-----------------------------------------");
Board brd = new Board();
Random rndm = new Random();
brd.showplayboard();
System.out.println();
System.out.println("Wer soll beginnen? (M)ensch oder (C)omputer?");
char gamestart = scan.next().charAt(0);
if (gamestart == 'C'){
GameMove gameMove = new GameMove(rndm.nextInt(3), rndm.nextInt(3)); //Erster Zug des PCs ist Random
System.out.println("Der Computer benutzt die Ziffer 2, der Spieler die 1\n");
Board.makeGameMove(gameMove, 2);
brd.showplayboard();
}
while(!brd.isGameOver()){
Also sprich ab dem Anfang der while-Schleife ist Schluss und der Compiler wirft mir die Exception. Leider habe ich wie gesagt keine Ahnung wieso, das brd-Objekt ist oben als
Java:
Board brd = new Board();
Vielleicht kann mir ja jemand helfen, danke schonmal!