背景
turtle — Turtle graphics 中提供了关于 模块的介绍。我想用 来生成些简单的图案,以巩固学习的效果。最近我经常下国际象棋,于是想到可以用 来绘制国际象棋的棋盘。
正文
基本的分析
国际象棋的棋盘长这样 ⬇️
为了降低难度,我们不关心以下内容
- 棋子
- 棋盘边上用于表示坐标的数字和字母
那么我们的目标就变为,绘制 个黑白相间的正方形格子(左上角的格子是白色的)。考虑到只有 个格子,我们可以遍历 行 列,绘制对应的格子(需要计算每个格子的颜色)。
代码
有了上述思路后,结合 turtle — Turtle graphics 中的文档,不难写出对应的 代码。
我写的版本如下(trae 提供了一些帮助)⬇️
import turtle
CELL_SIZE = 50
INIT_X = -200
INIT_Y = 200
ROW_CNT = 8
COL_CNT = 8
def calculate_color(r, c):
if (r + c) % 2 == 0:
return "white"
return "black"
def main():
turtle.title("chessboard")
turtle.bgcolor("lightgreen")
turtle.speed('fastest')
turtle.pensize(1)
for row in range(ROW_CNT):
for col in range(COL_CNT):
x = INIT_X + col * CELL_SIZE
y = INIT_Y - row * CELL_SIZE
turtle.teleport(x, y)
turtle.setheading(0)
color = calculate_color(row, col)
turtle.color(color)
turtle.fillcolor(color)
with turtle.fill():
for _ in range(4):
turtle.forward(CELL_SIZE - 1)
turtle.right(90)
turtle.hideturtle()
turtle.mainloop()
if __name__ == "__main__":
main()
请将以上代码保存为 draw_chessboard.py。执行以下命令可以运行 draw_chessboard.py
python3 draw_chessboard.py
运行中的效果如下图所示
最终的效果如下图所示
用 Pillow 来绘制国际象棋棋盘
我们也可以用 来绘制国际象棋棋盘,代码逻辑比较直观,就不多啰嗦了 ⬇️ ((trae 提供了一些帮助))
from PIL import Image
# ===================== 常量定义 =====================
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
PIXEL_CNT = 40
WIDTH = 8 * PIXEL_CNT
HEIGHT = 8 * PIXEL_CNT
def main():
img = Image.new('RGB', (WIDTH, HEIGHT))
pixels = img.load()
for x in range(WIDTH):
for y in range(HEIGHT):
row = x // PIXEL_CNT
col = y // PIXEL_CNT
if (row + col) % 2 == 0:
pixels[x, y] = WHITE
else:
pixels[x, y] = BLACK
img.show()
img.save('chessboard.png')
if __name__ == "__main__":
main()
请将以上代码保存为 draw_chessboard_v2.py。执行以下命令可以运行 draw_chessboard_v2.py
python3 draw_chessboard_v2.py
运行完 draw_chessboard_v2.py 之后,会在当前目录看到一个名为 的文件。示例效果如下图所示 ⬇️
参考资料
turtle— Turtle graphicsturtle--- 海龟绘图 (上一个链接的中文版)- Pillow 的 Tutorial