具體怎麼實現呢,分享一下我的笨辦法:
2、畫棋盤線
1import turtle as t
2w,h=t.screensize()
3print(w,h)
4drawLine=t.Turtle()
5
6#畫橫線
7for i in range(10):
8 drawLine.pu()
9 drawLine.goto(-200,i*(-50)+225)
10 drawLine.pd()
11 drawLine.fd(8*50)
12
13#畫豎線
14drawLine.right(90)
15for i in range(9):
16 drawLine.pu()
17 drawLine.goto(i*50-200,225)
18 drawLine.pd()
19 if 0<i<8:
20 drawLine.fd(4*50)
21 drawLine.pu()
22 drawLine.fd(50)
23 drawLine.pd()
24 drawLine.fd(4*50)
25 else:
26 drawLine.fd(9*50)
27#畫斜線
28def drawBias(ang,x,y):
29 drawLine.seth(ang)
30 drawLine.pu()
31 drawLine.goto(x,y)
32 drawLine.pd()
33 drawLine.fd(142)
34
35drawBias(-45,150-200,225)
36drawBias(-135,250-200,225)
37drawBias(-45,150-200,225-7*50)
38drawBias(-135,250-200,225-7*50)
這裡的基本思想就是循環畫線,注意坐標間隔為50,豎向該跳過的短線部分單獨處理。
為實現圖形居中,需要簡單的計算:
棋盤高50*9=450,要想上下居中,需要上抬225。
棋盤寬50*8=400,要想左右居中,需要左移200。
畫斜線部分,歸納成函數:
斜邊長度一樣,只需要賦予角度和起點。
效果如下:
1import turtle as t
2w,h=t.screensize()
3drawLine=t.Turtle()#畫線畫筆
4drawChess=t.Turtle()#畫棋子畫筆
5
6#畫線部分代碼,同上,此處略去
7
8#畫棋子函數,注意字體顏色的區分,圓圈輪廓和填充同色
9def putChess(word,x,y,j):
10 drawChess.color("#ccc")
11 drawChess.pu()
12 drawChess.goto(x,y)
13 drawChess.pd()
14 drawChess.fillcolor("#ccc")
15 drawChess.begin_fill()
16 drawChess.circle(16)
17 drawChess.end_fill()
18 if j>5:
19 drawChess.color("red")
20 else:
21 drawChess.color("green")
22 drawChess.write(word, align="center",
23 font=("Arial", 20, "normal"))
24
25#寫字函數,利用對稱節省部分代碼,j代表行序號
26def drawPart(words,j):
27 words+=words[::-1][1:]#翻轉過來綴在後面湊一行
28 for i in range(len(words)):
29 if words[i]!="":#有字才寫
30 putChess(words[i],-200+50*i,j*(-50)+225-16,j)
31
32drawPart(["車","馬","象","仕","將"],0)
33drawPart(["","炮","","",""],2)
34drawPart(["卒","","卒","","卒"],3)
35
36drawPart(["車","馬","相","士","帥"],9)
37drawPart(["","炮","","",""],7)
38drawPart(["兵","","兵","","兵"],6)