AI脑洞板
完整教案
自学课件
第 6 课 · 共 35 课

屏幕上的第一个点

你好呀,我是吴老师。

上一课我们点亮了板子上那颗小灯。它很小,但它能亮任何颜色。

今天我们要去看那块大的 —— 屏幕。

在你能在屏幕上画出小球、画出房子、画出游戏之前,有一件事得先弄明白:

这块屏幕,到底是由什么做成的?

答案可能和你以为的不一样。

读完之后,你应该能:说出屏幕是由多少个"小格子"拼成的;用坐标说出"我要画在这儿";用 screen.pixel 点亮任意一个格子;用两层循环铺出一片点阵;解释为什么 x 最大是 239 而不是 240。

用时:约 50 分钟。准备:板子、数据线。

看不懂的地方,整段复制给 AI,加一句"请一次只解释一个概念,讲完问我一个小问题"。


一、屏幕不是一整块布

先做个想象:你要在墙上贴一面马赛克。

如果你有一整块大画布,你会怎么画?随便涂。

但屏幕不是这样的。屏幕更像马赛克 —— 它是由一小格一小格拼起来的。

屏幕是一格一格拼起来的

  • 横着数,240 格
  • 竖着数,320 格
  • 一共 76,800 格

💡 76,800 是多少? 差不多是一本厚书里的字数。 而这块屏幕,每一格都能单独亮成不同的颜色。

最小的一格,叫一个"像素"。

它小到你几乎看不见 —— 你要凑很近很近才分得出来。 接下来你就会亲眼看到这件事。

二、坐标:怎么说出"画在这儿"

格子有 76,800 个,那你怎么告诉板子"我要画在哪一个"?

用两个数,我们叫它坐标。

坐标怎么数

规矩只有四条,记住就行:

规矩说明
原点在左上角左上角那一格叫 (0, 0)
横着数叫 x往右走一格,x 加 1
竖着数叫 y往下走一格,y 加 1
写作 (x, y)先横后竖 —— 和读一列数一样,先数第几列

⚠️ 最容易搞错的地方:x 最大是 239,y 最大是 319。

不是 240 和 320 —— 因为从 0 开始数。 就像教室里有 5 个座位,编号是 0、1、2、3、4,最后一个叫 4 不叫 5。

写 screen.pixel(240, 100, 颜色) 会怎么样?什么都不会发生 —— 那一格根本不存在。而且它不报错。

三、先画一个点

来。就画一个点。

请帮我做一个程序:
在屏幕上画一个白色的点,用方框把它圈起来,
再从方框连一条线到右边,右边画一个 60×60 的白色方块,
标注「就这一个点,放大 60 倍」。
请用中文注释。

画一个点,只用一行:

screen.pixel(X, Y, DOT)

三个参数:画在哪(x、y),什么颜色。

就这一行。这就是"在屏幕上画画"这件事的全部基础。

看看它跑起来的样子:

第一个点

框里那个小小的白点,就是一个像素。右边那个大方块,是它放大 60 倍的样子。

💡 为什么非得画个"放大镜"? 因为一个像素太小了,你根本看不见。第一次跑起来的时候, 很多同学以为程序坏了 —— 屏幕一片黑,什么都没有。

不是坏了。是它太小了。

那两条被忽略的参数

回头看看代码里那两个数:

X, Y = 52, 150          # 那个点真实的位置

把这两个数改一改,点就跑到别的地方去了。

这就是坐标存在的全部意义:它是你"指出位置"的唯一办法。

四、再画一片

一个点看不见,那一千个点呢?

现在我们用两个循环,一点一点地把屏幕铺满:

for y in range(62, screen.HEIGHT, STEP):        # 外面这层:第几行
    for x in range(0, screen.WIDTH, STEP):      # 里面这层:这一行里第几个
        screen.pixel(x, y, 颜色)

两层循环,一层管"第几行",一层管"这一行里第几个"。

range(62, screen.HEIGHT, STEP) 这个写法,意思是: "从 62 开始,每次加 STEP,一直加到快到头为止。"

一片点阵

💡 注意颜色的变化。 左上角是青的,越往右下越紫。 因为代码里算了一个 t —— 这个点离左上角有多"远"。 screen.lerp(颜色A, 颜色B, t) 就是在两个颜色之间取中间色。

同一个循环,还能画一条斜线

看图里那条黄色的斜线。它是另一种东西吗?

不是。它也是点摆出来的,只是每个点大了一点(用的是 fill_rect 画 8×8 的方块)。

for i in range(14):
    screen.fill_rect(22 + i * 13, 236 + i * 5, 8, 8, LINE)

每走一步,x 往右 13,y 往下 5 —— 一直往右下走,就是一条斜线。

⭐ 记住这件事:屏幕上的一切,追到底都是点。 斜线、圆、字、照片……都是摆出来的。下一课我们就要学怎么"省事地"摆它们。

五、动手做

先回答一个预测题,再动手:

如果把点阵的间隔 STEP 从 12 改成 1,会发生什么?

想一想再往下看。

想好了吗?点开看看

它会变得非常慢。

间隔 12 的时候,大概有 500 多个点。 间隔 1 的时候,就是 76,800 个点 —— 一百多倍。

板子要一个一个把它们画上去,你会眼睁睁看着屏幕一行一行地"刷"过去。 它不会报错,只会很慢。

这就是编程里很常见的一种情况:你的想法是对的,但太多了。

只改一个条件

挑一个来改,先说出你的预测,再动手:

✏️ 可以直接在表格里填写
我改的条件我预测会怎样实际怎样
把 STEP = 12 改成 STEP = 6
把 STEP = 12 改成 STEP = 40
第一个程序里 X, Y = 52, 150 改成 (120, 160)
把 screen.pixel(X, Y, DOT) 里的 DOT 改成 BOX(黄色)
把点阵循环里的 screen.WIDTH 改成 120
把斜线那个 range(14) 改成 range(40)

⚠️ 第五行和第六行要小心:改完可能会画到屏幕外面去。 画到外面不报错,也不显示 —— 就像那些像素压根不存在。

六、自检小测

正在加载本课自检小测…

七、还想玩点什么

方向可以描述给 AI 的效果值得继续想
我的名字用点阵拼出自己名字的第一个字母怎么用一张表把"这个字母长什么样"记下来?
对角线从左上角到右下角,画一条点连起来的线要让它的两个数一起变大才行 —— 为什么?
星空随机位置、随机亮度的一片小点怎么让每次跑出来的星星不一样?
棋盘两种颜色的小方块交错铺满怎么让相邻的格子颜色不同?

第二行那道题我留给你慢慢想 —— 要让一条线斜着走,两个数就得一起变。 这句话,下一课要接着用。


这一课的作品,就在上面那几张卡片里 —— 点「装到板子上」,用 USB 线或者蓝牙选你的板子,几秒就装好了。 装完板子会自己打开它,不用按任何按键,也不用去桌面上翻页找。

想看它是怎么写出来的,点卡片上的「查看源码」。

本节演示

第一个点

第一个点

画一个像素,再把它放大 60 倍

一片点阵

一片点阵

两层循环铺满小点,再摆出一条斜线