专栏首页用户4381798的专栏11.实现AI对战AI的五子棋程序

11.实现AI对战AI的五子棋程序

在前文AI人机对战的五子棋程序的基础上,我们加入了AI对战AI的功能。动态图中黑白棋子都是程序通过内置的逻辑控制落子,实现AI与AI之间的对战。这一版程序的AI逻辑在上一版本的基础上加入了些微的随机属性,当遇到多个相同的最优落子点时,通过随机的方式进行选择,这里用到了random.choice。 由于并没有对两个下棋的AI引入多少差异,所以黑白双方棋力不相上下攻守交替,并没有出现一方压倒一方的情形。后期在初版AI的基础上,对逻辑的权值进行一定规则的随机生成,扩充AI的数量,便可以产生出一些棋力更高的逻辑块。目前程序棋力中等,存在一些逻辑陷阱,没有学习能力,上文引入随机属性,也是为了使逻辑块能够自行跳出这些逻辑陷阱。

20200628_221431_20200628222034.gif

20200628_221431_20200628222417.gif

部分代码如下:

    def aivsai(self,event):
        unit = self.unit
        mydc = wx.ClientDC(self.panel)
        mydc.SetBrush(wx.Brush(self.actColor))
        x = 210
        y = 210
        piecePo = (x, y)
        piecePoCol = (x, y, self.actColor)
        mydc.DrawCircle(x, y, self.unit / 2.5)
        self.piecePos.append(piecePo)
        self.piecePosCols.append(piecePoCol)
        self.pieceNum = self.pieceNum + 1
        self.tip.SetValue('%s,%s' % (x, y))
        self.actColor = self.wht
        self.timer.Start(1200)
    def onTimer(self,event):
        self.play()
        if self.pieceNum >= ROW_NODE_NUM * ROW_NODE_NUM-50:
            self.timer.Stop()
            dlg = wx.MessageDialog(None, u"对局结束", u"平局",
                                   wx.YES_NO | wx.ICON_QUESTION)
            if dlg.ShowModal() == wx.ID_YES:
                dlg.Destroy()
                self.Destroy()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 10.带人机对战的五子棋程序

    今天我们带来一个带人机对战功能的五子棋程序。程序基于前面文章中的框架搭建,新增人机对战的策略。程序基于规则进行决策,不考虑禁手,玩家执黑子先行。棋盘规模采用15...

    用户4381798
  • 6.wxPython防止窗体重画棋子消失的机制

    可以画图的类中wx.ClientDC不必依赖窗体绘画事件,可以随时实例化,随时画图。但是窗体最小化之后再恢复,重画的窗体上通过wx.ClientDC绘制的棋子会...

    用户4381798
  • 7.wxPython制作一个桌面精灵

    今天我们通过窗体的SetShape()函数来制作一个桌面精灵。我们制作的桌面精灵本质上还是一个窗体,只不过是一个特殊格式的窗体。我们创建一个style=wx.F...

    用户4381798
  • 以往的Python文章总结

    笔记;因为Python不像C语言那样的强结构语言,所以我学完C就开始学Python,脑袋嗡嗡的,不过还好,它的赋值很不一般,像C语言第一条应该是先申请一个变量然...

    天钧
  • python 更新svn 并 ftp更新

    py3study
  • python3--对象之间的交互,类命名空间与对象、实例的命令空间

    现在有个游戏人与狗,人定义一个类,狗定义一个类,如何让两个类之间互相交互起来,让这个游戏变得更加有意思,代码如下

    py3study
  • Python接口自动化测试之动态数据处理(二十一)

    在前面的知识基础上介绍了在接口自动化测试中,如何把数据分离出来,并且找到它的共同点,然后依据这个共同点来找到解决复杂问题的思想。我一直认为,程序...

    无涯WuYa
  • Python要self的理由

    Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值 (显胜于隐 ...

    py3study
  • python第四十二课——__str__(self)函数

    4.__str__(self): 作用: 创建完对象,直接打印对象名/引用名我们得到的是对象的内存信息(十六进制的地址信息), 这串数据我们程序员并不关心...

    hankleo
  • 从PEP-8学习Python编码风格

    Python3中应当总是使用UTF-8。(Python2使用ASCII。)在使用了规定编码后不需要再声明文件编码。

    py3study

扫码关注云+社区

领取腾讯云代金券