为了账号安全,请及时绑定邮箱和手机立即绑定

确定Tic Tac Toe游戏的算法

确定Tic Tac Toe游戏的算法

忽然笑 2019-08-15 16:18:30
确定Tic Tac Toe游戏的算法我在Java中编写了一个井字游戏,我目前确定游戏结束的方法解释了游戏结束的以下可能情况:董事会已经满员,尚未宣布获胜者:比赛是平局。克罗斯赢了。Circle赢了。不幸的是,为了做到这一点,它从表中读取了一组预定义的这些场景。考虑到电路板上只有9个空格,这并不一定是坏的,因此表格有点小,但有没有更好的算法来确定游戏是否结束?确定某人是否赢了是问题的关键,因为检查9个空格是否已满是微不足道的。表方法可能是解决方案,但如果没有,那是什么?另外,如果电路板尺寸不大n=9怎么办?如果它是一个更大的板,比如n=16,n=25等,造成连续放置物品的数量取胜是x=4,x=5等?一种用于所有人的通用算法n = { 9, 16, 25, 36 ... }?
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

您知道获胜的移动只能在X或O进行最近移动之后发生,因此您只能搜索包含在该移动中的可选诊断的行/列,以在尝试确定获胜板时限制搜索空间。此外,由于在最后一次移动中,如果它不是一个获胜的移动,那么在平局游戏中存在固定数量的移动它默认为抽奖游戏。

编辑:此代码用于n个n板,连续n个赢(3x3板请求连续3个,等等)

编辑:添加代码来检查反诊断,我无法找出一个非循环的方式来确定该点是否在反诊断,这就是为什么这一步缺失

public class TripleT {

    enum State{Blank, X, O};

    int n = 3;
    State[][] board = new State[n][n];
    int moveCount;

    void Move(int x, int y, State s){
        if(board[x][y] == State.Blank){
            board[x][y] = s;
        }
        moveCount++;

        //check end conditions

        //check col
        for(int i = 0; i < n; i++){
            if(board[x][i] != s)
                break;
            if(i == n-1){
                //report win for s
            }
        }

        //check row
        for(int i = 0; i < n; i++){
            if(board[i][y] != s)
                break;
            if(i == n-1){
                //report win for s
            }
        }

        //check diag
        if(x == y){
            //we're on a diagonal
            for(int i = 0; i < n; i++){
                if(board[i][i] != s)
                    break;
                if(i == n-1){
                    //report win for s
                }
            }
        }

        //check anti diag (thanks rampion)
        if(x + y == n - 1){
            for(int i = 0; i < n; i++){
                if(board[i][(n-1)-i] != s)
                    break;
                if(i == n-1){
                    //report win for s
                }
            }
        }

        //check draw
        if(moveCount == (Math.pow(n, 2) - 1)){
            //report draw
        }
    }}


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 564 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信