新手上路/超详细!!
开始绘制
上半部分的棋盘
下半部分的棋盘
画出棋盘边框
画出帅府和将营
绘制兵炮标记
运用函数来绘制
绘制棋子
运用函数来绘制
写“楚河汉界”
源代码
import turtle as t #引用turtle库
t.speed(1) #最快画笔速度
width=50 #设置正方形边长
x=-4width #原始位置为(0,0),为了使棋盘居 中,调整x和y的值
y=5width
a=0 #记录行数
t.penup() #提起画笔
t.goto(x,y) #移动位置
t.pendown() #放下画笔
for z in range(4): #画出4行正方形
for j in range(8): #画出一行8个正方形
for i in range(2): #画出1个正方形
t.forward((1+j)width)
t.left(90)
t.backward(width) #往当前方向的反方向移动
t.left(90)
t.penup()
t.goto(x,y-width(z+1)) #移动到下一行
t.pendown()
a=a+1 #记录已经画了几行
a=a+1 #加上“楚河汉界”的那一行
t.penup()
t.goto(x,y-width*(a)) #移动到下半区域画棋盘
t.pendown()
for z in range(4): #与上文同理
for j in range(8):
for i in range(2):
t.forward((1+j)width)
t.left(90)
t.backward(width)
t.left(90)
t.penup()
t.goto(x,y-width(z+a+1))
t.pendown()
t.penup()
t.goto(x-width2/5,y+width2/5) #移动到边框的起点
t.pendown()
for i in range(2): #画出边框
t.forward(8width+4/5width)
t.left(90)
t.backward(9width+4/5width)
t.left(90)
t.penup()
t.goto(x+3width,y) #绘制帅府和将营,即两条斜线。移动到起点
t.right(45) #斜线的夹角
t.pendown()
t.forward(2width*(20.5)) #斜线的长度,“xn”的意义为x的n次幂
t.penup() #同理
t.goto(x+3width,y-width7)
t.pendown()
t.forward(2width(2**0.5))
t.penup() #同理
t.goto(x+3width,y-2width)
t.left(90)
t.pendown()
t.forward(2width(2**0.5))
t.penup() #同理
t.goto(x+3width,y-width9)
t.pendown()
t.forward(2width(2**0.5))
t.right(45) #将画笔转回水平方向
def draw(x,y): #绘制兵炮标记的函数
t.penup()
t.goto(x-9,y+3) #令画笔回到初始设定的位置
for i in range(4):
t.pendown()
t.forward(6)
t.left(90)
t.forward(6)
t.right(90)
t.penup()
t.forward(6)
t.pendown()
t.right(90)
t.penup()
draw(x+width,y-2width) #传入要画标记的位置坐标
draw(x+7width,y-2width) #画出上半部分棋盘的标记
draw(x,y-3width)
draw(x+2width,y-3width)
draw(x+4width,y-3width)
draw(x+6width,y-3width)
draw(x+8width,y-3width)
draw(x+width,y-7width) #画出下半部分棋盘的标记
draw(x+7width,y-7width)
draw(x,y-6width)
draw(x+2width,y-6width)
draw(x+4width,y-6width)
draw(x+6width,y-6width)
draw(x+8width,y-6width)
def drawCircle(x,y,w,radius): #绘制棋子的函数,传入棋子的坐标,文字,半径
t.penup()
t.goto(x,y-2/5width)
t.pendown()
t.pensize(3) #调整画笔大小
t.begin_fill() #准备开始填充
t.fillcolor(‘white’)
t.circle(radius)
t.penup()
t.goto(x-3/10width,y-3/10*width) #调整画笔位置,使文字居中
t.pendown()
t.write(w,font=(‘隶书’,27,‘normal’))
t.end_fill() #结束填充
drawCircle(-4width,5width,“车”,20) #传入数据,画出上半部分棋盘的棋子
drawCircle(-3width,5width,“马”,20)
drawCircle(-2width,5width,“象”,20)
drawCircle(-1width,5width,“士”,20)
drawCircle(0width,5width,“将”,20)
drawCircle(1width,5width,“士”,20)
drawCircle(2width,5width,“象”,20)
drawCircle(3width,5width,“马”,20)
drawCircle(4width,5width,“车”,20)
drawCircle(-4width,-4width,“车”,20) #传入数据,画出下半部分棋盘的棋子
drawCircle(-3width,-4width,“马”,20)
drawCircle(-2width,-4width,“象”,20)
drawCircle(-1width,-4width,“士”,20)
drawCircle(0width,-4width,“将”,20)
drawCircle(1width,-4width,“士”,20)
drawCircle(2width,-4width,“象”,20)
drawCircle(3width,-4width,“马”,20)
drawCircle(4width,-4width,“车”,20)
drawCircle(-4width,2width,“卒”,20) #传入数据,画出上半部分棋盘的棋子
drawCircle(-3width,3width,“炮”,20)
drawCircle(-2width,2width,“卒”,20)
drawCircle(0width,2width,“卒”,20)
drawCircle(2width,2width,“卒”,20)
drawCircle(3width,3width,“炮”,20)
drawCircle(4width,2width,“卒”,20)
drawCircle(-4width,-1width,“兵”,20) #传入数据,画出下半部分棋盘的棋子
drawCircle(-3width,-2width,“砲”,20)
drawCircle(-2width,-1width,“兵”,20)
drawCircle(0width,-1width,“兵”,20)
drawCircle(2width,-1width,“兵”,20)
drawCircle(3width,-2width,“砲”,20)
drawCircle(4width,-1width,“兵”,20)
t.penup()
t.goto(x+1.7width,y0*width) #移动到棋盘分界线处
t.pendown()
t.write(‘楚’,font=(‘隶书’,27,‘normal’))
t.penup()
t.goto(x+3width,y0*width)
t.pendown()
t.write(‘河’,font=(‘隶书’,27,‘normal’))
t.penup()
t.goto(x+4.3width,y0*width)
t.pendown()
t.write(‘汉’,font=(‘隶书’,27,‘normal’))
t.penup()
t.goto(x+5.6width,y0*width)
t.pendown()
t.write(‘界’,font=(‘隶书’,27,‘normal’))
t.done()