今天写一个简单点的教程,画一个字符矩阵,成品图如下:
想要打印这样一个字符矩阵,需要具备如下一些基本知识:
- turtle如何画字符?
- turtle的画布上如何排版?
如何画字符?
turtle提供了一个函数,write,可以画文本,具体参数可以参考手册:
turtle.write(arg, move=False, align="left", font=("Arial", 8, "normal")) Write text - the string representation of arg - at the current turtle position according to align (“left”, “center” or “right”) and with the given font. If move is true, the pen is moved to the bottom-right corner of the text. By default, move is False.
字符的Unicode码可以在这个网站上查到:
https://unicode-table.com/
比如,“安”字的unicode码是5B89。
在python中,可以通过ord函数得到一个字符串的unicode码:
代码语言:javascript复制>>> x=u'安'
>>> x
'安'
>>> hex(ord(x))
'0x5b89'
通过write函数写一个“安”字,楷体,300p:
代码语言:javascript复制turtle.write(u'安', align="center", font=("simkai", 300, "normal"))
画布上如何排版?
又得用点数学知识了。
假设我们画COUNT*COUNT的矩阵,每个字符间距为DIST,为了保证矩阵居中绘制,起始位置必须在左上角位置:
代码语言:javascript复制STARTX=-DIST*COUNT//2
STARTY=DIST*COUNT//2
当遍历整个COUNT*COUNT时,我们可以通过求商和取余得到行列值,确定每个字符的位置。
这样就可以很简单的推导出源码了:
代码语言:javascript复制# coding: utf-8
import turtle
import math
import time
turtle.setup(width=1.0, height=1.0, startx=None, starty=None)
#turtle.tracer(0)
turtle.ht()
turtle.up()
COUNT=19
DIST=30
FONTSIZE=16
STARTX=-DIST*COUNT//2
STARTY=DIST*COUNT//2
time.sleep(6)
turtle.goto(STARTX, STARTY)
for c in range(COUNT*COUNT):
x = c%COUNT
y = c//COUNT
turtle.goto(STARTX DIST*x, STARTY-DIST*y)
turtle.write(chr(0x2600 c), align="center", font=("Arial", FONTSIZE, "normal"))