具体怎么实现呢,分享一下我的笨办法:
1、坐标问题这里为了我首先考虑以turtle默认的中心点作为棋盘的左上角分别向右向下画,但是左边和上边的空白就太浪费了,为了美观一点,我们把所有绘制过程整体平移,具体来说,都平移棋盘大小的一半,以实现居中效果。整个绘制过程,采用goto方法绝对定位。2、画棋盘线
1importturtleast2w,h=t.screensize()3print(w,h)4drawLine=t.Turtle()56#画横线7foriinrange(10):8drawLine.pu()9drawLine.goto(-,i*(-50)+)10drawLine.pd()11drawLine.fd(8*50)#画竖线14drawLine.right(90)15foriinrange(9):16drawLine.pu()17drawLine.goto(i*50-,)18drawLine.pd()19if0i8:20drawLine.fd(4*50)21drawLine.pu()22drawLine.fd(50)23drawLine.pd()24drawLine.fd(4*50)25else:26drawLine.fd(9*50)27#画斜线28defdrawBias(ang,x,y):29drawLine.seth(ang)30drawLine.pu()31drawLine.goto(x,y)32drawLine.pd()33drawLine.fd()drawBias(-45,-,)36drawBias(-,-,)37drawBias(-45,-,-7*50)38drawBias(-,-,-7*50)
这里的基本思想就是循环画线,注意坐标间隔为50,竖向该跳过的短线部分单独处理。
为实现图形居中,需要简单的计算:
棋盘高50*9=,要想上下居中,需要上抬。
棋盘宽50*8=,要想左右居中,需要左移。
画斜线部分,归纳成函数:
斜边长度一样,只需要赋予角度和起点。
具体长度为直角边为的三角形斜边,勾股可得。效果如下:
3、画圈写字1importturtleast2w,h=t.screensize()3drawLine=t.Turtle()#画线画笔4drawChess=t.Turtle()#画棋子画笔56#画线部分代码,同上,此处略去78#画棋子函数,注意字体颜色的区分,圆圈轮廓和填充同色9defputChess(word,x,y,j):10drawChess.color("#ccc")11drawChess.pu()12drawChess.goto(x,y)13drawChess.pd()14drawChess.fillcolor("#ccc")15drawChess.begin_fill()16drawChess.circle(16)17drawChess.end_fill()18ifj5:19drawChess.color("red")20else:21drawChess.color("green")22drawChess.write(word,align="center",23font=("Arial",20,"normal"))#写字函数,利用对称节省部分代码,j代表行序号26defdrawPart(words,j):27words+=words[::-1][1:]#翻转过来缀在后面凑一行28foriinrange(len(words)):29ifwords[i]!="":#有字才写30putChess(words[i],-+50*i,j*(-50)+-16,j)drawPart(["車","馬","象","仕","将"],0)33drawPart(["","炮","","",""],2)34drawPart(["卒","","卒","","卒"],3)drawPart(["車","馬","相","士","帥"],9)37drawPart(["","炮","","",""],7)38drawPart(["兵","","兵","","兵"],6)总的来说,虽然知识的实现工具是turtle,比较简单。但是承载的思维,还是有一点的:分层分步思想,代码优化策略,其实都是计算思维的体现。初中小学阶段,学生学会的turtle,在高中阶段作为思维的训练工具,还是不错的。除了本案例外,turtle还可用于让学生体验递归画树等其它思维案例。以上就是我写的极简版中国象棋棋盘,还没写“楚河汉界”,也没考虑其它细节,比如上面的文字倒置。感觉是最基本的实现,代码谈不上精简,还算能用。如果你来写的话,会有什么样的思维火花呢?会不会有更精简、高效的实现?欢迎各位交流指正。如果你觉得有用,可以点个在看↓预览时标签不可点收录于合集#个上一篇下一篇