python小练习(069):简单游戏AI设计之一(井字棋)
本帖最后由 jerryxjr1220 于 2017-2-7 17:21 编辑本季python小练习的最后2节准备简单介绍一下基本的游戏AI的设计,从最简单的游戏“井字棋”开始。
其实,游戏AI的设计(哪怕战胜了人类棋手的AlphaGo)无外乎包含以下几个基本功能:
1. 遍历:按照当前游戏(棋局)的所有可执行方案依次进行遍历,并返回遍历结果。遍历原则上采用“广度优先搜索”策略,对于复杂AI的设计,可以加上一定深度的“深度优先搜索”策略(比如说,预估5步或者10步等等)。但是预估的步数越多,执行的效率就越低,判别的局势也会呈现爆发式增长。
2. 局势判别:对所有遍历过的局势,对当前的游戏(棋局)进行判断判断,应该运用什么策略来进行下一步,这里往往会引入权重评分制,权重高的优先执行。
3. 选取所有策略中权重等级最高的执行,重复上述过程,直至程序终止(分出胜负)。
我们设计的井字棋小游戏,由于程序比较简单,基本上一套判别系统就可以完成上述的动作,所以我没有引入权重评分机制,而且井字棋也有比较明显的逻辑(连成一直线>拦截对手>抢中间一格>抢四角>四边),其实这就是整个遍历的过程。
我们来看一下整个过程:
Welcome to play JingZiQi!
You:1, Com:2
0 0 0
0 0 0
0 0 0
==========
请输入要下的位置,例如:“0,0”
0,0
1 0 0
0 2 0
0 0 0
==========
请输入要下的位置,例如:“0,0”
0,1
1 1 2
0 2 0
0 0 0
==========
请输入要下的位置,例如:“0,0”
2,0
1 1 2
2 2 0
1 0 0
==========
请输入要下的位置,例如:“0,0”
2,2
1 1 2
2 2 2
1 0 1
==========
Lose!
源代码:
**** Hidden Message ***** 要让电脑先下也可以,只需在第一步时(输入):3,3(即不在棋盘范围内的值,即可),可以测试看看电脑先手会怎么下。 {:5_91:} 学习一下~~~ 我还没有看程序,是运行了,发现在我输入0,2后,棋盘上没有显示计算机的下子。 冬雪雪冬 发表于 2017-2-7 16:12
我还没有看程序,是运行了,发现在我输入0,2后,棋盘上没有显示计算机的下子。
谢谢反馈,有一行代码手抖了,现在更新好了。{:10_254:} 学习 {:10_249:} DDDDDDDDDDDDDDDDDDDDDDD 顶 xieixe感谢无私分享 学习学习 学习一下
{:5_91:}
学习 研究~ 额 看看
学习