我有表和Generate_moves()等一些函數,但最低運算法則工作,我需要設置表的分數,使計算機選擇最好的表。如何在井字遊戲中設置表格的分數?
public int Score()
{
if (Turn == "X")
{
if (gameWon("X")) return 100;
if (gameWon("O")) return -100;
if (gameDrawn()) return 0;
return n - canWin("X");
}
if (Turn == "O")
{
if (gameWon("O")) return 100;
if (gameWon("X")) return -100;
if (gameDrawn()) return 0;
return n - canWin("O");
}
return -1;
}
我canWin(string)
返回一個數字,告訴我,我有多少兩個X或O都在直線或列,但我懷疑這是一個偉大的,爲什麼要設置表的分數。
如果我有表:
X - X
0 X 0
- - 0
比分應該是一樣的
X - -
0 - X
0 0 X
和應大於
X - X
0 - -
- 0 -
而且我沒有任何想法如何讓分數功能告訴我不同的分數。我如何實現方法Score來告訴我這個?
編輯:
如果計算機是先用X和我帶O
X - - X - - X - - X - -
- - - -> 0 - - -> 0 X - -> 0 X -
- - - - - - - - - - - 0
現在我怎樣才能使計算機選擇下一個最好的選擇是
X - X
0 X -
- - 0
我不明白。你能做的最好的事情是贏得比賽,抽籤還是放鬆,不應該1分,0分和1分足夠分數? – aioobe 2012-02-08 13:58:33
我不確定我是否理解你如何嘗試對此進行評分。在所有三個例子中,X是1次移動而O總是2次移動。他們有什麼不同? – 2012-02-08 13:59:18
我需要MinMax的Score函數。1 0 -1不夠精確,因爲在第一個X - X 0 X 0 - - 0我不能說0 1 -1,因爲不適合所以它應該擴大 – Dementor 2012-02-08 14:03:25