以为第二篇很晚到来,主要是我的想法是等我把机器学习学个大概之后再回来优化。不过最近在深入的学习python,学到了一些pythonic的代码风格,所以决定回来重构一下我的五子棋代码
###这次主要做了
####1.优化了我的代码,使得代码更加简洁美观。可读性更高。
比如这段优化前的函数:

def robotChess(self):if self.player == 0:if len(self.bla_chessed) == 0 and len(self.whi_chessed) == 0:self.bla_chessed.append([25 + 30 * 7, 25 + 30 * 7, self.player % 2])self.can.create_oval(25 + 30 * 7 - 11, 25 + 30 * 7 - 11, 25 + 30 * 7 + 11, 25 + 30 * 7 + 11,fill="black")self.board[7][7] = 1returnelse:_x, _y, _ = self.robot.MaxValue_po(1, 0)#print([_x, _y], [x, y])newPoint = [_x * 30 + 25, _y * 30 + 25]self.can.create_oval(newPoint[0] - 11, newPoint[1] - 11, newPoint[0] + 11, newPoint[1] + 11,fill="black")self.bla_chessed.append([newPoint[0], newPoint[1], self.player % 2])self.board[_x][_y] = 0else:_x, _y, _ = self.robot.MaxValue_po(0, 1)newPoint = [_x * 30 + 25, _y * 30 + 25]self.can.create_oval(newPoint[0] - 11, newPoint[1] - 11, newPoint[0] + 11, newPoint[1] + 11,fill="white")self.whi_chessed.append([newPoint[0], newPoint[1], self.player % 2])self.board[_x][_y] = 1

优化后:

    def robotChess(self):"""机器人下棋"""if self.player == 0:if len(self.bla_chessed) == 0 and len(self.whi_chessed) == 0:'''电脑执黑棋,开局优化'''self.draw_a_chess(*self.bla_start_pos, player=0)returnelse:_x, _y, _ = self.robot.MaxValue_po(0, 1)newPoint = pos_in_board(_x, _y)self.draw_a_chess(*newPoint, player=0)else:#白棋下_x, _y, _ = self.robot.MaxValue_po(1, 0)newPoint = pos_in_board(_x, _y)self.draw_a_chess(*newPoint, player=1)

很明显代码更加简洁,不会看起来很混乱


####2.添加了注释,可以帮助阅读


####3.运用了一些pythonic的写法,特别是大量运用拆包,使得代码可以很简洁,没有那么多看起来那么多的变量。还有将一些有重复性的功能模块化,减少了整体的代码量。
如果不知道拆包是什么,请看我的另一篇博文:Python进阶(一):python技巧

比如这一段代码就运用:

if len(self.whi_chessed) != 0:for tmp in self.whi_chessed:oval = pos_to_draw(*tmp[0:2])self.can.create_oval(oval, fill="white")

其中第三行:

oval = pos_to_draw(*tmp[0:2])

*temp[0:2]实际相当于tmp[0],tmp[1]

而pos_to_draw的原函数是:

def pos_to_draw(*args):"""计算棋子在棋盘的顶,底,左,右的位置"""x, y = argsreturn x - 11, y - 11, x + 11, y + 11

这里*arg运用到另一个知识点,请看: Python进阶(三):*args,**kwargs的使用


效果:


下载五子棋代码:下载链接
下载训练棋谱:下载链接

如果觉得我写的不错,扫描下面二维码添加我的公众号

