TicTacToe

Diskutiere TicTacToe im Java Basics - Anfänger-Themen Bereich.
A

arhzz

Hallo! In diesem Code;

Java:
public class TicTacToe {
    public static int row,col;
    public static char[][] board = new char[3][3];
    public static char turn = 'X';
    
    public static void main(String[] args) {
        for(int i = 0; i < 3; i++) {
            for(int j = 0; j < 3; j++) {
                board[i][j] = '_';
            }
        }
        Play();
    }
    
    public static void printBoard() {
    for(int i = 0; i < 3; i++) {
        Out.println();
        for(int j = 0; j < 3; j++) {
            if(j == 0){
                Out.print("| ");
            }
            Out.print(board[i][j] + " | ");
        }
    }
    Out.println();
    
}


public static void Play() {
    boolean playing = true;
    printBoard();
    Out.println();
    int nOfTurns = 1;
    Out.println("Turn: " + nOfTurns);
    
    while(playing){
        Out.println();
        Out.println("Player:" +" "+ turn);
        Out.print("Enter a row:");
        row = In.readInt() -1;
        Out.print("Enter a coloumn:");
        col = In.readInt() -1;
        board[row][col] = turn;
        nOfTurns++;
        Out.println();
        Out.println("Turn: "+ nOfTurns);
        if(GameOver(row,col)) {
            playing = false;
            Out.println("Player" +" "+turn +" "+"has won");
        }
        printBoard();
        
        if(turn == 'X') {
            turn = 'O';
        }else{
            turn = 'X';
        }
    }
}

public static boolean GameOver(int rowMove,int colMove) {
    if(board[0][colMove] == board[1][colMove] && board[0][colMove] == board[2][colMove]){
        return true;
    }else if(board[rowMove][0] == board[rowMove][1] && board[rowMove][0] == board[rowMove][2]) {
        return true;
    }else if(board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[1][1] != '_') {
        return true;
    }else if(board[0][2] == board[1][1] && board[0][2] == board[2][0] && board[1][1] != '_') {
        return true;
    }else
        return false;
}



}

Möchte ich so einen "schutz" implementieren.Nämlich dürfen keine falsche Nummer im Sinne von rows und coloumns eingegeben.Die Nummer von 1 bis 3 sing gültig und alle anderen nicht.Und ich möchte dass wenn ein falsches Nummer eingeben ist (sagen wir 4) dass der User eine nachricht bekommt die ihn sagt dass diese nummer nicht gültig ist.Das woll ich implementieren aber OHNE exceptions.Ein Paar Ideen habe ich,eine boolean methode die prüft ob die Eingabe gültig ist.Aber ich will (wenn möglich) den Check in dieser Play methode auzuführen.Vielleicht ein Paar Tipps?

Danke!
 
J

JustNobody

Dann schreib dir doch einfach eine Methode, die du statt dem In.readInt nutzen kannst. In der Methode fragst du in einer Schleife nach einer Eingabe. Ist die Eingabe ok, gibst du sie zurück und wenn nicht kommt halt eine Meldung und die Schleife macht von Anfang an weiter ....
 
A

arhzz

Dann schreib dir doch einfach eine Methode, die du statt dem In.readInt nutzen kannst. In der Methode fragst du in einer Schleife nach einer Eingabe. Ist die Eingabe ok, gibst du sie zurück und wenn nicht kommt halt eine Meldung und die Schleife macht von Anfang an weiter ....
Ich probiere es,danke!
 
A

arhzz

Okay also ich habe die methode geschrieben, und es funktioniert außer einem Fall, wenn ich als row oder column den Wert 4 eingebe.Der Compiler gibt ein ArrayIndexOutOfBound exception.Warum passiert dass?

Der Code:


Java:
public class TicTacToe {
    public static int row,col;
    public static char[][] board = new char[3][3];
    public static char turn = 'X';
   
    public static void main(String[] args) {
        for(int i = 0; i < 3; i++) {
            for(int j = 0; j < 3; j++) {
                board[i][j] = '_';
            }
        }
        Play();
    }
   
    public static void printBoard() {
    for(int i = 0; i < 3; i++) {
        Out.println();
        for(int j = 0; j < 3; j++) {
            if(j == 0){
                Out.print("| ");
            }
            Out.print(board[i][j] + " | ");
        }
    }
    Out.println();
   
}


public static void Play() {
    boolean playing = true;
    printBoard();
    Out.println();
    int nOfTurns = 1;
    Out.println("Turn: " + nOfTurns);
   
    while(playing){
        Out.println();
        Out.println("Player:" +" "+ turn);
        Out.print("Enter a row:");
        row = readNumber();
        Out.print("Enter a coloumn:");
        col = readNumber();
        board[row][col] = turn;
        nOfTurns++;
        Out.println();
        Out.println("Turn: "+ nOfTurns);
        if(GameOver(row,col)) {
            playing = false;
            Out.println("Player" +" "+turn +" "+"has won");
        }
        printBoard();
       
        if(turn == 'X') {
            turn = 'O';
        }else{
            turn = 'X';
        }
    }
}

public static boolean GameOver(int rowMove,int colMove) {
    if(board[0][colMove] == board[1][colMove] && board[0][colMove] == board[2][colMove]){
        return true;
    }else if(board[rowMove][0] == board[rowMove][1] && board[rowMove][0] == board[rowMove][2]) {
        return true;
    }else if(board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[1][1] != '_') {
        return true;
    }else if(board[0][2] == board[1][1] && board[0][2] == board[2][0] && board[1][1] != '_') {
        return true;
    }else
        return false;
}


public static int readNumber() {
    boolean isValid = false;
    int number;
    do {  
   
    number = In.readInt() - 1;
       
    if (!In.done()) {
        Out.println("Invalid input");
        In.readLine();
      } else if (number < 0 || number > 3) {
        Out.println("Number must be between 1 and 3");
      } else {
        isValid = true;
      }
    } while (!isValid);

    return number;
  }
}
 
Zuletzt bearbeitet:
J

JustNobody

Du hast ja schon 1 abgezogen, daher sind die zu prüfenden Grenzen 0 und 2 und nicht 0 und 3.
 
Thema: 

TicTacToe

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben