设计思路

​使用Python中的turtle库实现棋盘棋子的控制。

​程序功能:游戏双方轮流使用鼠标进行落子,并自动判定胜负

画布的初始化

1.棋盘尺寸

​查阅资料可知,标准五子棋棋盘大小为15格*15格

​考虑电脑屏幕大小,取棋盘大小为420*420

2.区分棋盘与非棋盘区域

​用灰色填充棋盘区域

color('grey')

begin_fill()

penup()

goto(-210,-210)

pendown()

goto(-210,210)

goto(210,210)

goto(210,-210)

goto(-210,-210)

end_fill()

3.画线

color('black')

for i in range(-210,211,30):

penup()

goto(i,-550)

pendown()

goto(i,550)

for i in range(-210,211,30):

penup()

goto(-550,i)

pendown()

goto(550,i)

吸附功能

此处使用了奇怪的实现方式,不建议学习。代码如下:

for i in range(1,16):

for j in range(1,16):

for x in range(-240+30*i-15,-240+30*i+15):

for y in range(240-30*j-15,240-30*j+15):

P[(x,y)]=(i,j)

P是从屏幕上点的坐标到棋盘上的行、列数的映射

双方轮流落子功能

用一个 bool变量表示 [当前是白方回合]

def play(x,y):

global t

t=not t

每次调用play函数都交换落子权

if t:

color('white')

draw(p[0],p[1])

m[p]=-1

else:

color('black')

draw(p[0],p[1])

m[p]=1

不合法落子的处理

情况一 在棋盘外落子

if (x,y) not in P:

t=not t

return

情况二 在已落子处落子

p=P[(x,y)]

if m[p]!=0:

t=not t

return

其中m的含义在交换落子权处可以看出。

m[p]=1表示p点有黑棋,m[p]=-1表示有白棋,m[p]=0表示没有棋子

判断胜负

def game_end(x,y):

global Gmov

for i in tw:

tot[i]=0

xn=x+i[0]

yn=y+i[1]

while (xn in range(1,16)) and (yn in range(1,16)) and m[(xn,yn)]==m[(x,y)]:

tot[i]=tot[i]+1

xn=xn+i[0]

yn=yn+i[1]

for i in range(4):

if tot[tw[i]]+tot[tw[7-i]]+1 >= 5:

begin_fill()

penup()

goto(-210,-210)

pendown()

goto(-210,210)

goto(210,210)

goto(210,-210)

goto(-210,-210)

end_fill()

print("game over")

Gmov=True

return

如上,在每次落子后向周围8个方向搜索连续的相同颜色的棋子的个数。

总代码

from turtle import *

ht()

speed(0)

rt(90)

Gmov=False

# 15*15

def drawnet():

# too slow?

# use:

# tracer(False)

color('grey')

begin_fill()

penup()

goto(-210,-210)

pendown()

goto(-210,210)

goto(210,210)

goto(210,-210)

goto(-210,-210)

end_fill()

color('black')

for i in range(-210,211,30):

penup()

goto(i,-550)

pendown()

goto(i,550)

for i in range(-210,211,30):

penup()

goto(-550,i)

pendown()

goto(550,i)

t=True

m={}

P={}

for i in range(1,16):

for j in range(1,16):

for x in range(-240+30*i-15,-240+30*i+15):

for y in range(240-30*j-15,240-30*j+15):

P[(x,y)]=(i,j)

m[(i,j)]=0

tw=[(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)]

tot={}

def game_end(x,y):

global Gmov

for i in tw:

tot[i]=0

xn=x+i[0]

yn=y+i[1]

while (xn in range(1,16)) and (yn in range(1,16)) and m[(xn,yn)]==m[(x,y)]:

tot[i]=tot[i]+1

xn=xn+i[0]

yn=yn+i[1]

for i in range(4):

if tot[tw[i]]+tot[tw[7-i]]+1 >= 5:

begin_fill()

penup()

goto(-210,-210)

pendown()

goto(-210,210)

goto(210,210)

goto(210,-210)

goto(-210,-210)

end_fill()

print("game over")

Gmov=True

return

def draw(i,j):

x=-240+30*i

y=240-30*j

penup()

goto(x-5,y)

pendown()

begin_fill()

circle(5)

end_fill()

def play(x,y):

if(Gmov):

return

global t

t=not t

if (x,y) not in P:

t=not t

return

p=P[(x,y)]

if m[p]!=0:

t=not t

return

if t:

color('white')

draw(p[0],p[1])

m[p]=-1

else:

color('black')

draw(p[0],p[1])

m[p]=1

game_end(p[0],p[1])

def undo(x,y):

