【花雕动手做】基于 Kitronik 开发板之布雷森纳姆圆环

2025-09-131319
AI 快速预览详细 收起
Kitronik ARCADE是一款专为编程教学与创客实践设计的可编程游戏机开发板,支持MakeCode Arcade平台。它集成了彩色LCD显示屏、方向控制键、功能按键、蜂鸣器和震动马达等交互组件,提供完整的游戏输入输出体验。无论是初学者进行编程启蒙,还是创客群体开发交互式作品,Kitronik ARCADE都能作为理想的硬件载体,助力创意实现。
Kitronik ARCADE 是一款由英国教育科技公司 Kitronik 精心打造的可编程游戏机开发板,专为编程教学与创客实践而设计。该设备原生支持微软的 MakeCode Arcade 平台,用户可通过图形化或 JavaScript 编程方式,轻松创建、下载并运行复古风格的街机游戏。

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

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

【花雕动手做】基于 Kitronik 开发板之布雷森纳姆圆环图1

【花雕动手做】基于 Kitronik 开发板之布雷森纳姆圆环图2

【花雕动手做】基于 Kitronik 开发板之布雷森纳姆圆环图3

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(5)
驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者
通过模拟器,调试与模拟运行

实验场景记录



驴友花雕
驴友花雕
作者
图形编程参考实验程序

驴友花雕
驴友花雕
作者
这段代码是用 MakeCode Arcade 编写的一个图形演示程序,利用 布雷森纳姆圆算法(Bresenham Circle Algorithm) 在屏幕上绘制一个动态变化的圆环。它展示了如何在像素图像中高效绘制圆形,并通过半径的增减实现“呼吸式”动画效果。解读如下:
一、布雷森纳姆圆算法简介
布雷森纳姆算法是一种用于在栅格图像中绘制圆形的经典算法。它通过整数运算和对称性,避免使用浮点计算,从而高效地确定哪些像素应被填充。

由于圆具有八向对称性,只需计算一个八分之一圆的点,然后复制到其他七个区域。
二、代码结构解析
1、初始化变量
python
[code]y = 0
x = 0
radius = 0
d = 0
cx = 31
cy = 31
grow = True
circle = image.create(64, 64)
circleSprite = sprites.create(circle, 0)[/code]
cx, cy:圆心坐标(图像中心)
radius:当前圆半径
d:决策参数,用于判断下一个像素位置
circle:创建一个 64×64 的图像作为绘图画布
circleSprite:将图像作为精灵显示在屏幕上
2、主循环逻辑
python
[code]def on_forever():
...
forever(on_forever)[/code]
每 100 毫秒执行一次,绘制一个新的圆形
圆的半径在 1 到 31 之间循环变化,形成“呼吸”动画
3、圆形绘制核心
python
[code]d = 3 - 2 * radius
x = 0
y = radius
while x <= y:
circle.set_pixel(cx + x, cy + y, 4)
...
if d <= 0:
d += 4 * x + 6
else:
y -= 1
d += 4 * (x - y) + 10
x += 1[/code]
使用布雷森纳姆算法计算圆的边缘像素位置
利用对称性绘制八个方向的点
set_pixel(x, y, 4) 将像素设为颜色编号 4(通常是红色)
4、半径动态变化
python
[code]if grow:
radius += 1
else:
radius -= 1
if radius > 31:
grow = False
elif radius < 1:
grow = True[/code]
控制圆的半径在 1 到 31 之间来回变化
实现动态扩张与收缩的视觉效果。
驴友花雕
驴友花雕
作者
作为学习、练习与尝试,这里创建一个布雷森纳姆圆环的小游戏。
打开网页版:https://arcade.makecode.com/,设置项目名称:布雷森纳姆圆环

MicroPython实验代码
[code]y = 0
x = 0
radius = 0
d = 0
cx = 31
cy = 31
grow = True
circle = image.create(64, 64)
circleSprite = sprites.create(circle, 0)
def on_forever():
global d, x, y, radius, grow
circle.fill(6)
d = 3 - 2 * radius
x = 0
y = radius
while x <= y:
circle.set_pixel(cx + x, cy + y, 4)
circle.set_pixel(cx + x, cx - y, 4)
circle.set_pixel(cx - x, cx + y, 4)
circle.set_pixel(cx - x, cy - y, 4)
circle.set_pixel(cx + y, cy + x, 4)
circle.set_pixel(cx + y, cy - x, 4)
circle.set_pixel(cx - y, cy + x, 4)
circle.set_pixel(cx - y, cy - x, 4)
if d <= 0:
d += 4 * x + 6
else:
y += -1
d += 4 * (x - y) + 10
x += 1
if grow:
radius += 1
else:
radius += 0 - 1
if radius > 31:
grow = False
elif radius < 1:
grow = True
pause(100)
forever(on_forever)[/code]
- 没有更多了 -