turtle实例3 围棋盘

棋盘结构

百科

相传我们的祖先轩辕黄帝无意之中画下了十七条横线十条竖线,这无意中的发明造就出了围棋。
围棋盘是方形的,由纵横各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窗口便不会自动关闭

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值