print("Sorry,not supported yet.")

setup(550,550)

drawnet()

onscreenclick(play,1,None)

onscreenclick(undo,3,None)

done()

python编写五子棋实现悔棋_五子棋 Python实现相关推荐

  1. python编写高质量代码_用 Python 编写干净、可测试、高质量的代码

    用 Python 编写干净.可测试.高质量的代码 Noah Gift 2010 年 12 月 20 日发布 简介 编写软件是人所承担的最复杂的任务之一.AWK 编程语言和 "K and R ...

  2. python编写spark程序 视频_【Python版pyspark】Spark大数据基础入门视频课程

    [注意:本课程只包含pyspark系列课程的基础入门部分] Python版本的pyspark是学习Python的人的福音,为广大的Python开发人员提供了一个使用Python调用Spark接口处理大 ...

  3. python编写赛车游戏单机版_使用Python中OrderedDict模拟一个简单的竞速游戏排名

    上一篇,我们梳理了Python中关于字典排序的一些常用方法(杂乱无章的数据结构如何进行排序,简明讲述Python字典排序那些事).其中,我们讲到了Python的collections模块中的Order ...

  4. python编写函数判断三角形_使用Python三角函数公式计算三角形的夹角案例

    题目内容: 对于三角形,三边长分别为a, b, c,给定a和b之间的夹角C,则有:.编写程序,使得输入三角形的边a, b, c,可求得夹角C(角度值). 输入格式: 三条边a.b.c的长度值,每个值占 ...

  5. python编写命令行框架_使用 Python 和 Click 编写命令行应用程序

    简评:python 构建命令行应用的第三方比较有名的包除了 click 之外还有一个叫 docopt,这是一个以文档先行为目标的包.个人是比较倾向于 Click 的,看了这篇文章之后,也很快写了一个 ...

  6. python编写一个投票计数器_用python编写计数器

    我正在用python为我的网页编写一个计数器.我的代码如下:#!/usr/bin/python print """#Content-type: text/html\r\n ...

  7. python编写add函数求和_为什么python不利用__iadd__来实现求和和链接运算符?

    我刚做了一个有趣的测试: ~$python3 # I also conducted this on python 2.7.6, with the same result Python 3.4.0 (d ...

  8. python编写程序解方程_用Python解方程

    我们先从简单的来 例题1: 这是北师大版小学六年级上册课本95页的一道解方程练习题: 大家可以先口算一下,这道题里面的x的值为200 接下来我们用python来实现,代码如下,每一句代码后面都写有解释 ...

  9. python编写小游戏教程_用Python开发 写个消消乐小游戏

    提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python 来做个简单的消消乐小游戏. 实现 消消乐的构成主要包括 ...

最新文章

  1. ImportError: cannot import name ‘DtypeArg‘ from ‘pandas
  2. MongoDB复制集(Replication Sets)介绍
  3. FPGAtestbench中如何产生差分时钟
  4. boost::mpl模块实现unique相关的测试程序
  5. 问题描述 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底
  6. 为知笔记:优秀国产知识管理软件的使用心得
  7. js 操作cookies 方法
  8. 实践 Ubuntu 10.10/11.04 关闭双显卡问题
  9. sql dbcc_SQL Server中的DBCC命令的概念和基础
  10. sqlserver 字符串中是不是全为数字
  11. MySQL 两个死锁样例
  12. ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)...
  13. Integer计算保留小数点位数
  14. 轻量android模拟器,夜神安卓模拟器6.2.0.0版:开启专业“特需”服务
  15. RCNN 的 Hard Negative Mining的原理
  16. Appium连接逍遥模拟器,解决Timing Out
  17. ES6-用Proxy和Reflect操作对象
  18. 开始下载全国哀悼活动网页颜色变黑灰代码 CSS
  19. 呼和浩特公交查询工具
  20. 一天一个设计模式---中介者模式

热门文章

  1. Latex爱斯维尔模板报错
  2. jquery.autocomplete 实现实时查询
  3. 前端开发微信公众号本地调试
  4. 视频号视频发布软件助手功能都有哪些?是什么软件?
  5. android u盘广播路径,android6.0 外部存储设备插拔广播以及获取路径(U盘)
  6. 可通过蓝牙,WiFi,4G实现录音数据上传的WT2605新型音频芯片在录音笔等产品的应用解析
  7. Softing edgePlug Docker容器产品连接西门子工业边缘
  8. 人生苦短,我用python——当我在玩python的时候我玩些什么
  9. Web前端学习仿拼多多软件——模拟练习
  10. 湾区创见·网络安全大会数据安全及隐私保护专场精彩内容回顾