Java Tic Tac Toe win条件

Java Tic Tac Toe win条件,java,tic-tac-toe,Java,Tic Tac Toe,我目前正在做一项任务,那就是制作一个井字游戏。我已经到了一个地步,玩家可以把他们的标记放在棋盘上,画出它,然后在棋盘上切换。然而,我的检查,如果一个胜利的条件存在,似乎只有当一个球员把他的分数在左上角(第一)领域评估为真 我一直在努力让它正确,但到目前为止没有运气,我不想只是复制答案,但知道我的编码哪里有缺陷。调试器没有给我太多的信息。我怀疑这与playerTurn()的设置方式有关。我错过了什么?任何帮助都将不胜感激 这是我的密码: import java.util.Scanner; pub

我目前正在做一项任务,那就是制作一个井字游戏。我已经到了一个地步,玩家可以把他们的标记放在棋盘上,画出它,然后在棋盘上切换。然而,我的检查,如果一个胜利的条件存在,似乎只有当一个球员把他的分数在左上角(第一)领域评估为真

我一直在努力让它正确,但到目前为止没有运气,我不想只是复制答案,但知道我的编码哪里有缺陷。调试器没有给我太多的信息。我怀疑这与playerTurn()的设置方式有关。我错过了什么?任何帮助都将不胜感激

这是我的密码:

import java.util.Scanner;

public class tictactoe {

private static char[][] board;
private char currentPlayer = 'X';

public static void main(String[] args) {
    board = new char [3][3];
    tictactoe game = new tictactoe();

    game.welcomeAndInstruct();
    game.boardInit();
    game.playerTurn();

}

public void playerTurn() {
    do {
        Scanner input = new Scanner(System.in);
        System.out.print("Player " + currentPlayer + "'s turn: ");
        int move = input.nextInt();
        if (move == 1) {
            placeMark(0, 0);
            drawBoard();
        } else if (move == 2) {
            placeMark(0, 1);
            drawBoard();
        } else if (move == 3) {
            placeMark(0, 2);
            drawBoard();
        } else if (move == 4) {
            placeMark(1, 0);
            drawBoard();
        } else if (move == 5) {
            placeMark(1, 1);
            drawBoard();
        } else if (move == 6) {
            placeMark(1, 2);
            drawBoard();
        } else if (move == 7) {
            placeMark(2, 0);
            drawBoard();
        } else if (move == 8) {
            placeMark(2, 1);
            drawBoard();
        } else if (move == 9) {
            placeMark(2, 2);
            drawBoard();
        } else {
            System.out.println("Invalid, choose a number between 1-9"); 
            continue; 
        }

    if (checkForWin()) {
        System.out.println("Player " + currentPlayer + " has won!");
        break;
    }

    if (isBoardFull()) {
        System.out.println("It's a tie!");
        break;
    }
    changePlayer();
} while (true);

}

//Empties the board by replacing all X/O with -
public void boardInit() {
    for (int r = 0; r < 3; r++) {
        for (int c = 0; c < 3; c++) {
            board[r][c] = '-';
        }
    }
}

//Draws the board in it's current state
public void drawBoard() {
    System.out.println("+---+---+---+");
    for (int r = 0; r < 3; r++) {
        System.out.print("| ");
        for (int c = 0; c < 3; c++) {
            System.out.print(board[r][c] + " | ");              
        }
        System.out.println();
        System.out.println("+---+---+---+");
    }
    System.out.println("\n-------------------------------------\n");

}

//Place's the current players mark in the indicated position
public void placeMark(int row, int col) {
    if ((row >= 0) && (row < 3)) {
        if ((col >= 0) && (col < 3)) {
            if (board[row][col] == '-') {
                board[row][col] = currentPlayer;    
            } 
        }
    }
}



//switches players
public char changePlayer() {
        if (currentPlayer == 'X') {
            currentPlayer = 'O';
        } else
            currentPlayer = 'X';
    return currentPlayer;
}


//checks whether the board is full or not
public boolean isBoardFull() {
    for (int r = 0; r < 3; r++) {
        for (int c = 0; c < 3; c++) {
            if (board[r][c] == '-') {
            return false;
            }
        }
    }
    return true;
}

//checks whether a win-condition exists or not
public boolean checkForWin() {
    //loops through rows checking if win-condition exists
    for (int r = 0; r < 3; r++) {
        if (board[r][0] == board[r][1] && board[r][1] == board[r][2] && board[r][0] != '-')
            return true;
        }
    //loops through columns checking if win-condition exists
    for (int c = 0; c < 3; c++) {
        if (board[0][c] == board[1][c] && board[1][c] == board[2][c] && board[0][c] != '-' ) 
            return true;
        }
    //checks diagonals for win-condition
    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != '-')
        return true;

    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][0] != '-')
        return true;

    return false;
}

// prints the instructions at the start of the game
public void welcomeAndInstruct() {
    System.out.println("Welcome to Tic Tac Toe, a 2 player game for console.");
    System.out.println("Two players take turns in marking the squares on a 3 x 3 grid.");
    System.out.println("The player who succeeds in placing three of their marks in a horizontal, vertical or diagonal row wins the game.");
    System.out.println("To select a square on the grid by entering it's corresponding number when prompted, as shown below:");
    System.out.println();

    board[0][0] = '1';
    board[0][1] = '2';
    board[0][2] = '3';
    board[1][0] = '4';
    board[1][1] = '5';
    board[1][2] = '6';
    board[2][0] = '7';
    board[2][1] = '8';
    board[2][2] = '9';

    drawBoard();

    }
}
import java.util.Scanner;
公共类Tictatcoe{
专用静态字符[][]板;
private char currentPlayer='X';
公共静态void main(字符串[]args){
board=新字符[3][3];
Tictatcoe游戏=新的Tictatcoe();
game.welcomeAndInstruct();
game.boardInit();
game.playerTurn();
}
公共无效播放机turn(){
做{
扫描仪输入=新扫描仪(System.in);
系统输出打印(“玩家”+当前玩家+”的回合:);
int move=input.nextInt();
如果(移动==1){
placeMark(0,0);
绞车();
}else if(move==2){
placeMark(0,1);
绞车();
}else if(move==3){
placeMark(0,2);
绞车();
}else if(move==4){
placeMark(1,0);
绞车();
}else if(move==5){
地点标记(1,1);
绞车();
}else if(move==6){
地点标记(1,2);
绞车();
}else if(move==7){
placeMark(2,0);
绞车();
}else if(move==8){
地点标记(2,1);
绞车();
}else if(move==9){
地标(2,2);
绞车();
}否则{
System.out.println(“无效,请选择1-9之间的数字”);
继续;
}
if(checkForWin()){
System.out.println(“玩家”+currentPlayer+“赢了!”);
打破
}
if(isBoardFull()){
System.out.println(“打成平局了!”);
打破
}
changePlayer();
}虽然(正确);
}
//通过将所有X/O替换为,清空电路板-
公共无效boardInit(){
对于(int r=0;r<3;r++){
对于(int c=0;c<3;c++){
董事会[r][c]='-';
}
}
}
//在当前状态下绘制电路板
公共真空抽油板(){
System.out.println(“+--+--+--+--+”);
对于(int r=0;r<3;r++){
系统输出打印(“|”);
对于(int c=0;c<3;c++){
系统输出打印(板[r][c]+“|”);
}
System.out.println();
System.out.println(“+--+--+--+--+”);
}
System.out.println(“\n--------------------------------------\n”);
}
//将当前玩家标记放置在指定位置
公共空白位置标记(整数行,整数列){
如果((行>=0)和&(行<3)){
如果((列>=0)和(&(列<3)){
如果(线路板[行][列]='-'){
板[行][列]=当前播放器;
} 
}
}
}
//交换球员
public char changePlayer(){
如果(currentPlayer='X'){
currentPlayer='O';
}否则
currentPlayer='X';
返回当前播放器;
}
//检查电路板是否已满
公共布尔值isBoardFull(){
对于(int r=0;r<3;r++){
对于(int c=0;c<3;c++){
如果(电路板[r][c]='-'){
返回false;
}
}
}
返回true;
}
//检查是否存在赢的条件
公共布尔checkForWin(){
//循环行检查是否存在赢的条件
对于(int r=0;r<3;r++){
if(board[r][0]==board[r][1]&&board[r][1]==board[r][2]&&board[r][0]!='-'))
返回true;
}
//通过列循环检查是否存在win条件
对于(int c=0;c<3;c++){
如果(单板[0][c]==单板[1][c]&单板[1][c]==单板[2][c]&单板[0][c]!='-'))
返回true;
}
//检查对角线是否符合win条件
如果(单板[0][0]==单板[1][1]&单板[1][1]==单板[2][2]&单板[0][0]!='-'))
返回true;
如果(单板[0][2]==单板[1][1]&单板[1][1]==单板[2][0]&单板[0][0]!='-'))
返回true;
返回false;
}
//在游戏开始时打印说明
公共无效welcomeAndInstruct(){
System.out.println(“欢迎来到Tic Tac Toe,一款2人游戏机。”);
System.out.println(“两名玩家轮流在3x3网格上标记正方形。”);
System.out.println(“在水平、垂直或对角行中成功放置三个标记的玩家赢得游戏”);
System.out.println(“在提示时通过输入相应的数字在网格上选择一个正方形,如下所示:”);
System.out.println();
板[0][0]=“1”;
板[0][1]=“2”;
板[0][2]=“3”;
董事会[1][0]=“4”;
董事会[1][1]=“5”;
董事会[1][2]=“6”;
董事会[2][0]=“7”;
董事会[2][1]=“8”;
董事会[2][2]=“9”;
绞车();
}
}
位于:

if(单板[0][2]==单板[1][1]&单板[1][1]==单板[2][0]&单板[0][0]!='-')

代替
board[0][0]
检查
board[0][2]

位于:

if(单板[0][2]==单板[1][1]&单板[1][1]==单板[2][0]&单板[0][0]!='-')


代替
board[0][0]
check
board[0][2]
好的,所以问题已经得到了回答-我想留下这个作为评论,但我没有代表

通过简单地玩这个游戏,我自然而然地做的第一件事就是在方框1中放置一个O,游戏说玩家O赢了。很快,你就会发现这个盒子引起了一个问题(注意,不一定是唯一的问题)

<