Kitronik ARCADE 是一款由英国教育科技公司 Kitronik 精心打造的可编程游戏机开发板,专为编程教学与创客实践而设计。该设备原生支持微软的 MakeCode Arcade 平台,用户可通过图形化或 JavaScript 编程方式,轻松创建、下载并运行复古风格的街机游戏。
它集成了彩色 LCD 显示屏、方向控制键、功能按键、蜂鸣器和震动马达等交互组件,提供完整的游戏输入输出体验。无论是初学者进行编程启蒙,还是创客群体开发交互式作品,Kitronik ARCADE 都能作为理想的硬件载体,助力创意实现。
凭借其开源友好、易于上手、兼容性强等特点,该开发板广泛应用于中小学编程课程、创客工作坊、游戏开发教学以及个人项目原型设计,深受教育者与技术爱好者的喜爱。



作为学习、练习与尝试,这里创建一个乒乓球的小游戏。
打开网页版:https://arcade.makecode.com/,设置项目名称:乒乓球
MicroPython实验参考代码
@namespace
class SpriteKind:
teft = SpriteKind.create()
left = SpriteKind.create()
def left3():
global aaaaa
aaaaa = sprites.create(img("""
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 1 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 1 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 1 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
. . . . . . 2 7 f 8 . . . . . .
"""),
SpriteKind.teft)
controller.player2.move_sprite(aaaaa, 0, 150)
aaaaa.right = 163
aaaaa.set_stay_in_screen(True)
def left2():
global bbbbb
bbbbb = sprites.create(img("""
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 1 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 1 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 1 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
. . . . . . . 7 f 2 8 . . . . .
"""),
SpriteKind.left)
controller.move_sprite(bbbbb, 0, 150)
bbbbb.right = 0
bbbbb.set_stay_in_screen(True)
def on_on_overlap(sprite, otherSprite):
sprite.vx = sprite.vx * -1
info.change_score_by(1)
sprites.on_overlap(SpriteKind.player, SpriteKind.left, on_on_overlap)
def on_on_overlap2(sprite2, otherSprite2):
sprite2.vx = sprite2.vx * -1
info.player2.change_score_by(1)
sprites.on_overlap(SpriteKind.player, SpriteKind.teft, on_on_overlap2)
def ball():
global mySprite
mySprite = sprites.create(img("""
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . 3 2 2 3 . . . . . .
. . . . . 3 1 1 1 1 3 . . . . .
. . . . . 2 1 1 1 1 2 . . . . .
. . . . . 2 1 1 1 1 2 . . . . .
. . . . . 3 1 1 1 1 3 . . . . .
. . . . . . 3 2 2 3 . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
"""),
SpriteKind.player)
mySprite.set_velocity(100, 100)
mySprite.set_bounce_on_wall(True)
mySprite.y = randint(0, 120)
mySprite: Sprite = None
bbbbb: Sprite = None
aaaaa: Sprite = None
ball()
left2()
left3()
乒乓球小游戏代码解读
这是一个经典的乒乓球(Pong)游戏,支持两名玩家对战。左侧玩家使用主控制器,右侧玩家使用第二个控制器,双方控制球拍击打乒乓球。
核心代码解析
1. 自定义精灵类型
python
class SpriteKind:
teft = SpriteKind.create() # 右侧球拍
left = SpriteKind.create() # 左侧球拍
创建了两种自定义精灵类型:teft(可能是"right"的拼写错误)和left
用于区分左侧和右侧的球拍
2. 球拍创建函数
右侧球拍创建
python
def left3():
global aaaaa
aaaaa = sprites.create(img("""右侧球拍图像"""), SpriteKind.teft)
controller.player2.move_sprite(aaaaa, 0, 150) # 玩家2控制,只能垂直移动
aaaaa.right = 163 # 定位到右侧
aaaaa.set_stay_in_screen(True) # 限制在屏幕内
创建右侧球拍,使用ASCII艺术定义外观
使用controller.player2(第二个控制器)控制,只能垂直移动(速度150)
将球拍定位到屏幕右侧(x=163)
限制球拍不能离开屏幕
左侧球拍创建
python
def left2():
global bbbbb
bbbbb = sprites.create(img("""左侧球拍图像"""), SpriteKind.left)
controller.move_sprite(bbbbb, 0, 150) # 玩家1控制,只能垂直移动
bbbbb.right = 0 # 定位到左侧
bbbbb.set_stay_in_screen(True) # 限制在屏幕内
创建左侧球拍,使用ASCII艺术定义外观
使用controller(第一个控制器)控制,只能垂直移动(速度150)
将球拍定位到屏幕左侧(x=0)
限制球拍不能离开屏幕
3. 碰撞检测系统
球与左侧球拍碰撞
python
def on_on_overlap(sprite, otherSprite):
sprite.vx = sprite.vx * -1 # 球的水平速度反向
info.change_score_by(1) # 玩家1得分+1
sprites.on_overlap(SpriteKind.player, SpriteKind.left, on_on_overlap)
当球与左侧球拍碰撞时,球的水平速度反向(反弹)
玩家1得分增加1分
球与右侧球拍碰撞
python
def on_on_overlap2(sprite2, otherSprite2):
sprite2.vx = sprite2.vx * -1 # 球的水平速度反向
info.player2.change_score_by(1) # 玩家2得分+1
sprites.on_overlap(SpriteKind.player, SpriteKind.teft, on_on_overlap2)
当球与右侧球拍碰撞时,球的水平速度反向(反弹)
玩家2得分增加1分
4. 球创建函数
python
def ball():
global mySprite
mySprite = sprites.create(img("""球图像"""), SpriteKind.player)
mySprite.set_velocity(100, 100) # 设置初始速度
mySprite.set_bounce_on_wall(True) # 碰到墙壁反弹
mySprite.y = randint(0, 120) # 随机垂直位置
创建乒乓球,使用ASCII艺术定义外观
设置球的初始速度为(100, 100)
设置球碰到墙壁时反弹
球的初始垂直位置随机(0-120)
5. 游戏初始化
python
mySprite: Sprite = None
bbbbb: Sprite = None
aaaaa: Sprite = None
ball() # 创建球
left2() # 创建左侧球拍
left3() # 创建右侧球拍
声明全局变量
依次创建球、左侧球拍和右侧球拍
游戏机制总结
双人对战:支持两名玩家对战,分别控制左右球拍
控制方式:
玩家1(左侧):使用主控制器上下移动
玩家2(右侧):使用第二个控制器上下移动
得分系统:
球击中左侧球拍:玩家1得分
球击中右侧球拍:玩家2得分
物理系统:
球碰到墙壁会自动反弹
球碰到球拍会水平速度反向
技术特点
多控制器支持:使用controller和controller.player2分别控制两个球拍
自定义精灵类型:使用SpriteKind.create()创建自定义精灵类型
简单物理模拟:通过直接修改速度实现反弹效果
随机化:球的初始位置随机,增加游戏变化性
图形编程参考实验程序

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

实验场景记录
评论