我有表和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