51浏览
查看: 51|回复: 4

[项目] 【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋

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

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

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

【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋图2

【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋图3

【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋图1

驴友花雕  中级技神
 楼主|

发表于 前天 14:10

【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋


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

MicroPython实验代码



  1. def on_up_pressed():
  2.     global cy
  3.     cy += -15
  4.     scene.center_camera_at(cx, cy)
  5. controller.up.on_event(ControllerButtonEvent.PRESSED, on_up_pressed)
  6. def on_down_pressed():
  7.     global cy
  8.     cy += 15
  9.     scene.center_camera_at(cx, cy)
  10. controller.down.on_event(ControllerButtonEvent.PRESSED, on_down_pressed)
  11. def on_right_pressed():
  12.     global cx
  13.     cx += 20
  14.     scene.center_camera_at(cx, cy)
  15. controller.right.on_event(ControllerButtonEvent.PRESSED, on_right_pressed)
  16. def drawArc():
  17.     global x, y
  18.     # draw a circle arc using random dots!
  19.     for index in range(100000):
  20.         x = randint(0, f)
  21.         y = randint(0, f)
  22.         # test if the point will draw the circle
  23.         if x * x + y * y >= (f - 1) ** 2 and x * x + y * y < (f + 1) ** 2:
  24.             if rotate == 0:
  25.                 x = f - x
  26.                 y = f - y
  27.             elif rotate == 1:
  28.                 x = f - x
  29.             elif rotate == 3:
  30.                 y = f - y
  31.             fibSquare.set_pixel(x, y, 1)
  32. def on_left_pressed():
  33.     global cx
  34.     cx += -20
  35.     scene.center_camera_at(cx, cy)
  36. controller.left.on_event(ControllerButtonEvent.PRESSED, on_left_pressed)
  37. fibSprite: Sprite = None
  38. f0 = 0
  39. fibSquare: Image = None
  40. rotate = 0
  41. y = 0
  42. f = 0
  43. x = 0
  44. cy = 0
  45. cx = 0
  46. clr = 1
  47. repeat = 14
  48. f1 = 1
  49. fibSprite0 = sprites.create(img("""
  50.     .
  51.     """), 0)
  52. cx = scene.screen_width() / 2
  53. cy = scene.screen_height() / 2
  54. fibSprite0.top += 20
  55. def on_update_interval():
  56.     global f0, f1, f, repeat, fibSquare, clr, fibSprite, rotate, fibSprite0
  57.     if repeat > 0:
  58.         f0 = f1
  59.         f1 = f
  60.         f = f1 + f0
  61.         info.set_score(f)
  62.         repeat += -1
  63.         fibSquare = image.create(f, f)
  64.         fibSquare.fill_rect(0, 0, f, f, clr)
  65.         clr += 1
  66.         fibSprite = sprites.create(fibSquare, 0)
  67.         if rotate == 0:
  68.             fibSprite.top = fibSprite0.bottom
  69.             fibSprite.left = fibSprite0.left
  70.             rotate += 1
  71.         elif rotate == 1:
  72.             fibSprite.bottom = fibSprite0.bottom
  73.             fibSprite.left = fibSprite0.right
  74.             rotate += 1
  75.         elif rotate == 2:
  76.             fibSprite.bottom = fibSprite0.top
  77.             fibSprite.right = fibSprite0.right
  78.             rotate += 1
  79.         elif rotate == 3:
  80.             fibSprite.top = fibSprite0.top
  81.             fibSprite.right = fibSprite0.left
  82.             rotate = 0
  83.         drawArc()
  84.         fibSprite0 = fibSprite
  85. game.on_update_interval(1000, on_update_interval)
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 前天 14:27

【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋

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

代码逐段解析
1、摄像机控制逻辑
python
  1. controller.up.on_event(...): cy -= 15
  2. controller.down.on_event(...): cy += 15
  3. controller.left.on_event(...): cx -= 20
  4. controller.right.on_event(...): cx += 20
  5. scene.center_camera_at(cx, cy)
复制代码

玩家可使用方向键移动视角

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

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

2、方块生成与排列逻辑
python
  1. f0 = 0
  2. f1 = 1
  3. f = f1 + f0
  4. repeat = 14
复制代码

使用斐波那契数列生成方块边长

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

python
  1. fibSquare = image.create(f, f)
  2. fibSquare.fill_rect(0, 0, f, f, clr)
  3. fibSprite = sprites.create(fibSquare, 0)
复制代码

创建一个边长为 f 的图像并填充颜色

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

3、方块旋转排列逻辑
python
  1. if rotate == 0:
  2.     fibSprite.top = fibSprite0.bottom
  3.     fibSprite.left = fibSprite0.left
  4.     rotate += 1
  5. ...
  6. elif rotate == 3:
  7.     fibSprite.top = fibSprite0.top
  8.     fibSprite.right = fibSprite0.left
  9.     rotate = 0
复制代码

每个新方块根据 rotate 值放置在前一个方块的不同方向

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

4、弧线绘制逻辑
python
  1. def drawArc():
  2.     for index in range(100000):
  3.         x = randint(0, f)
  4.         y = randint(0, f)
  5.         if x² + y² ≈ f²:
  6.             fibSquare.set_pixel(x, y, 1)
复制代码

使用随机点模拟圆弧边缘(近似圆周)

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

实现黄金螺旋的视觉效果

5、分数系统(可选)
python
  1. info.set_score(f)
复制代码

每次生成新方块时更新分数为当前斐波那契数

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


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 前天 14:28

【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋

图形编程参考实验程序

【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 前天 14:31

【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋

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

【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋图3

实验场景记录

【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋图1

【花雕动手做】基于Kitronik开发板之斐波那契图块和螺旋图2


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail