Java 我如何确定我的Tic Tac Toe计划中的获胜者

Java 我如何确定我的Tic Tac Toe计划中的获胜者,java,arrays,tic-tac-toe,Java,Arrays,Tic Tac Toe,以前的职位: 我试着让一个Tic Tac Toe程序(人与计算机)可伸缩(电路板大小可以改变)。我之前遇到了一些大问题,但大部分问题都解决了 游戏规则是基本的井字游戏,但有一个不同的规则是,无论棋盘有多大(当=5时),玩家或计算机只需要连续五分就可以获胜 现在,我的程序唯一的问题就是决定谁赢了这场比赛。这场比赛现在只可能以“平局”结束。(而且我还没有实现“=5”) 具体的问题解释是,我需要为类似“computer wins”和/或“player wins”的内容确定赢家和结束屏幕 package

以前的职位:

我试着让一个Tic Tac Toe程序(人与计算机)可伸缩(电路板大小可以改变)。我之前遇到了一些大问题,但大部分问题都解决了

游戏规则是基本的井字游戏,但有一个不同的规则是,无论棋盘有多大(当
=5
时),玩家或计算机只需要连续五分就可以获胜

现在,我的程序唯一的问题就是决定谁赢了这场比赛。这场比赛现在只可能以“平局”结束。(而且我还没有实现“
=5
”)

具体的问题解释是,我需要为类似“
computer wins
”和/或“
player wins
”的内容确定赢家和结束屏幕

package-tictactoe;
导入java.util.Scanner;
导入java.util.Random;
公共类Tictatcoe{
公共静态整数大小;
公共静态字符[][]板;
公共静态积分=0;
公共静态扫描仪扫描=新扫描仪(System.in);
/**
*为游戏创建基础。
* 
*@param args命令行参数。未使用。
*/
公共静态void main(字符串[]args){
System.out.println(“选择电路板尺寸”);
系统输出打印(“[int]:”);
size=Integer.parseInt(scan.nextLine());
board=新字符[大小][大小];
设置板();
int i=1;
while(true){
如果(i%2==1){
显示板();
getMove();
}否则{
computerTurn();
}
//伊斯旺()
if(isDraw()){
System.err.println(“Draw!”);
打破
}
i++;
}
}
/**
*检查是否有抽签。
*
*@return如果这场比赛是平局
*/
公共静态布尔值isDraw(){
对于(int i=0;i=大小)| |(inY>=大小)){
返回false;
}
//检查是否已在该位置进行播放,
//因此,该位置无效。
返回(板[inX][inY]='';
}
}

您已经有了要玩的循环,因此,在每次迭代中,以同样的方式检查游戏
isDraw()
,同时检查一些玩家是否赢了:

while (true) {
    if (i % 2 == 1) {
        displayBoard();
        getMove();
    } else {
        computerTurn();
    }

    // isWon()
    if (isDraw()) {
        System.err.println("Draw!");
        break;
    } else if (playerHasWon()){
        System.err.println("YOU WIN!");
        break;
    } else if (computerHasWon()) {
        System.err.println("Computer WINS!\nYOU LOOSE!!");
        break;
    }

    i++;
}
创建所需的方法后:

public static boolean playerHasWon() {
    boolean hasWon = false;

    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
              // check if 5 in a line
        }
    }

    return hasWon ;
}

public static boolean computerHasWon() {
    boolean hasWon = false;

    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
              // check if 5 in a line
        }
    }

    return hasWon ;
}
然后用开关盒检查一下


每回合后检查是否有人赢了?@MuratK。根据他的代码(这与他的要求相矛盾),他已经得出了这个结论。在每个玩家/电脑回合后,他的
//isWon()
内有
,while(true)
。虽然OP没有明确提出这一问题,但我假设他想知道如何实现
isWon()
,其中将检查相邻X或O(水平、垂直或对角)的三/四/五(取决于电路板大小)。同样,这只是我的假设,因此OP可能应该编辑一下他的问题,并展示他迄今为止在
isWon()
-method中所做的尝试。有趣而有用的答案,非常感谢。实际上,这个程序还没有完全运行,但我已经取得了一些进展。再次感谢!
public static boolean playerHasWon() {
    boolean hasWon = false;

    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
              // check if 5 in a line
        }
    }

    return hasWon ;
}

public static boolean computerHasWon() {
    boolean hasWon = false;

    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
              // check if 5 in a line
        }
    }

    return hasWon ;
}
private final int DRAW = 0;
private final int COMPUTER = 1;
private final int PLAYER = 2;

private int isGameFinished() {
    if (isDraw()) return DRAW;
    else if (computerHasWon()) return COMPUTER;
    else if (playerHasWon()) return PLAYER;
}
loop: while (true) {
    // other stufff
    switch (isGameFinished()) {
    case PLAYER:
        System.err.println("YOU WIN!");
        break loop;
    case COMPUTER:
        System.err.println("Computer WINS!\nYOU LOOSE!!");
        break loop;
    case DRW:       
        System.err.println("IT'S A DRAW");
        break loop;
}