棋盘结构
相传我们的祖先轩辕黄帝无意之中画下了十七条横线十条竖线,这无意中的发明造就出了围棋。
围棋盘是方形的,由纵横各19条线组成。19╳19形成了361个交叉点。
围棋的棋子分为黑白两色,黑子181枚,白子180枚,黑白子加起来是361枚,恰好和棋盘的点数相同。
- 设置随机的棋盘背景色,RGB=(220,185,150)左右
- 循环画线,绘制19×19的网格。适当描点,增强辨识性
- 给棋盘行列添加适宜的编号,适当调整字体
- 署名、添加图标题
- 适当排版以美化
运行结果
完整代码
import random
import turtle
def rgbToHex(r, g, b):
return hex(r)[2:] + hex(g)[2:] + hex(b)[2:]
def chessboard(spacing, radius=5):
length = spacing * 18
t = turtle.Pen()
r, g, b = random.randint(210,230), random.randint(180,190), random.randint(140,160)
turtle.screensize(length*1.2, length*1.2, '#' + rgbToHex(r, g, b))
# turtle.Turtle().screen.delay(0)
# turtle.Turtle().ht()
turtle.ht()
t.ht()
t.speed(0)
# draw line
'''
# 蛇形绘制法
t.pu(), t.goto(-9*spacing, 9*spacing), t.pd()
t.seth(0)
for i in range(9):
t.fd(length), t.right(90), t.fd(spacing), t.right(90), t.fd(length), t.left(90), t.fd(spacing), t.left(90)
t.fd(length), t.left(90)
for i in range(9):
t.fd(length), t.left(90), t.fd(spacing), t.left(90), t.fd(length), t.right(90), t.fd(spacing), t.right(90)
t.fd(length)
'''
for i in range(19):
t.pu(), t.goto(-9*spacing, spacing*(9-i)), t.pd(), t.seth(0)
t.fd(length)
t.pu(), t.goto(spacing*(i-9), 9*spacing), t.pd(), t.seth(270)
t.fd(length)
# draw dot
t.pu(), t.goto(-6*spacing, 6*spacing), t.seth(0)
for i in range(3):
for j in range(3):
t.pd(), t.dot(radius), t.pu(), t.fd(6*spacing)
t.goto(-6*spacing, 6*spacing*(i-1)), t.seth(0)
# write title
t.pu(), t.goto(-60, 9.6*spacing), t.seth(0), t.pd()
t.write('Chess Borad', font=('Arial', 16))
# mark the serial number
for i in range(19):
t.pu(), t.goto(spacing*(i-9) - 5, 9*spacing), t.pd(), t.seth(0)
t.write(str(i+1), font=('Arial', 10))
t.pu(), t.goto(-9.7*spacing, (9-i)*spacing - 10), t.pd(), t.seth(0)
t.write(chr(i+65), font=('Georia', 10))
# signature
t.pu(), t.goto(4*spacing, -10*spacing), t.pd(), t.seth(0)
t.color('purple')
t.write('作者:往后余生', move=True, font=('楷体', 16))
turtle.done()
def main():
chessboard(30)
main()
绘制任务较多时,可调大绘制速度。
speed(0)即画笔无过渡动画,为画笔最大速度。screen.delay(0)即屏幕显示无过渡动画,零延迟。
绘制完后调用done()方法,turtle窗口便不会自动关闭