回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【花雕动手做】Kitronik 可编程开发板基于 ARCADE MakeCode 之斐波那契图块和螺旋 简单

头像 驴友花雕 2025.09.15 4 0

Kitronik ARCADE 是一款由英国教育科技公司 Kitronik 精心打造的可编程游戏机开发板,专为编程教学与创客实践而设计。该设备原生支持微软的 MakeCode Arcade 平台,用户可通过图形化或 JavaScript 编程方式,轻松创建、下载并运行复古风格的街机游戏。

它集成了彩色 LCD 显示屏、方向控制键、功能按键、蜂鸣器和震动马达等交互组件,提供完整的游戏输入输出体验。无论是初学者进行编程启蒙,还是创客群体开发交互式作品,Kitronik ARCADE 都能作为理想的硬件载体,助力创意实现。

凭借其开源友好、易于上手、兼容性强等特点,该开发板广泛应用于中小学编程课程、创客工作坊、游戏开发教学以及个人项目原型设计,深受教育者与技术爱好者的喜爱。
 

 

00 (2).jpg
00 (3).jpg
00 (4).jpg

作为学习、练习与尝试,这里创建一个斐波那契图块和螺旋的小游戏。
打开网页版:https://arcade.makecode.com/,设置项目名称:斐波那契图块和螺旋

MicroPython实验代码
 

代码
def on_up_pressed():
    global cy
    cy += -15
    scene.center_camera_at(cx, cy)
controller.up.on_event(ControllerButtonEvent.PRESSED, on_up_pressed)

def on_down_pressed():
    global cy
    cy += 15
    scene.center_camera_at(cx, cy)
controller.down.on_event(ControllerButtonEvent.PRESSED, on_down_pressed)

def on_right_pressed():
    global cx
    cx += 20
    scene.center_camera_at(cx, cy)
controller.right.on_event(ControllerButtonEvent.PRESSED, on_right_pressed)

def drawArc():
    global x, y
    # draw a circle arc using random dots!
    for index in range(100000):
        x = randint(0, f)
        y = randint(0, f)
        # test if the point will draw the circle
        if x * x + y * y >= (f - 1) ** 2 and x * x + y * y < (f + 1) ** 2:
            if rotate == 0:
                x = f - x
                y = f - y
            elif rotate == 1:
                x = f - x
            elif rotate == 3:
                y = f - y
            fibSquare.set_pixel(x, y, 1)

def on_left_pressed():
    global cx
    cx += -20
    scene.center_camera_at(cx, cy)
controller.left.on_event(ControllerButtonEvent.PRESSED, on_left_pressed)

fibSprite: Sprite = None
f0 = 0
fibSquare: Image = None
rotate = 0
y = 0
f = 0
x = 0
cy = 0
cx = 0
clr = 1
repeat = 14
f1 = 1
fibSprite0 = sprites.create(img("""
    .
    """), 0)
cx = scene.screen_width() / 2
cy = scene.screen_height() / 2
fibSprite0.top += 20

def on_update_interval():
    global f0, f1, f, repeat, fibSquare, clr, fibSprite, rotate, fibSprite0
    if repeat > 0:
        f0 = f1
        f1 = f
        f = f1 + f0
        info.set_score(f)
        repeat += -1
        fibSquare = image.create(f, f)
        fibSquare.fill_rect(0, 0, f, f, clr)
        clr += 1
        fibSprite = sprites.create(fibSquare, 0)
        if rotate == 0:
            fibSprite.top = fibSprite0.bottom
            fibSprite.left = fibSprite0.left
            rotate += 1
        elif rotate == 1:
            fibSprite.bottom = fibSprite0.bottom
            fibSprite.left = fibSprite0.right
            rotate += 1
        elif rotate == 2:
            fibSprite.bottom = fibSprite0.top
            fibSprite.right = fibSprite0.right
            rotate += 1
        elif rotate == 3:
            fibSprite.top = fibSprite0.top
            fibSprite.right = fibSprite0.left
            rotate = 0
        drawArc()
        fibSprite0 = fibSprite
game.on_update_interval(1000, on_update_interval)

这段代码是用 MakeCode Arcade 编写的一个视觉数学演示项目,名为 “斐波那契图块与螺旋”。它通过不断生成斐波那契数列大小的方块,并在其边缘绘制弧线,最终形成一个类似黄金螺旋的图形。

代码逐段解析
1、摄像机控制逻辑
python
controller.up.on_event(...): cy -= 15
controller.down.on_event(...): cy += 15
controller.left.on_event(...): cx -= 20
controller.right.on_event(...): cx += 20
scene.center_camera_at(cx, cy)
玩家可使用方向键移动视角

cx, cy 控制摄像机中心位置

实现对整个图形的平移观察

2、方块生成与排列逻辑
python
f0 = 0
f1 = 1
f = f1 + f0
repeat = 14
使用斐波那契数列生成方块边长

每秒生成一个新方块,最多生成 14 个

python
fibSquare = image.create(f, f)
fibSquare.fill_rect(0, 0, f, f, clr)
fibSprite = sprites.create(fibSquare, 0)
创建一个边长为 f 的图像并填充颜色

将其作为精灵添加到场景中

3、方块旋转排列逻辑
python
if rotate == 0:
   fibSprite.top = fibSprite0.bottom
   fibSprite.left = fibSprite0.left
   rotate += 1
...
elif rotate == 3:
   fibSprite.top = fibSprite0.top
   fibSprite.right = fibSprite0.left
   rotate = 0
每个新方块根据 rotate 值放置在前一个方块的不同方向

顺序为:下 → 右 → 上 → 左,形成螺旋结构

4、弧线绘制逻辑
python
def drawArc():
   for index in range(100000):
       x = randint(0, f)
       y = randint(0, f)
       if x² + y² ≈ f²:
           fibSquare.set_pixel(x, y, 1)
使用随机点模拟圆弧边缘(近似圆周)

根据 rotate 值调整弧线方向,使其与方块位置匹配

实现黄金螺旋的视觉效果

5、分数系统(可选)
python
info.set_score(f)
每次生成新方块时更新分数为当前斐波那契数

可用于展示数列增长过程。

 

图形编程参考实验程序

 

122.jpg

通过模拟器,调试与模拟运行

 

00210-.gif

实验场景记录

 

123 (1).jpg123 (2).jpg
 

评论

user-avatar
icon 他的勋章
    展开更多