亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

確定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 關注
  • 595 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號