程序员大佬教你如何用python制作中国象棋!一看就会
中国象棋想必大家都玩过,突发奇想,想着怎么用python把中国国粹的中国象棋做出来呢??????
首先老样子看看用python做出来的效果:
国粹——中国象棋
第一步:导入资源包
第二步:初始化
第三步:定义棋子名称与坐标
第四步:绘制棋盘
第五步:定义落子函数
第六步:鼠标点击事件
第一步:导入资源包
这次利用到的还是海龟turtle
import turtle 复制代码
第二步:初始化
初始化过程中首先获得海龟的钢笔,接着设置窗口的大小、标题和背景。
# 初始化 pen = turtle.Pen()# 获取海龟的画笔
turtle.setup(714,800)# 设置窗口的大小
turtle.title("中国象棋")# 设置窗口的标题
turtle.bgcolor("#F4C79E")# 设置窗口的背景
pen.hideturtle() turtle.tracer(False)
复制代码
第三步:定义棋子名称与坐标
中国象棋中由車、馬、相(象)、士(仕)、炮、卒、将、帥(帅)组成,各个棋子有相应的坐标。这个可供参考,如果有问题可以自行设置相应的坐标。
array = [ # A方棋子 { "text": "車", "role": "A", "pix": (-330, 369) }, { "text": "馬", "role": "A", "pix": (-247.0, 369.0) }, { "text": "象", "role": "A", "pix": (-166.0, 369.0) }, { "text": "士", "role": "A", "pix": (-86.0, 368.0) }, { "text": "将", "role": "A", "pix": (-5.0, 369.0) }, { "text": "士", "role": "A", "pix": (79.0, 368.0) }, { "text": "象", "role": "A", "pix": (159.0, 368.0) }, { "text": "馬", "role": "A", "pix": (239.0, 367.0) }, { "text": "車", "role": "A", "pix": (318.0, 369.0) }, { "text": "卒", "role": "A", "pix": (-329.0, 126.0) }, { "text": "卒", "role": "A", "pix": (-167.0, 126.0) }, { "text": "卒", "role": "A", "pix": (-6.0, 126.0) }, { "text": "卒", "role": "A", "pix": (156.0, 126.0) }, { "text": "卒", "role": "A", "pix": (319.0, 126.0) }, { "text": "炮", "role": "A", "pix": (-248.0, 209.0) }, { "text": "炮", "role": "A", "pix": (239.0, 208.0) }, # B方棋子 { "text": "車", "role": "B", "pix": (-330.0, -359.0) }, { "text": "馬", "role": "B", "pix": (-247.0, -359.0) }, { "text": "相", "role": "B", "pix": (-166.0, -359.0) }, { "text": "仕", "role": "B", "pix": (-86.0, -359.0) }, { "text": "帥", "role": "B", "pix": (-5.0, -359.0) }, { "text": "仕", "role": "B", "pix": (79.0, -359.0) }, { "text": "相", "role": "B", "pix": (159.0, -359.0) }, { "text": "馬", "role": "B", "pix": (239.0, -359.0) }, { "text": "車", "role": "B", "pix": (318.0, -359.0) }, { "text": "卒", "role": "B", "pix": (-329.0, -126.0) }, { "text": "卒", "role": "B", "pix": (-167.0, -126.0) }, { "text": "卒", "role": "B", "pix": (-6.0, -126.0) }, { "text": "卒", "role": "B", "pix": (156.0, -117.0) }, { "text": "卒", "role": "B", "pix": (319.0, -117.0) }, { "text": "炮", "role": "B", "pix": (-248.0, -199.0) }, { "text": "炮", "role": "B", "pix": (239.0, -199.0) }, ] 复制代码
第四步:绘制棋盘
如下图,棋盘是由网格组成,中间有一个“楚河——漢界”。
# 绘制棋盘函数 def draw(): # 绘制网格边框 pen.penup() pen.setposition(-360, 402) pen.pendown() pen.color("#6E3F25") pen.width(30) for x in range(1,5): if x % 2 != 0: pen.forward(710) else: pen.forward(795) pen.right(90) # 绘制网格 pen.penup() pen.setposition(-330, 370) pen.width(2) pen.pendown() for x in range(9): pen.forward(650) pen.backward(650) pen.right(90) pen.forward(81) pen.left(90) pen.forward(650) pen.left(90) for x in range(8): pen.forward(730) pen.backward(730) pen.left(90) pen.forward(81) pen.right(90) pen.penup() pen.setposition(-280, 6) pen.pendown() pen.pencolor("#F4C79E") pen.right(90) pen.width(79) pen.forward(550) pen.width(1) pen.penup() pen.setposition(-230, -25) pen.color("#6E3F25") pen.write("楚河", align="center", font=("Baoli TC", 50, "bold")) pen.penup() pen.forward(450) pen.write("漢界", align="center", font=("Baoli TC", 50, "bold")) pen.penup() for x in [[-3.0, 290.0], [-4.0, -278.0]]: pen.up() pen.setposition(x) pen.down() pen.setheading(45) pen.pendown() pen.width(2) pen.color("#5E3F25") for x in range(4): pen.forward(114) pen.backward(114) pen.left(90) for x in array: if x["role"] == "A": chess(x["text"], x["pix"], "#A46A0C", "#2F1500") else: chess(x["text"], x["pix"], "#E69772", "#AB2A0E") turtle.update()# 刷新图像 复制代码
第五步:定义落子函数
如下图,我们每一次点击棋子并落下过程中,后台会显示我们点击棋子的状态和是否落子。
# 落子函数 def chess(text, pix, bgcolor, textcolor): """ text: 落子显示文本 pix: 落子坐标 bgcolor: 背景颜色 textcolor:落子颜色 """ pen.penup() pen.setposition(pix) pen.pendown() pen.color("#6E3F25") pen.dot(70) pen.color(bgcolor) pen.dot(55) pen.color("white") pen.penup() pen.setheading(270) pen.forward(25) pen.color(textcolor) pen.write(text, align="center", font=("Baoli TC", 40, "bold")) 复制代码
落子情况:
第六步:鼠标点击事件
当我们点击棋子时会触发相应的时间,如上图所示,比如当我们点击“卒”时,它会显示我们点击的是哪一方的棋子,棋子的坐标是什么。
def click(x, y): global priChess if priChess == {}: for z in array: if abs(z["pix"][0] - x) <= 35 and abs(z["pix"][1] - y) <= 35: print("发现目标:", z) priChess = z pen.penup() pen.setposition(z["pix"]) pen.color("white") pen.penup() pen.setheading(270) pen.forward(25) pen.write(z["text"], align="center", font=("Baoli TC", 40, "bold")) break else: print("落子") priChess["pix"] = (x, y) array.append(priChess) priChess = {} pen.reset() draw()
本文章素材来源于网络,如有侵权请联系删除。
程序员大佬教你如何用python制作中国象棋!一看就会相关推荐
- 怎么用python制作简单的程序-神级程序员教你如何用python制作一个牛逼的外挂!...
玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就来看一下如何用python来制作一个外挂.... 我打开了4399小游 ...
- 【程序员股民系列】如何用python, pandas, numpy, matplotlib绘制每日个股成交额图
上次分享了一段代码用于绘制每日行业交易额的图: [程序员股民系列]如何用python, pandas, numpy, matplotlib绘制每日行业成交额图 分析粒度略粗,只到行业这一层,把代码稍微 ...
- 手把手教你如何用Python制作一个电子相册?末附python教程
这里简单介绍一下python制作电子相册的过程,主要用到tkinter和pillow这2个库,tkinter用于窗口显示照片,pillow用来处理照片,照片切换分为2种方式,一种是自动切换(每隔5秒) ...
- 教你如何用python制作平面直角坐标系模拟器 python项目小发明 【安安教具】-【数学】-【平面直角坐标系】模拟器
平面直角坐标系和之前的数轴模拟器有异曲同工之妙,但是作为一个二维的软件,肯定是要难一些的... [安安教具]-[数学]-[数轴]模拟器 教你如何用python制作数轴模拟器 python 小项目创作_ ...
- 教你如何用python制作黑板模拟器 python 项目小发明 【安安教具】-【工具】-【黑板】模拟器
黑板模拟器是一个多线程控制尝试,需要做到通过tkinter实现对鼠标的控制和监督.鼠标在移动时会有一个线程来检测鼠标的位置,计算窗口的位置,计算出鼠标在窗口中的位置,结合canvas画布实现对黑板的涂 ...
- 教你如何用python制作三角形模拟器 python项目小发明 【安安教具】-【数学】-【三角形】模拟器
三角形的三个点互相连接组成了一个平面图形,我们如何用python制作一个可以展示各种三角形的软件呢? 我们先看看效果: 这个东西要如何使用呢?我们看一下视频: 三角形模拟器 可以看到,控制三角形的三个 ...
- python数据可视化第三方库有哪些_数据可视化!看看程序员大佬都推荐的几大Python库...
数据可视化是数据分析中极为重要的部分,而数据可视化图表(如条形图,散点图,折线图,地理图等)也是非常关键的一环.Python作为数据分析中最流行的编程语言之一,有几个库可以创建精美而复杂的数据可视化, ...
- 【程序员股民系列】如何用python, pandas, numpy, matplotlib绘制每日行业成交额图
最近这两天股民基友们可能很多亏得底裤都没了,该说点什么呢,心态放平吧: 想长期混迹股市,还是要选基本面好的行业和个股,也要关注一些近期行业动态.当然这里面有很多维度和技巧,掌握得越多,驾驭股市的功力就 ...
- python程序员专用壁纸_数据可视化!看看程序员大佬都推荐的几大Python库
数据可视化是数据分析中极为重要的部分,而数据可视化图表(如条形图,散点图,折线图,地理图等)也是非常关键的一环.Python作为数据分析中最流行的编程语言之一,有几个库可以创建精美而复杂的数据可视化, ...
最新文章
- Imagenet VGG-19网络加载和特征可视化
- 基于黄金分割的修正Powell算法
- [Python人工智能] 二十九.什么是生成对抗网络GAN?基础原理和代码普及(1)
- match_phrase搜不出来,怎么办?
- Jenkins修改管理员密码.
- mysql 插入中文 ERROR 1366 (HY000): Incorrect string value: '\xE7\x8E\x9E\x97' for column
- 程序从高版本降到2.0,数据集报错 TypedTableBase
- Android自定义视频播放器
- hashmap的底层
- VS2017社区版离线下载
- 英读廊——为什么打印机不使用RGB颜色体系而是CMYK体系
- qt 在ubuntu下的下载安装及测试
- 电脑qq传到我的android文件在哪里,怎么找到已经发送到手机微信和QQ上的资料保存文件夹(安卓)...
- 金庸武侠十大外功排行
- 事务前沿研究 | 隔离级别的追溯与究明,带你读懂 TiDB 的隔离级别(上篇)
- opengl开发环境搭建
- 7个免费小巧的软件,让你的电脑更好用
- Scilab常用的命令。
- Social Network之缘分
- java计算机毕业设计基于springboot+vue+elementUI的旅游网站(源码+数据库+Lw文档)
热门文章
- Android 动画基础知识学习(下)
- 前端开发:Vue组件中的冒号用法
- cadence Virtuoso ADE原理图库中的VCVS(压控电压源)使用
- 虚拟机安装教程win10_虚拟机安装实战教程
- docker容器下载vim
- 0x0000007B:A problem has been detected and windows has been shut down to prevent damage to your Comp
- 开篇“给自己定一个目标,明年7月去实现。希望不是一时的兴起。”
- 微信小程序参数传递获取当前页面的url和参数
- 软考笔记——第七章--数据结构
- c语言程序设计试题1253,2017年1月试卷号1253C语言程序设计A.pdf