单元 0 认识 MiniTurtle + 搭环境

第一次写下指令、看到图形,并把环境装好

项目海龟绘图

◎学完本节你会

本节是「会用」的入口(目标 L1):不碰任何 C++ 实现,只负责「写下指令 → 看到图形」。 后面单元 1~6 才带你亲手实现这台解释器。先把「玩」的感觉建立起来。

1海龟绘图:给一只「笔上的海龟」下命令

想象屏幕中间有一只海龟,它背着一支笔。你告诉它「前进」「右转」,它就走;它走过的路线就是画出来的线。

核心直觉:画图 = 移动 + 转向的组合。所有复杂图形,都是「走一步、转个角度、再走一步」循环出来的。

这可不是新点子——它源自 1967 年的Logo 语言,是无数人编程启蒙的第一课。 MiniTurtle 正是「用 C++ 从零写一台自己的海龟绘图语言」。

先看一个 6 条命令的「海龟动作表」(后面正文会逐个用):

fd 50 前进

向前走 50 步,画出线。

bk 30 后退

向后走 30 步,画线。

lt 90 左转

逆时针转 90°。

rt 90 右转

顺时针转 90°。

pu 抬笔

抬起笔,移动时不画线。

pd 落笔

放下笔,之后移动恢复画线。

转角度单位是度(0~360),不是弧度——rt 90 就是向右转一个直角。

2第一行命令:画一条线

MiniTurtle 的程序后缀是 .mt。一个最简单的程序就一行——让海龟前进 50 步:

fd 50

运行它,海龟从起点向前爬 50 格,屏幕(字符画布)上出现一条线。就这么简单——你已经「写代码画图」了。

想画一个正方形呢?口诀:走一步、转 90°、重复 4 次。把命令一行行写出来:

fd 24 rt 90 fd 24 rt 90 fd 24 rt 90 fd 24 rt 90
注意:每次 rt 90 后方向改变,所以 4 条边虽然命令相同,却画出了闭合的正方形。海龟回到出发点、方向也回到原样。

3repeat:把重复的命令打包

上面 8 行里,「fd 24 + rt 90」重复了 4 次。用 repeat 让海龟替你重复:

repeat 4 { fd 24 rt 90 }
语法:repeat 次数 { 要重复的命令 }——次数写中间,命令用花括号 { } 包起来。这一段会被执行「次数」遍。

想画正六边形?角度有规律:正 n 边形的外角 = 360 / n。六边形每次转 360/6=60°:

repeat 6 { fd 24 rt 60 }
为什么会闭合?每次转 60°、共 6 次 → 总共转了 360° → 方向回到起点,边数 × 每边角度 = 360,正好闭合。 记住这条「总转角 = 360°」的规律,后面画正多边形全靠它。

4把程序存成 .mt 源文件,然后运行

真正「写程序」不是一条条敲进黑窗口,而是把代码存成一个文件。用记事本/VS Code 新建 star.mt,写:

# 我的第一个 MiniTurtle 程序:画一个五角星 repeat 5 { fd 22 rt 144 }

注意到 # 开头的行是注释——给人看的说明,程序会跳过它。下面是「编译 → 运行」的完整流程:

① 装好 g++ 编译器→ ② 编译解释器 minturtle→ ③ 用 minturtle 运行 star.mt→ ④ 屏幕画出五角星
# ① 在项目根目录(装有全部源码的地方)编译解释器 g++ -std=c++17 main.cpp lexer.cpp parser.cpp interpreter.cpp turtle.cpp canvas.cpp -o minturtle # ② 运行 .mt 源文件,指定输出画布大小 ./minturtle star.mt
装环境是本节唯一可能卡住的地方:Windows 需要先装 MSYS2 / MinGW-w64 把 g++ 装进 PATH。 一步步照着《MiniTurtle 项目验证报告》来,里面每个命令都是实测过的。
这条流水线就是本项目的灵魂:.mt 源文件 → 解释器 → 字符画布。 后面所有单元都是在「让这台解释器更聪明」。先跑通它,就有了后面一切的地基。

5动手:跑通四个示例,再自己画五角星

MiniTurtle 工程自带了几个示例。建议按下面的顺序亲手过一遍,每跑通一个,对「命令→图形」的直觉就强一分:

示例 1 正方形:

repeat 4 { fd 24 rt 90 }

示例 2 正六边形:

repeat 6 { fd 24 rt 60 }

示例 3 五角星:

repeat 5 { fd 22 rt 144 }

(五角星每次转 144°,5 次共转 720°——两整圈,正好画出一个星。)

* * * ***** * * * * * * * * * * * * * * * * * *********

(字符画布是 MiniTurtle 的「显示器」——像素是字符,一样能画出图形。上面的星是示意,真实输出以终端为准。)

你的第一个小改造:把 repeat 5 改成 repeat 7、把 144 改成别的角度,重编译重跑,看图形怎么变。 「改参数 → 看变化」就是编程最初的乐趣,也是理解「代码控制图形」最快的方式。

!易错点清单(新手最爱踩)

① 命令名与数字之间漏空格:fd50 会被当成一个「标识符」而不是「前进 50」。 MiniTurtle 靠空格切分命令,务必写成 fd 50。
② 角度不闭合:画正 n 边形时把 rt 360/n 记错成 90°,图形就转不回起点。 牢记「总转角 = 360°」。
③ 把 # 注释当成会被执行的代码:注释是给人看的,程序完全跳过。# 你好 不会画任何东西。
④ 忘了先编译:直接运行 minturtle star.mt,但解释器还没编译出来(没有 minturtle 这个文件)→ 报「找不到文件」。 顺序是先 g++ ... -o minturtle,再 ./minturtle star.mt。

✎练习题

Q1. 想画一个正方形(4 条边),命令 repeat 4 { fd 24 rt __ } 里每次该转多少度?
B。正方形外角 = 360/4 = 90°。总转角(4×90=360°)正好一圈,图形闭合。
Q2. 下面哪一行会被 MiniTurtle 直接跳过(不产生任何图形)?
A。# 开头是注释,纯给人看的说明,解释器跳过,不画任何东西。
Q3. 命令 pu(抬笔)之后移动海龟,会怎样?
C。pu = pen up 抬笔:海龟照常移动,但路线不落墨。pd 落笔后恢复画线。

◎跨学科小贴士:图形 = 移动 + 转角的「算法语言」

「重复同样的移动+转向,就能拼出复杂图形」——这背后是算法思想:用简单规则反复执行,涌现出复杂结果。

想想几何:正 n 边形的内角公式 (n-2)×180/n 和海龟的「外角 360/n」是同一个几何事实的两面——你其实在用程序重新发现几何。

再想想音乐:一段旋律 = 有限几个音符按规则重复、变奏,拼出整首曲子。程序画图、音乐作曲、甚至自然界里蜂巢的六边形,都是「简单单元 × 规则重复」的产物。

更妙的是,「一小段指令反复调用」正是后面单元 5 递归分形的思想雏形——现在你只是手动 repeat,后面会让程序自己调用自己。