Überprüfung in TicTacToe

arhzz

Bekanntes Mitglied
Hallo! Ich möchte in meinem Code noch ein bisschen verbessern.Nämlich woll ich noch sicher machen dass kein Feld zwei mal verwendet werden kann.Also zum Beispiel das feld 1,1 wurde von Spieler X bereits genommen,und Spieler O (oder Spieler X egal) versucht das Feld 1,1 zu initialisern.In dem Fall möchte ich den Spieler sagen dass das Feld bereits genommen ist.Wie könnte ich so etwas implementieren? Hier ist mein 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("Input must be a valid number");
        In.readLine();
      } else if (number < 0 || number > 2) {
        Out.println("The number is not in the specified range: 1-3");
      } else {
        isValid = true;
      }
    } while (!isValid);

    return number;
  }
 

}
 

mihe7

Top Contributor
Java:
if (isOccupied(row, col)) {
    Out.println(String.format("Field at (%d, %d) is occupied.", row, col));
}

mit
Java:
static boolean isOccupied(int row, int col) {
    return board[row][col] != '_';
}
 

arhzz

Bekanntes Mitglied
Okay noch etwas, die message kommt raus und dass ist gut,aber wenn ich den Feld 1,1 mit X initialisert habe, und ich versuche ihn mit O zu initialisieren, trotz der nachricht wird das feld mit O initialisiert.Wie vermeide ich dass? Mein 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();
            if(isTaken(row,col)) {
                Out.println("That cell is taken");
            }
        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("Input must be a valid number");
        In.readLine();
      } else if (number < 0 || number > 2) {
        Out.println("The number is not in the specified range: 1-3");
      } else {
        isValid = true;
      }
    } while (!isValid);

    return number;
  }

public static boolean isTaken(int row, int col) {
    return board[row][col] != '_';
}

}
 
K

kneitzel

Gast
Du darfst dann danach natürlich nicht normal weiter machen. Statt dessen in einer Schleife nach neuen Eingaben fragen, bis eine gültige Eingabe gemacht wurde ....
 

arhzz

Bekanntes Mitglied
Du darfst dann danach natürlich nicht normal weiter machen. Statt dessen in einer Schleife nach neuen Eingaben fragen, bis eine gültige Eingabe gemacht wurde ....
Ja dass habe ich auch gedacht,ich habe es probiert aber jetzt nach der ersten eingabe passiert nix mehr.Das ist 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();
        do {
            if(isTaken(row,col)) {
                Out.println("That cell is taken,please enter another cell");
                row = readNumber();
                col = readNumber();
            }
        }while(!isTaken(row,col));
        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("Input must be a valid number");
        In.readLine();
      } else if (number < 0 || number > 2) {
        Out.println("The number is not in the specified range: 1-3");
      } else {
        isValid = true;
      }
    } while (!isValid);

    return number;
  }

public static boolean isTaken(int row, int col) {
    return board[row][col] != '_';
}

}


