jerryxjr1220 发表于 2017-2-7 14:25:19

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 *****

jerryxjr1220 发表于 2017-2-7 14:32:18

要让电脑先下也可以,只需在第一步时(输入):3,3(即不在棋盘范围内的值,即可),可以测试看看电脑先手会怎么下。

acuso4 发表于 2017-2-7 14:46:18

{:5_91:}

岛木木 发表于 2017-2-7 15:19:07

学习一下~~~

冬雪雪冬 发表于 2017-2-7 16:12:06

我还没有看程序,是运行了,发现在我输入0,2后,棋盘上没有显示计算机的下子。

jerryxjr1220 发表于 2017-2-7 17:23:45

冬雪雪冬 发表于 2017-2-7 16:12
我还没有看程序,是运行了,发现在我输入0,2后,棋盘上没有显示计算机的下子。

谢谢反馈,有一行代码手抖了,现在更新好了。{:10_254:}

荷风香煞 发表于 2017-2-9 01:56:14

学习

xuxianju 发表于 2017-2-9 11:00:41

{:10_249:}

cq123456a 发表于 2017-2-10 11:45:02

DDDDDDDDDDDDDDDDDDDDDDD

a347807131 发表于 2017-3-24 10:32:09

chenguwen003210 发表于 2017-4-22 21:37:16

xieixe感谢无私分享

wj465596344 发表于 2017-4-26 20:20:38

学习学习

M喵狮 发表于 2017-5-4 18:46:18

学习一下

NBL明x 发表于 2017-5-4 19:16:00

{:5_91:}

z215229525 发表于 2017-5-23 20:20:42


学习

新手·ing 发表于 2017-5-27 21:54:01

研究~

liink 发表于 2017-5-28 09:55:59

WelanceLee 发表于 2017-6-13 13:38:55

看看

P先生 发表于 2017-6-26 09:46:07

空空3812 发表于 2017-9-12 14:51:08

学习
页: [1] 2 3 4 5 6
查看完整版本: python小练习(069):简单游戏AI设计之一(井字棋)