学院:
班级:
姓名:
学号:
指导教师:
结课报告
五子棋对弈的算法设计
Python 编程与数据分析
目录
一、程序思路介绍…………………………………………………
… P1
(一)算法用途…………………………………………………………
… P1
(二)资料采集…………………………………………………………
… P1
1.所需要的库和相关函数……………………………………………
… … P1
2.所需要的游戏素材…………………………………………………
… … P1
3.五子棋走步规律……………………………………………………
… … P1
4.电脑判断下棋的最优解……………………………………………
… … P2
5.查询网站……………………………………………………………
… … P2
二、设计方案………………………………………………………
… P3
(一)五子棋人人对弈…………………………………………………
… P3
(二)五子棋人机对弈…………………………………………………
… P3
(三)程序基本架构……………………………………………………
… P3
三、源程序代码……………………………………………………
… P4
(一)规则限定…………………………………………………………
… P4
(二)人人对弈…………………………………………………………
… P4
(三)人机对弈…………………………………………………………
… P6
四、程序运行………………………………………………………
… P10
(一)人人对弈…………………………………………………………
… P10
(二)人机对弈…………………………………………………………
… P11
五、结语……………………………………………………………
… P12
程序思路介绍
一、算法用途
本算法将实现五子棋的人机对弈和人人对弈,通过五子棋的规律来实现“伪
AI”,仿佛电脑有自己的想法和你下棋。实际上是通过计算得出电脑落子的最优解 ,
不过因为缺少深度学习等学习方法,只要谨慎一些就能战胜电脑。
二、资料采集
(一)所需要的库和相关函数
需要 pygame 库,包括 display, font, event, draw, gfxdraw(这个比 draw
画出来的东西的锯齿优化很多);需要 sys 库,random 库 collections 等,解决一
些数据流,缓存,鼠标点击等边边角角的问题。
(二)所需要的游戏素材
因为素材就需要黑白棋子,棋盘,旁边的分数栏,所以就直接用 pygame 画
出来就好。
(三)五子棋走步规律
1.连五:五颗同色棋子连在一起,游戏胜利。
2.活四:四颗同色的棋子连在一起,左右皆无阻拦。
3.冲四:四颗同色棋子连在一起,并且一边有对方棋子阻挡。
或者四颗棋子不是连的,当中有个空挡,这时只有一个连五点。
4.活三&跳活三:三颗同色棋子连在一起。
中间隔了一个空格的活三。
5.眠三:只能够形成冲四的三,无外乎两种情况:一是一边被挡住了,一是当
中有 2 个空格。(不过第一种情况即便形成冲四,也不是什么危险局面)
1
6.活二&眠二:活二,能够形成活三的二;眠二,能够形成眠三的二。
(四)电脑判断下棋的最优解
接下来就是判断下棋最优解问题,无论怎么下,最多也就是上面列举的那几种
情况。
首先,连五肯定是不存在的,出现连五胜负已分,所以只要棋局还在进行中,
就不会出现连五。一旦有一方出现连五的情况游戏就可以结束了,如果到棋盘铺满
仍未达到这个条件,那么也要终止程序。
接下来优先级最高的是活四。
对方的“四”,对方活四,你防不防都一样输了,对方冲四,你就必须防守。
再次优先的,我方的活三或冲四,活三跟冲四其实是一个级别的,对方必须防
守。
再次优先的,对方的活三或冲四。
以此类推下去。我们可以总结一点规律:
相同的棋形,我方优于对方。
冲四跟活三一个级别,眠三跟活二一个级别。
如果中间有空格的话,肯定是要比没空格的略微低级一点,但不至于降级。
所以根据这思路,在每下完一步棋,遍历棋盘上的空位,用上述不同优先级加
权,找到落子最优的地方,选出最优解。从理论上讲,五子棋执黑是必赢的。代码
中,玩家就是执黑先手,电脑执白后手,所以,下的好是完全可以赢电脑的,不过
一个小小失误也很可能被电脑翻盘。
(五)查询网站
五子棋走步规律:https://www.cnblogs.com/gl1573/p/10319295.html
Pygame 库 : https://blog.csdn.net/zha6476003/article/details/
82940350
Sys 库:https://blog.csdn.net/qq_38526635/article/details/81739321
Random 库 : https://www.runoob.com/python/func-number-
random.html
Collections 库 :
https://blog.csdn.net/u013317172/article/details/82263256
黑白落子代码参考:https://blog.csdn.net/yj1499945/article/details/
45333859
棋盘参考:https://blog.csdn.net/weixin_42165525/article/details/
80341944
计分参考:https://bbs.csdn.net/topics/390533292
- 1
- 2
- 3
- 4
- 5
- 6
前往页