首先声明,我是个菜鸟。 我还是个从来没靠写代码赚过一分钱的看门人。 这只是我喜欢做的事情。 纯属娱乐:) 话虽如此,我写了一个基于控制台的井字游戏,它具有足够的AI,不至于每局都输。(我想可以称之为AI吧。) 它的电脑回合使用了大约 70 个 if/else if 语句。 我使用了 3 个 int 数组,如下所示:
int L[2], M[2], R[2];
0 = 空白; 1 = X; 2 = O;
然后棋盘看起来像这样
L[0] | M[0] | R[0]
L[1] | M[1] | R[1]
L[2] | M[2] | R[2]
所以我基本上写出了我能想到的每一种可能的情况,例如:
if(M[0]==1 & M[1]==1 & M[2]==0){M[2] = 2;}//这里电脑阻止了对手获胜 else if(L[0] ==2&M[1]==2&R[2]==0){R[2]=2;}//这里电脑获胜//等等...还有 68 次!
我想我的问题是:
有更好的方法吗?
有没有一种方法可以用更少的代码行实现相同的结果?
这算作人工智能吗?
回答:
解决这个问题的标准算法被称为 Minimax(最小最大算法)。 它基本上构建了一个树,游戏的开始是根,然后子节点代表 X 在第一回合可以做出的每一种可能的移动,然后每个这些节点的子节点是 O 可以做出的所有回应的移动,等等。 一旦整个树被填满(对于井字游戏来说这是可能的,但对于像国际象棋这样的游戏,计算机仍然没有足够的内存),你就反向工作,假设两个玩家都足够聪明,可以做出最好的移动,并得出最优的移动。 这里是 另一个解释,专门使用井字游戏作为例子来解释 Minimax 算法。