EDIT: Oh, ein kleiner Fehler bei der Bedingung wo die do while schleife abbrechen soll, es soll while(isTaken(row,cel)) sein, ohne die Negation.Sollte funktionieren.Danke!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Überprüfung für unentschieden in TicTacToe Java Basics - Anfänger-Themen 10
B Überprüfung dass Zahl nur aus 0,1 besteht Java Basics - Anfänger-Themen 2
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
S Überprüfung rechtwinkliges Dreieck Java Basics - Anfänger-Themen 4
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
V Personalnummer Überprüfung Java Basics - Anfänger-Themen 2
T Überprüfung einer Aufgabe zu verketteten Listen Java Basics - Anfänger-Themen 5
O Überprüfung auf Existenz einer Methode Java Basics - Anfänger-Themen 6
P Fallunterscheidung mit Überprüfung (enum) Java Basics - Anfänger-Themen 11
A null-Überprüfung Java Basics - Anfänger-Themen 24
S VierGewinnt Überprüfung Java Basics - Anfänger-Themen 7
J While-Überprüfung wird nicht wahr Java Basics - Anfänger-Themen 2
C Datentypen Methode zur Überprüfung, ob ein Rechenergbnis Int ist Java Basics - Anfänger-Themen 4
C Mit if Überprüfung von drei Werten durchführen Java Basics - Anfänger-Themen 6
B Problem bei Überprüfung des Inhalts eines Arrays Java Basics - Anfänger-Themen 25
S Überprüfung Benutzereingabe Java Basics - Anfänger-Themen 5
J Überprüfung, ob Array aufsteigend sortiert Java Basics - Anfänger-Themen 6
U Frage zur Überprüfung von einer Zahl Java Basics - Anfänger-Themen 9
C Überprüfung eines Arrays auf einen speziellen Wert Java Basics - Anfänger-Themen 5
D String-Überprüfung Java Basics - Anfänger-Themen 4
Q Überprüfung ob JTextField einen Text enthält Java Basics - Anfänger-Themen 2
B Überprüfung ob Methode von geerbter Klasse aufgerufen wird Java Basics - Anfänger-Themen 2
C Überprüfung ob Eingabe Text/ASCII Java Basics - Anfänger-Themen 24
J Überprüfung ersten Zeichens Java Basics - Anfänger-Themen 7
D Überprüfung: Double oder Integer Java Basics - Anfänger-Themen 4
N Überprüfung der ZufallsZahl? Java Basics - Anfänger-Themen 2
R Eingabe eines Chars mit Überprüfung Java Basics - Anfänger-Themen 3
O Überprüfung von Eingaben auf Sinnhaftigkeit Java Basics - Anfänger-Themen 7
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
enesss tictactoe spiel Java Basics - Anfänger-Themen 5
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
TicTacToe Java Basics - Anfänger-Themen 6
C TicTacToe Java Basics - Anfänger-Themen 2
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
A TicTacToe Java Basics - Anfänger-Themen 8
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
J TicTacToe Java Basics - Anfänger-Themen 2
A TicTacToe funktioniert bis auf "schiefer" Sieg Java Basics - Anfänger-Themen 6
shiroX Input/Output TicTacToe-Savegame Java Basics - Anfänger-Themen 1
shiroX Methoden Mögliche Spielstände bei TicTacToe Java Basics - Anfänger-Themen 14
M Array und Objektorientierung? - TicTacToe Spiel Java Basics - Anfänger-Themen 43
P TicTacToe Problem mit Win Methode Java Basics - Anfänger-Themen 4
Z TicTacToe mit Array Java Basics - Anfänger-Themen 6
T TicTacToe Spielfeld Java Basics - Anfänger-Themen 7
B TicTacToe Java Basics - Anfänger-Themen 2
S TicTacToe Java Basics - Anfänger-Themen 4
I TicTacToe blöde KI Java Basics - Anfänger-Themen 2
I Fehler bei TicTacToe Java Basics - Anfänger-Themen 108
G TicTacToe KI Java Basics - Anfänger-Themen 15
C Problem TicTacToe Java Basics - Anfänger-Themen 6
P 3D TicTacToe - Unentschieden Java Basics - Anfänger-Themen 5
G Tictactoe Java Basics - Anfänger-Themen 9
B TicTacToe Programmieren Java Basics - Anfänger-Themen 2
M Einfaches TicTacToe Programm Java Basics - Anfänger-Themen 19
H TicTacToe Fehler beim Compilieren Java Basics - Anfänger-Themen 7
cizzo TicTacToe Java Basics - Anfänger-Themen 6
W TicTacToe - Porblem mit dem Code.. Java Basics - Anfänger-Themen 5
H Hilfe bei TicTacToe mit jEdit Java Basics - Anfänger-Themen 7
0 TicTacToe, Problem mit den Checkbox-Aktionen Java Basics - Anfänger-Themen 6
N brauche hilfe zu tictactoe Java Basics - Anfänger-Themen 2
kulturfenster Problem bei TicTacToe Java Basics - Anfänger-Themen 11
P Ein einfaches Spiel: TicTacToe. Fehler und Vorschläge Java Basics - Anfänger-Themen 3
H TicTacToe: Zeit zwischen Zügen lassen Java Basics - Anfänger-Themen 9
M TicTacToe Java Basics - Anfänger-Themen 7
H TicTacToe-geeignete Klassenhierarchie Java Basics - Anfänger-Themen 3
G Hilfe bei TicTacToe Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben