【花雕动手做】基于Kitronik可编程开发板之四人赛马游戏
Kitronik ARCADE 是一款由英国教育科技公司 Kitronik 精心打造的可编程游戏机开发板,专为编程教学与创客实践而设计。该设备原生支持微软的 MakeCode Arcade 平台,用户可通过图形化或 JavaScript 编程方式,轻松创建、下载并运行复古风格的街机游戏。
它集成了彩色 LCD 显示屏、方向控制键、功能按键、蜂鸣器和震动马达等交互组件,提供完整的游戏输入输出体验。无论是初学者进行编程启蒙,还是创客群体开发交互式作品,Kitronik ARCADE 都能作为理想的硬件载体,助力创意实现。
凭借其开源友好、易于上手、兼容性强等特点,该开发板广泛应用于中小学编程课程、创客工作坊、游戏开发教学以及个人项目原型设计,深受教育者与技术爱好者的喜爱。
【花雕动手做】基于Kitronik可编程开发板之四人赛马游戏
作为学习、练习与尝试,这里创建一个四人赛马的小游戏。打开网页版:https://arcade.makecode.com/,设置项目名称:四人赛马
MicroPython实验代码
@namespace
class SpriteKind:
Finish = SpriteKind.create()
def on_on_overlap(sprite, otherSprite):
carnival.on_game_over_expanded(winTypes.MULTI)
sprites.on_overlap(SpriteKind.player, SpriteKind.Finish, on_on_overlap)
def on_player1_button_a_pressed():
myHorse1.x += 1.5
myHorse1.start_effect(effects.spray, 100)
info.player1.change_score_by(1)
controller.player1.on_button_event(ControllerButton.A,
ControllerButtonEvent.PRESSED,
on_player1_button_a_pressed)
def on_player4_button_a_pressed():
myHorse4.x += 1.5
myHorse4.start_effect(effects.fountain, 100)
info.player4.change_score_by(1)
controller.player4.on_button_event(ControllerButton.A,
ControllerButtonEvent.PRESSED,
on_player4_button_a_pressed)
def on_player2_button_a_pressed():
myHorse2.x += 1.5
myHorse2.start_effect(effects.hearts, 100)
info.player2.change_score_by(1)
controller.player2.on_button_event(ControllerButton.A,
ControllerButtonEvent.PRESSED,
on_player2_button_a_pressed)
def on_player3_button_a_pressed():
myHorse3.x += 1.5
myHorse3.start_effect(effects.confetti, 100)
info.player3.change_score_by(1)
controller.player3.on_button_event(ControllerButton.A,
ControllerButtonEvent.PRESSED,
on_player3_button_a_pressed)
myHorse4: Sprite = None
myHorse3: Sprite = None
myHorse2: Sprite = None
myHorse1: Sprite = None
scene.set_background_color(1)
scene.set_background_image(assets.image("""
bgFrame
"""))
myHorse1 = sprites.create(img("""
........................bc....
......................bcccc...
......................cccccc..
....................cccccccc..
.........cccccb....cccccccccc.
.......bccccccccccccccccc.bccc
.....ccccccccccccccccccc...bbc
...bccbcccccccccccccccc.......
ccccc...ccccccccccccccb.......
.ccc....bcccccccccccccc.......
.........bccc..ccccccccc......
..........ccc....cccccccc.....
..........bccc.....ccc..bc....
..........cbcc......cc...cb...
..........b.bcc...ccc....bcb..
..............cc..bc..........
"""),
SpriteKind.player)
myHorse1.set_position(20, 15)
myHorse2 = sprites.create(img("""
........................42....
......................42222...
......................222222..
....................22222222..
.........222224....2222222222.
.......422222222222222222.4222
.....2222222222222222222...442
...42242222222222222222.......
22222...222222222222224.......
.222....422222222222222.......
.........4222..222222222......
..........222....22222222.....
..........4222.....222..42....
..........2422......22...24...
..........4.422...222....424..
..............22..42..........
"""),
SpriteKind.player)
myHorse2.set_position(20, 34)
myHorse3 = sprites.create(img("""
........................67....
......................67777...
......................777777..
....................77777777..
.........777776....7777777777.
.......677777777777777777.6777
.....7777777777777777777...667
...67767777777777777777.......
77777...777777777777776.......
.777....677777777777777.......
.........6777..777777777......
..........777....77777777.....
..........6777.....777..67....
..........7677......77...76...
..........6.677...777....676..
..............77..67..........
"""),
SpriteKind.player)
myHorse3.set_position(20, 57)
myHorse4 = sprites.create(img("""
........................54....
......................54444...
......................444444..
....................44444444..
.........444445....4444444444.
.......544444444444444444.5444
.....4444444444444444444...554
...54454444444444444444.......
44444...444444444444445.......
.444....544444444444444.......
.........5444..444444444......
..........444....44444444.....
..........5444.....444..54....
..........4544......44...45...
..........5.544...444....545..
..............44..54..........
"""),
SpriteKind.player)
myHorse4.set_position(20, 77)
finish = sprites.create(assets.image("""
finish
"""), SpriteKind.Finish)
finish.set_position(150, 50)
textSprite2 = textsprite.create("Horse Race")
textSprite2.set_position(80, 108)
【花雕动手做】基于Kitronik可编程开发板之四人赛马游戏
这段 Arcade MakeCode 的“四人赛马游戏”代码是一个多玩家竞速小游戏。游戏目标
四位玩家各控制一匹马,通过不断按下 A 键让马向右移动,最先到达终点(Finish 精灵)者获胜。
核心逻辑解析
1、精灵种类定义
python
@namespace
class SpriteKind:
Finish = SpriteKind.create()
创建一个新的精灵种类 Finish,用于标记终点线。
2、胜利判定机制
python
def on_on_overlap(sprite, otherSprite):
carnival.on_game_over_expanded(winTypes.MULTI)
sprites.on_overlap(SpriteKind.player, SpriteKind.Finish, on_on_overlap)
当任意玩家的马(SpriteKind.player)碰到终点线(SpriteKind.Finish)时,触发多人胜利界面。
3、玩家控制逻辑
每位玩家按下 A 键时,控制自己的马向右移动,并触发特效与加分:
python
def on_player1_button_a_pressed():
myHorse1.x += 1.5
myHorse1.start_effect(effects.spray, 100)
info.player1.change_score_by(1)
x += 1.5:马向右移动。
start_effect(...):播放特效(每匹马不同)。
change_score_by(1):玩家得分 +1。
其他玩家(player2、player3、player4)逻辑类似,只是马匹和特效不同:
player2: hearts
player3: confetti
player4: fountain
4、 马匹初始化与位置设置
python
myHorse1 = sprites.create(img("""..."""), SpriteKind.player)
myHorse1.set_position(20, 15)
创建四匹马精灵,分别放置在不同的纵向位置(y = 15, 34, 57, 77),横向起点统一为 x = 20。
5、终点设置
python
finish = sprites.create(assets.image("""finish"""), SpriteKind.Finish)
finish.set_position(150, 50)
创建终点线精灵,放置在屏幕右侧中间位置。
6、背景与标题设置
python
scene.set_background_color(1)
scene.set_background_image(assets.image("""bgFrame"""))
textSprite2 = textsprite.create("Horse Race")
textSprite2.set_position(80, 108)
设置背景颜色与图像。
显示游戏标题 “Horse Race”。
【花雕动手做】基于Kitronik可编程开发板之四人赛马游戏
图形编程参考实验程序通过模拟器,调试与模拟运行
实验场景记录
页:
[1]