python五子棋ai_零基础学Python之—AI五子棋(1)
今天是小编学习Python的第二天,有点小激动,因为我 昨天试了下水,做了一个Python的小弹球游戏,代码copy一路畅通,效果也还不错,而且,我居然还得了60个赞,很高兴,因为这是我第一次写技术博客超过十个赞的,于是乎,我快马加鞭,赶紧推出了我的Python学习第二部!
在这里小编建议大家先去看一下我的上一篇博客
关于Python怎么画图在上一篇博客中有讲述哦
另外小编也是才接触Python,博客是为了分享自己的学习方法,学习过程
另外有学的Python想法的小伙伴们一定要开始学哦,当然,跟着我的节奏一起学也不错啊嘿嘿
我觉得我这里重在讲两个观点: 敢干!当你遇见一个不知道的问题或者没听过的概念的时候,你要有一个这就其实是一个概率一个问题的思维!而不是,握草,没听过啊,好牛逼的样子,我不会啊...
会解决问题,会for help,会百度,然后,当你敢于解决问题,并学会解决问题的时候,不知不觉中,你就是大神,大神就是你了!
这一次我将为大家带来我的第二个小作品—AI五子棋(基于博弈树算法),其实在上一篇博客的基础上,再去做个五子棋的难度并不大,按照上一次所说,这一次写五子棋也按步骤,一步一步来!
第一步:绘制棋盘
无非就是几根竖线几根横线,首先创建一个窗体,然后给窗体加上画布,再画线,就可以绘制出棋盘了,代码如下:
fornum inrange(1,17):
canvas.create_line(num*30,30,num*30,480,width=2)
fornum inrange(1,17):
canvas.create_line(30,num*30,480,num*30,width=2)
当然,for循环的方法也是我百度的,但是绘制棋盘的时候遇到了一个问题
画布左边的线 canvas.create_line(0,0,0,450)显示不出来,于是我将线加粗,于是得到
只有一条细细的线,大概是最左边那里可能会遮挡吧,于是乎我就将画布增大,将棋盘移到中间,就这样,香喷喷的棋盘就这样出炉了!
第二步:给画布加鼠标监听,画棋子
给画布加监听是为了让我们点击一下鼠标,就在click的那个点画一个棋子,从而实现下棋功能。
好!心中默念一声,百度大法好 !
duang~
监听方法找到了,这监听起来可比Java简单多了,好,一波复制粘贴下来,走一波
摁一下,画一下圆,感觉不太对劲,监听的应该不是点击事件,继续百度,鼠标点击监听
将 改成,走一波,完美,点哪儿画哪儿,美滋滋
然后,我们可以发现,鼠标点击的点很可能不会下在棋盘的点上,因此,就需要我们处理一下画圆的数据,如果点击的点离哪边儿近,那我就画在哪,我这儿棋盘的宽度设置的是30。所以当点击的除以30剩下的值大于15就画在右边的棋盘点,反之则画在左边,上下亦然。
再我用了这个方法后,结果棋子还是没有落在棋盘点上,输出一下处理后的点,发现并不是整数。不用想,肯定是语法问题了,百度走一波
Python 里面的 / 并不像c/Java里面那样,是正真的除法,没有经过处理的,所以,这里应该用//
所以我现在印象很深刻"//"等于Java里面的"/",以及,Python没有++i和i++这种运算符
也许,像这样子错一下,也许比直接看书,更加让人记忆深刻吧 !
第三步:黑白轮回,用二维数组表示棋子
黑棋白棋轮流下很简单,设置一个全局变量color_number=0,每点击一次鼠标,color_number+=1,不能用color_number++,当color_number%2==0时,在相应的点画黑棋,反之,画白棋。
在这里又遇到一个问题,在color_number+=1的时候会报错,看看报错原因,与全局变量与局部变量有关,好吧,继续百度
新知识点get,但是还是想查他个水落石出~,这里就不一一贴上来了
好了,能黑白轮流下了,但是在黑棋上点一下,就会变成白棋,再点一下,又变成黑棋了,这个问题好解决,创建一个二维数组,用0表示改点为空,1表示黑棋,2表示白棋。只有当改点为0的时候,在可以下棋。
啥,二维数组不会?二维数组不对劲?好吧,继续百度: python二维数组
能百度就百度,不要说不会,让一切问题都扼杀在百度的摇篮里吧!(有点像百度水军的感觉哈哈)
第五步,判断输赢
之前见过有人判断输赢遍历整个棋盘寻找有没有五子连珠,其实没必要这样做,你只要在当前下的点往四个方向搜一下,判断四个方向有没有五子连珠就OK了,这里因为我语法不太会,我直接全部写在一起了,下面贴代码
def isgameover( xx , yy):
count =0
#向左搜索
for i in range (xx+1 ,17 ):
if array[i][yy] == array[xx][yy] :
count += 1
else:
break
#向右搜索
for i in range ( xx ,0,-1 ) :
if array[i][yy] == array[xx][yy]:
count += 1
else :
break
if count == 5 :
tkinter.messagebox.showinfo("","Game over")
count =0
#向下搜索
for i in range (yy+1 ,17 ):
if array[xx][i] == array[xx][yy] :
count+=1
else:
break
#向上搜索
for i in range ( yy ,0,-1 ) :
if array[xx][i] == array[xx][yy]:
count += 1
else :
break
if count == 5 :
tkinter.messagebox.showinfo("","Game over")
count =0
#向右下搜索
for i,j in zip( range(xx+1,17),range (yy+1,17)):
if array[i][j] == array[xx][yy] :
count+=1
else:
break
#向左上搜索
for i,j in zip(range(xx,0,-1),range ( yy ,0,-1 ) ):
if array[i][j] == array[xx][yy]:
count += 1
else :
break
if count == 5 :
tkinter.messagebox.showinfo("","Game over")
count =0
#向左下搜索
for i, j in zip(range(xx -1, 0,-1), range(yy + 1, 17)):
if array[i][j] == array[xx][yy]:
count += 1
else:
break
#向右上搜索
for i, j in zip(range(xx, 17), range(yy, 0, -1)):
if array[i][j] == array[xx][yy]:
count += 1
else:
break
if count == 5:
tkinter.messagebox.showinfo("","Game over")
count = 0
第六步:悔棋
第七步:加AI
六七步下次再给大家补上,在这里小编还是想说一句:有问题,不要说我不会,因为一旦你这样说,很多情况下,大概率我们是不会去解决这个不会的问题的。个人觉的,在网上资源这么丰富的情况下,只要你敢干,不怂,肯百度,肯学习,什么东西都会变得很简单的。
小编也是才学计算机不久,如果有什么问题,欢迎大家指出来
不小心把第二篇删除了。。。。怎么办
python五子棋ai_零基础学Python之—AI五子棋(1)相关推荐
- python自学步骤-零基础学Python应该学习哪些入门知识及学习步骤安排
众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...
- 零基础学python免费网课-零基础学Python量化投资,超值线上课程反复回看
原标题:零基础学Python量化投资,超值线上课程反复回看 超值网络课程 量化投资是一种严谨.系统化的投资方式,相比起传统投资,量化投资风险低回报高,但是它要求投资者使用数据处理分析.计算机编程技术. ...
- 零基础学python需要多久-零基础学python大概要多久
Python是目前公认的全球5大流行语言之一,从云计算.大数据到人工智能,Python无处不在,同时Python被誉为神奇的"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使 ...
- 零基础学python需要多久-零基础学Python要多久
原标题:零基础学Python要多久 这几年Python逐渐被越来越多的人熟知,无论是因为工作还是兴趣,很多人都想学习Python.大部分的人都是零基础学习,自然免不了会问零基础学Python要多久这样 ...
- 零基础学python要多久-零基础学Python要多久
原标题:零基础学Python要多久 这几年Python逐渐被越来越多的人熟知,无论是因为工作还是兴趣,很多人都想学习Python.大部分的人都是零基础学习,自然免不了会问零基础学Python要多久这样 ...
- 0基础学python要多久-零基础学Python的过程有多难?需要多久?
Python是一门简单高效,应用范围广泛的计算机语言.先我们要知道Python已经算是一门相对其他编程语言而言,最适合零基础新手学习的开发语言,换句话说,如果连Python都学不进去就不要考虑进入IT ...
- python笔记(零基础学Python)
<零基础学Python> 1.基础 2.流程控制语句 3.序列的应用 4.字符串.正则表达式 5.函数 6.面向对象 7.模块(库) 8.异常处理+程序调试 9.文件及目录操作 10.Py ...
- 学习python好学吗-零基础学python难吗?好学吗?
Python是一种什么语言? Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的Jav ...
- 零基础编程学python还是java_零基础学python还是java 二者有哪些区别
对于初学者来说,python相对比较简单.python的语法类似于伪代码或普通英语,不需要严格的代码结构,入门简单. 零基础适合python还是java 从语言本身来说,python是出了名的简洁.p ...
最新文章
- java如何获取明天的时间_java获取各种格式的时间,获取昨天明天日期,获取一天的开始结束时间...
- JAVA入门级教学之(方法-1)
- 对ARP病毒攻击的防范和处理及相应工具方法
- 科学家组建大数据平台解决科研资源共享难题
- [再学Python] - 7 - 文件
- FLAT:又快又好的中文命名实体识别模型
- sql 怎么获取系统时间
- 【ESRI论坛6周年征文】ArcEngine注记(Anno/ Label/Element等)处理专题 -入门篇
- 使用教育邮箱享正版Jetbrains 套件,IDEA正版webstrom正版
- 燃烧的远征java(二)-开发环境:eclipse 的使用技巧收集
- 如何将LaTeX公式拷贝到Word中
- c语言实现7段数码管显示,FPGA入门--七段数码管显示
- 捋一捋Python的文件处理(上)
- 高通8953 Android 9.0 打开user调试串口
- (翻译)如何提示用户密码已变更
- 推动“海纳众创”,打造“漫天繁星”:中国联通视频彩铃全国创意创新大赛开赛仪式顺利举行!
- JS笔记 | JS中的strict model(严格模式)
- 解决ORA-00020错误
- 微信jsapi获取用户地理位置接口开发(第八课)
- 如何学好人力资源管理?方法及书籍推荐