2010-04-14 50 views

回答

0

這是我想要的使用:

去了所有行(在各個方向)。對於每一行,如果它只有一個玩家的分數,則根據玩家的分數標記該分數。你可以有一個查找表映射數量的標記得分,可以調整以獲得最佳結果。最後的結果將是兩位球員得分之差。

例(僞):

const int markScore[4+1] = {0, 1, 3, 5, 99999}; //assuming 4x4x4 board 
//The above values are arbitrary - adjust to what you think makes sense. 

score = 0; 
for all rows in all directions: 
    count Xs and Os 
    if (xs>0 && os==0) 
     score += markScore[xs]; 
    else if (os>0 && xs==0) 
     score -= markScore[os]; 
return score; 

這應該很好地工作,因爲只有一個球員的標記任何行給出的球員有機會取勝。

+0

你能告訴我一個如何將分數映射到分數的例子嗎? – root 2010-04-14 16:41:40

+0

我想知道setScore中的值對AI有多大的影響?我試圖找到最好的價值。 – root 2010-04-14 19:35:12

+0

尋找好價值的一種方法是讓你的AI用不同的價值觀來對抗自己,並看看哪一個贏家是贏家。許多最好的國際象棋引擎都是這樣做的,以調整它們的參數。 (爲了更加準確,他們通常會與其他引擎相比,而不是自己)。 – interjay 2010-04-14 20:48:06

0

啓發式是不必要的。只有3^27個州,你可以枚舉它們並計算最佳遊戲。

+0

nope,在3D tictactoe中,狀態總數爲64個因子 – root 2010-04-14 19:23:02

+1

您應該定義「3D tic tac toe」。我假設基思假設它是一個3x3x3的網格,而不是4x4x4的網格,這就是你所建議的。無論哪種情況,你都會將「狀態」與可能的遊戲數量混淆起來。應該有〜3^64個狀態。現在這可能是不可行的,但可能會幫助您將狀態的數量可視化一點點。 – Larry 2010-04-14 19:44:20

0

該遊戲的評估功能只需要測試獲勝位置。評估職能應計入董事會中的空白字段,因爲董事會空檔越多,分數應該越高。爲了減少評估函數必須檢查的行數,行數和對角線數量,可以鏡像和旋轉電路板。