当前位置: 首页 > 后端技术 > Python

Python制作国粹-象棋

时间:2023-03-26 13:31:43 Python

第一步:导入资源包这次我们使用海龟importturtle1第二步:初始化在初始化过程中,首先获取海龟的笔,然后设置大小,标题和窗口的背景。#初始化pen=turtle.Pen()#获取乌龟的笔turtle.setup(714,800)#设置窗口大小turtle.title("ChineseChess")#设置窗口标题turtle.bgcolor("#F4C79E")#设置窗口背景pen.hideturtle()turtle.tracer(False)第三步:定义棋子名称和坐标),每个棋子都有对应的坐标。仅供参考,如有问题,可自行设置相应坐标。array=[#一个棋子{"text":"car","role":"A","pix":(-330,369)},{"text":"horse","role":"A","pix":(-247.0,369.0)},{"text":"大象","role":"A","pix":(-166.0,369.0)},{"text":"Shi","role":"A","pix":(-86.0,368.0)},{"text":"will","role":"A","pix":(-5.0,369.0)},{"text":"Shi","role":"A","pix":(79.0,368.0)},{"text":"Xiang","role":"A","pix":(159.0,368.0)},{"text":"Horse","role":"A","pix":(239.0,367.0)},{"text":"Car","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":"Cannon","role":"A","pix":(-248.0,209.0)},{"text":"Cannon","role":"A","pix":(239.0,208.0)},#B方块{"text":"car","role":"B","pix":(-330.0,-359.0)},{"text":"horse","role":"B","pix":(-247.0,-359.0)},{"text":"phase","role":"B","pix":(-166.0,-359.0)},{"text":"Shi","role":"B","pix":(-86.0,-359.0)},{"text":"帅哥","role":"B","pix":(-5.0,-359.0)},{"text":"Shi","role":"B","pix":(79.0,-359.0)},{"text":"Phase","role":"B","pix":(159.0,-359.0)},{"text":"horse","role":"B","pix":(239.0,-359.0)},{"text":"car","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":"Cannon","role":"B","pix":(-248.0,-199.0)},{"text":"Cannon","role":"B","pix":(239.0,-199.0)},]第四步:绘制棋盘如下,棋盘由格子组成,中间有一个“楚河-汉街”外汇经纪商比https://www.fx61.com/brokerlist#绘制棋盘函数defdraw():#绘制网格边框pen.penup()pen.setposition(-360,402)pen.pendown()pen.color("#6E3F25")pen.width(30)forxinrange(1,5):ifx%2!=0:pen.forward(710)else:pen.forward(795)pen.right(90)#绘制网格式pen.penup()pen.setposition(-330,370)pen.width(2)pen.pendown()forxinrange(9):pen.forward(650)pen.backward(650)pen.right(90)pen.forward(81)pen.left(90)pen.forward(650)pen.left(90)forxinrange(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")笔。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=("BaoliTC",50,"bold"))pen.penup()pen.forward(450)pen.write("汉界",align="center"",font=("BaoliTC",50,"bold"))pen.penup()forxin[[-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")forxinrange(4):pen.forward(114)pen.backward(114)pen.left(90)forxinarray:ifx[“角色”]==“A”:国际象棋(x[“文本”],x[“pix”],“#A46A0C”,“#2F1500”)else:国际象棋(x[“文本”],x["pix"],"#E69772","#AB2A0E")turtle.update()#刷新图片Step5:如下图定义drop函数,每次我们点击一??个棋子并放下它,background会显示被点击的棋子状态和是否移动#chessfunctiondefchess(text,pix,bgcolor,textcolor):"""text:国际象棋显示textpix:国际象棋坐标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()笔。setheading(270)pen.forward(25)pen.color(textcolor)pen.write(text,align="center",font=("BaoliTC",40,"bold"))第六步:鼠标点击事件时我们点击一??个棋子,会触发相应的时间,如上图所示,比如当我们点击“棋子”时,会显示我们点击了棋子的哪一面,棋子的坐标是什么.defclick(x,y):globalpriChessifpriChess=={}:forzinarray:ifabs(z["pix"][0]-x)<=35andabs(z["pix"][1]-y)<=35:print("发现目标:",z)priChess=zpen.penup()pen.setposition(z["pix"])pen.color("white")pen.penup()pen.setheading(270)pen.forward(25)pen.write(z["text"],align="center",font=("BaoliTC",40,"bold"))breakelse:print("落子")priChess["pix"]=(x,y)array.append(priChess)priChess={}pen.??reset()draw()