2011-04-22 74 views
9

首先,我是一个noob。我也是一名从未制作过硬币编码的看门人。这只是我喜欢做的事情。这是为了好玩:)据说,我写了这个基于控制台的tic-tak-toe游戏,有足够的ai不会失去每场比赛。 (我猜ai就是它应该被调用的东西。)它有类似70 if/else if语句的计算机转向。我使用3个int数组,如下所示:如果(),否则如果()在c + +替代(这是AI?)

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;}//here the computer prevents a win 
else if(L[0] ==2&M[1]==2&R[2]==0){R[2]=2;}//here the computer wins 
//and so on....68 more times! 

我想我的问题(s)为(是):
有没有更好的办法?
有没有办法用较少的代码行来实现相同的结果?
这是否被认为是人工智能?

+0

一个有趣的井字游戏算法的实现,可能是一个ImageJ宏,它可以读取http://xkcd.com/832/上的PNG图像(例如wget http://imgs.xkcd。 com/comics/tic_tac_toe_large.png)并从中提取他们的答案......任何接受者? – 2011-04-22 21:20:45

+1

保持乐趣!显然,根据回复,有很多东西可供你学习。它的美妙之处在于,学习下面这些花哨的流行语,可以打开更多玩法。搜索“tic-tac-toe ai”以找到解决问题的方法。所以你知道,对“有没有更好的方法来编程?”的正确回应。是“是的,我的方式”。 :) – gregg 2011-04-22 21:29:32

+2

研究电脑玩游戏取胜是人工智能领域的一部分。事实上,游戏是人工智能领域的第一个案例研究。这就是说,为每一个可能的举措提供一个罐头响应并不是真正的AI。 :-)你是提供情报的人;电脑并不是“为自己弄清楚”。几乎任何介绍性AI教科书都会讨论Colin在下面的答案中描述的Minimax算法。 – 2011-04-22 22:44:56

回答

5

对此的标准算法被称为Minimax。它基本上构建了一棵树,游戏的开始是根,然后孩子们代表X可以在第一回合中做出的每一个可能的移动,然后每个节点的孩子都可以作出回应,等等一旦整个树被填满(这可能是Tic-Tac-Toe,但是对于像Chess计算机这样的游戏仍然没有足够的内存),假设两个玩家都足够聪明,可以做出最好的移动,并达成最佳的举措。这里是Minimax的another explanation,特别是使用Tic Tac Toe作为例子。

1

是的,有更好的方法。

最明显的将是考虑董事会不同的镜像视图如何简化案例数量。另外,考虑在数组中预先存储“有趣”模式,然后将游戏状态与数据进行比较。例如,一系列的模式将是一个球员在下一步移动中可以赢得的所有方式。

另外,还要注意与申报INT L[2],只有两个在阵列L,即L[0]L[1]条目。您需要的参考文件L[2]M[2]等都是编译器应该捕获的错误。考虑提高警告水平。这是如何完成取决于编译器。对于gcc,它是-Wall

这算作人工智能的一种形式。系列的if陈述是积累的知识:如何识别一个情况和适当的最佳反应。

+0

那是我的想法。似乎神经网络适用于有更多可能结果的事物。这让我感觉更好。我还在代码中将这些数组声明为L [5]。 (?) – 2011-04-22 22:00:10

+0

额外的空间通常是很好的做法,尤其是如果有解释(在声明旁边的注释中),就像是“暂时未使用”。在这种情况下,额外的元素加起来就是满手未用的字节。这就像“免费”一样。 – wallyk 2011-04-22 22:33:14

2

Tic-Tac-Toe上的维基百科页面有一个非常好的赢得(或捆绑)每个游戏的算法大纲: http://en.wikipedia.org/wiki/Tic-tac-toe这是我几年前用来制作井字游戏的游戏。

当你了解算法后,实现井字游戏电脑播放器的最聪明的方法之一就是用一个魔方。该方法在here讨论。就规模而言,我已经看到这实现了大约50行代码,如果我找到它,我会发布代码:)

这不是技术上的人工智能,因为AI通常指的是人造神经元,神经元层,梯度下降,支持向量机,解复杂多项式等。解决Tic-Tac-Toe

0

与真正的人工智能最接近的解决这样一个游戏的方法是编写一个人工网络并用tictactoe游戏的所有组合来训练它。

在这种情况下,如果其他解决问题的代码不会做得太多,但会通过采用最合理的选择来解决问题,从而解决问题。

但编码的神经网络不是一件简单的事情:)

+0

你不需要神经网络 - 你可以用一堆火柴盒和一些珠子做到这一切。试用Google搜索“火柴盒井字游戏” – 2011-04-22 21:30:12

+0

迷你最大或alpha-beta算法也被认为是整个AI领域的一部分,对于这类问题会更​​加简单和有效 – Voo 2011-04-22 23:27:09

0

当需要编写一个基于规则的系统(如你正在构建的AI),你可以使用一个规则引擎,例如像CLIPS (这是美国国家航空航天局开发的用于创建用C编写的专家系统的工具)。

http://en.wikipedia.org/wiki/CLIPS

也许是玩井字矫枉过正,但如果你的心情学习酷AI的东西,专家系统是一个非常有趣的领域,但是不同的(也许少麻烦)比神经网络。

玩得开心!