pythonAI五子棋(二)相关推荐

  1. 用javascript实现五子棋(二)

    前面已经实现了整个游戏流程,现在讲五子棋AI的实现,五子棋AI的实现方法主要是以下几种: 1.查表法,保存一些棋谱,电脑下棋的时候自动匹配 2.分值法:对棋盘上的每一个空位进行检索,假设这个空位放某种 ...

  2. C++五子棋(二)——游戏界面与棋子渲染

    准备 我们首先要在程序中定义一个名为drawPNG的函数,用于输出png格式图片并使背景透明 引入头文件(需要提前安装EasyX) #include <graphics.h> 定义函数 d ...

  3. 新手silverlight练习--五子棋( 二 )

    2019独角兽企业重金招聘Python工程师标准>>> 新一天又开始了,继续上次的话题,讲到哪里了呢:?   (这都忘记了,先拍一板砖)... 嘿嘿,想起来了,上次讲到把棋盘做好了. ...

  4. JS实现五子棋单人双人简易游戏(下)

    目录 一.简介 二.游戏实现效果如下 三.以下为源码 1.HTML 2.CSS 3.JS 一.简介 此版包括了单人模式(人机模式)和双人模式 只需要双人模式的可以看这篇:JS实现双人五子棋简易游戏(上 ...

  5. java图形化界面(GUI)

    java图形化界面(GUI) 一.AWT编程(抽象窗口工具集) 1.AWT继承体系 2.Container容器 2.1 Container继承体系 2.2 常见API 2.3 容器演示 2.3.1 w ...

  6. 【牛客 - 331B】炫酷五子棋(STLset 或Hash,tricks,二维map标记)

    题干: 五子棋是一个简单的双人游戏. 小希最近在思索一种更好玩的五子棋.她希望胜利不再是谁先五子连珠谁赢,而变成谁落子后,该子与之前的子五子连珠的次数更多才能胜利. 但是如果是在普通的棋盘上,这个游戏 ...

  7. java二维数组模拟用户登录_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)...

    这里分享三道编程题, 下面是我个人的视频讲解我的解题思路以及代码运行演示https://www.zhihu.com/video/1253424180936724480 1. 编程实现以下需求: 定义一 ...

  8. 实体类 接口_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)

    原文:Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口, 视频讲解) 这里分享三道编程题, 下面是我个人的视频讲解 二维数组, 五子棋游戏, 实体类和接口_哔哩哔哩 (゜-゜)つロ ...

  9. 第18篇 Qt实现简单五子棋游戏(二)算法说明

    第18篇 Qt实现简单五子棋游戏(二)算法说明 5.算法说明 5.1.画棋盘: void drawChessboard(); 5.2.画棋子:void drawChess(); 5.3.鼠标点击响应: ...

最新文章

  1. Visual Studio 2013 在使用 razor无智能提示的解决办法
  2. linux中三个time:atime、mtime、ctime
  3. Oracle的sqlplus登录方式
  4. 神策分析 1.10 推数据全景化,跨部门联动释放共享价值
  5. sql语句添加删除外键
  6. jdk开发文档_【第9期】面试官:JDK、JRE、JVM 三者什么关系?
  7. bzoj 4195: [Noi2015]程序自动分析
  8. Hive on Tez出现exec.Task: Failed to execute tez graph. java.lang.NullPointerException
  9. 深度学习之基于CNN和VGG19实现灵笼人物识别
  10. GCC 使用-C语言编译过程
  11. 力算未来丨一张图看懂华为“鲲鹏+昇腾”双引擎
  12. 韩国巨型机器人曝光,走一步地动山摇
  13. 续航超600km新能源汽车扎堆发布,零部件供应商“放血”,这届车展都拼了...
  14. Navigation + Tab Bar 常用组合框架
  15. python中异或怎么算_python中的异或运算
  16. HDU1576 A/B【扩展欧几里得算法+试探法】
  17. POJ--3268 Silver Cow Party(最短路)
  18. 动态显示没有数据时让GridView也能显示表头信息
  19. 20200713每日一句
  20. HDL4SE:软件工程师学习Verilog语言(十三)

热门文章

  1. matlab分析gnss数据,Matlab读取GNSS 观测值o文件代码示例
  2. 2022年,你的数据库还没有上云吗?
  3. 根据UV风计算风速风向,根据风速与风向计算UV风
  4. 注册德国商标的流程以及德国商标的异议
  5. shell中和||的用法
  6. 豆豆趣事[2012年03月]
  7. 大数据开发之Hive篇12-Hive正则表达式
  8. 程序员的浪漫------下雪氛围圣诞树源码
  9. Detection in Crowded Scenes: One Proposal, Multiple Predictions(拥挤场景下的检测:一个提议,多个预测)
  10. SAP FICO 应收应付重分类的坑 SAP S4 HANA