python编写五子棋实现悔棋_五子棋 Python实现
设计思路
使用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实现相关推荐
- python编写高质量代码_用 Python 编写干净、可测试、高质量的代码
用 Python 编写干净.可测试.高质量的代码 Noah Gift 2010 年 12 月 20 日发布 简介 编写软件是人所承担的最复杂的任务之一.AWK 编程语言和 "K and R ...
- python编写spark程序 视频_【Python版pyspark】Spark大数据基础入门视频课程
[注意:本课程只包含pyspark系列课程的基础入门部分] Python版本的pyspark是学习Python的人的福音,为广大的Python开发人员提供了一个使用Python调用Spark接口处理大 ...
- python编写赛车游戏单机版_使用Python中OrderedDict模拟一个简单的竞速游戏排名
上一篇,我们梳理了Python中关于字典排序的一些常用方法(杂乱无章的数据结构如何进行排序,简明讲述Python字典排序那些事).其中,我们讲到了Python的collections模块中的Order ...
- python编写函数判断三角形_使用Python三角函数公式计算三角形的夹角案例
题目内容: 对于三角形,三边长分别为a, b, c,给定a和b之间的夹角C,则有:.编写程序,使得输入三角形的边a, b, c,可求得夹角C(角度值). 输入格式: 三条边a.b.c的长度值,每个值占 ...
- python编写命令行框架_使用 Python 和 Click 编写命令行应用程序
简评:python 构建命令行应用的第三方比较有名的包除了 click 之外还有一个叫 docopt,这是一个以文档先行为目标的包.个人是比较倾向于 Click 的,看了这篇文章之后,也很快写了一个 ...
- python编写一个投票计数器_用python编写计数器
我正在用python为我的网页编写一个计数器.我的代码如下:#!/usr/bin/python print """#Content-type: text/html\r\n ...
- python编写add函数求和_为什么python不利用__iadd__来实现求和和链接运算符?
我刚做了一个有趣的测试: ~$python3 # I also conducted this on python 2.7.6, with the same result Python 3.4.0 (d ...
- python编写程序解方程_用Python解方程
我们先从简单的来 例题1: 这是北师大版小学六年级上册课本95页的一道解方程练习题: 大家可以先口算一下,这道题里面的x的值为200 接下来我们用python来实现,代码如下,每一句代码后面都写有解释 ...
- python编写小游戏教程_用Python开发 写个消消乐小游戏
提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python 来做个简单的消消乐小游戏. 实现 消消乐的构成主要包括 ...
最新文章
- ImportError: cannot import name ‘DtypeArg‘ from ‘pandas
- MongoDB复制集(Replication Sets)介绍
- FPGAtestbench中如何产生差分时钟
- boost::mpl模块实现unique相关的测试程序
- 问题描述 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底
- 为知笔记:优秀国产知识管理软件的使用心得
- js 操作cookies 方法
- 实践 Ubuntu 10.10/11.04 关闭双显卡问题
- sql dbcc_SQL Server中的DBCC命令的概念和基础
- sqlserver 字符串中是不是全为数字
- MySQL 两个死锁样例
- ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)...
- Integer计算保留小数点位数
- 轻量android模拟器,夜神安卓模拟器6.2.0.0版:开启专业“特需”服务
- RCNN 的 Hard Negative Mining的原理
- Appium连接逍遥模拟器,解决Timing Out
- ES6-用Proxy和Reflect操作对象
- 开始下载全国哀悼活动网页颜色变黑灰代码 CSS
- 呼和浩特公交查询工具
- 一天一个设计模式---中介者模式
热门文章
- Latex爱斯维尔模板报错
- jquery.autocomplete 实现实时查询
- 前端开发微信公众号本地调试
- 视频号视频发布软件助手功能都有哪些?是什么软件?
- android u盘广播路径,android6.0 外部存储设备插拔广播以及获取路径(U盘)
- 可通过蓝牙,WiFi,4G实现录音数据上传的WT2605新型音频芯片在录音笔等产品的应用解析
- Softing edgePlug Docker容器产品连接西门子工业边缘
- 人生苦短,我用python——当我在玩python的时候我玩些什么
- Web前端学习仿拼多多软件——模拟练习
- 湾区创见·网络安全大会数据安全及隐私保护专场精彩内容回顾