今天我们带来一个带人机对战功能的五子棋程序。程序基于前面文章中的框架搭建,新增人机对战的策略。程序基于规则进行决策,不考虑禁手,玩家执黑子先行。棋盘规模采用15乘15,棋盘规模容易扩展,程序棋力中等,可以用来放松陪玩。
程序每一步都会搜索棋盘所有可以落子的位置,然后识别出最值得落子的位置,实现进攻和围堵。目前评估值为人为设置,所以程序棋力只能与编者相当,勉强算作中等棋力,后期若引入遗传算法或者强化学习,通过养蛊之法,可以养出更高棋力的程序。部分代码如下:
```
BOARD = []for i in range(UNIT, UNIT * ROW_NODE_NUM + UNIT, UNIT):for j in range(UNIT, UNIT * ROW_NODE_NUM + UNIT, UNIT):
BOARD.append((j, i))print(BOARD)class myFrame(wx.Frame):def __init__(self):self.unit = UNITself.pointNum = ROW_NODE_NUM#每行落棋点数 self.pieceNum=0 self.bkCol=(220, 210, 0)self.wht=(255,255,255)self.blk=(0,0,0)self.actColor=self.blk# self.piecePos=[(self.unit/2,self.unit/2)] # self.piecePosCols = [(self.unit/2,self.unit/2,self.blk)] self.piecePos =[]self.piecePosCols =[]# 元组列表记录落棋位置和落棋颜色 super().__init__\
(parent=None,pos=[800,100],size=[self.unit*self.pointNum
+self.unit+20,self.unit*self.pointNum
+self.unit+30+20],title="商贾三国")self.SetIcon(wx.Icon("WeatherBundle.ico"))
self.panel = wx.Panel(self)
###
```
总体代码比较多,
限于篇幅,获取完整源码可以移步公众号:
哈哈哈利
回复
五子棋人机对战
可以获取决策部分代码。
总体代码比较多,限于篇幅,获取完整源码可以移步公众号:哈哈哈利,回复五子棋人机对战,可以获取决策部分代码
五子棋程序已经打包为exe,可以脱离Python环境,程序获取路径如下:链接:https://pan.baidu.com/s/19U9AZa0Msoyt6xs-OpuDNA
提取码:q940
感兴趣可以用来放松娱乐。