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

[项目] 【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏

[复制链接]
【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏图1

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

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

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


【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏图2

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏

作为学习、练习与尝试,这里创建一个草莓公主的小游戏。
打开网页版:https://arcade.makecode.com/,设置项目名称:草莓公主

MicroPython实验代码

  1. @namespace
  2. class SpriteKind:
  3.     Taco = SpriteKind.create()
  4. def on_on_overlap(sprite, otherSprite):
  5.     info.change_score_by(10)
  6.     otherSprite.destroy()
  7. sprites.on_overlap(SpriteKind.player, SpriteKind.Taco, on_on_overlap)
  8. # Eating a strawberry or a cherry gives 1 point
  9. #
  10. # Eating taco gives 10 points
  11. #
  12. # If you try to eat the death pill you will lose a life, but gain 15 points.
  13. #
  14. # Princess, you have 60 seconds and 3 life to finish the game.
  15. def randomAssets():
  16.     global strawberry, cherry, taco, deathpill
  17.     strawberry = sprites.create(img("""
  18.             . . . . . . . 6 . . . . . . . .
  19.             . . . . . . 8 6 6 . . . 6 8 . .
  20.             . . . e e e 8 8 6 6 . 6 7 8 . .
  21.             . . e 2 2 2 2 e 8 6 6 7 6 . . .
  22.             . e 2 2 4 4 2 7 7 7 7 7 8 6 . .
  23.             . e 2 4 4 2 6 7 7 7 6 7 6 8 8 .
  24.             e 2 4 5 2 2 6 7 7 6 2 7 7 6 . .
  25.             e 2 4 4 2 2 6 7 6 2 2 6 7 7 6 .
  26.             e 2 4 2 2 2 6 6 2 2 2 e 7 7 6 .
  27.             e 2 4 2 2 4 2 2 2 4 2 2 e 7 6 .
  28.             e 2 4 2 2 2 2 2 2 2 2 2 e c 6 .
  29.             e 2 2 2 2 2 2 2 4 e 2 e e c . .
  30.             e e 2 e 2 2 4 2 2 e e e c . . .
  31.             e e e e 2 e 2 2 e e e c . . . .
  32.             e e e 2 e e c e c c c . . . . .
  33.             . c c c c c c c . . . . . . . .
  34.             """),
  35.         SpriteKind.food)
  36.     strawberry.x = randint(0, scene.screen_width())
  37.     strawberry.y = randint(0, scene.screen_height())
  38.     cherry = sprites.create(img("""
  39.             . . . . . . . . . . . 6 6 6 6 6
  40.             . . . . . . . . . 6 6 7 7 7 7 8
  41.             . . . . . . 8 8 8 7 7 8 8 6 8 8
  42.             . . e e e e c 6 6 8 8 . 8 7 8 .
  43.             . e 2 5 4 2 e c 8 . . . 6 7 8 .
  44.             e 2 4 2 2 2 2 2 c . . . 6 7 8 .
  45.             e 2 2 2 2 2 2 2 c . . . 8 6 8 .
  46.             e 2 e e 2 2 2 2 e e e e c 6 8 .
  47.             c 2 e e 2 2 2 2 e 2 5 4 2 c 8 .
  48.             . c 2 e e e 2 e 2 4 2 2 2 2 c .
  49.             . . c 2 2 2 e e 2 2 2 2 2 2 2 e
  50.             . . . e c c e c 2 2 2 2 2 2 2 e
  51.             . . . . . . . c 2 e e 2 2 e 2 c
  52.             . . . . . . . c e e e e e e 2 c
  53.             . . . . . . . . c e 2 2 2 2 c .
  54.             . . . . . . . . . c c c c c . .
  55.             """),
  56.         SpriteKind.food)
  57.     cherry.x = randint(0, scene.screen_width())
  58.     cherry.y = randint(0, scene.screen_height())
  59.     if Math.percent_chance(20):
  60.         taco = sprites.create(img("""
  61.                 . . . . . . . e e e e . . . . .
  62.                 . . . . . e e 4 5 5 5 e e . . .
  63.                 . . . . e 4 5 6 2 2 7 6 6 e . .
  64.                 . . . e 5 6 6 7 2 2 6 4 4 4 e .
  65.                 . . e 5 2 2 7 6 6 4 5 5 5 5 4 .
  66.                 . e 5 6 2 2 8 8 5 5 5 5 5 4 5 4
  67.                 . e 5 6 7 7 8 5 4 5 4 5 5 5 5 4
  68.                 e 4 5 8 6 6 5 5 5 5 5 5 4 5 5 4
  69.                 e 5 c e 8 5 5 5 4 5 5 5 5 5 5 4
  70.                 e 5 c c e 5 4 5 5 5 4 5 5 5 e .
  71.                 e 5 c c 5 5 5 5 5 5 5 5 4 e . .
  72.                 e 5 e c 5 4 5 4 5 5 5 e e . . .
  73.                 e 5 e e 5 5 5 5 5 4 e . . . . .
  74.                 4 5 4 e 5 5 5 5 e e . . . . . .
  75.                 . 4 5 4 5 5 4 e . . . . . . . .
  76.                 . . 4 4 e e e . . . . . . . . .
  77.                 """),
  78.             SpriteKind.Taco)
  79.         taco.x = randint(0, scene.screen_width())
  80.         taco.y = randint(0, scene.screen_height())
  81.     else:
  82.         deathpill = sprites.create(img("""
  83.                 ........................
  84.                 ........................
  85.                 ........................
  86.                 ........................
  87.                 ........................
  88.                 ..........ffff..........
  89.                 ........ff1111ff........
  90.                 .......fb111111bf.......
  91.                 .......f11111111f.......
  92.                 ......fd11111111df......
  93.                 ....7.fd11111111df......
  94.                 ...7..fd11111111df......
  95.                 ...7..fd11111111df......
  96.                 ...7..fddd1111dddff.....
  97.                 ...77.fbdbfddfbdbfcf....
  98.                 ...777fcdcf11fcdcfbf....
  99.                 ....77fffbdb1bdffcf.....
  100.                 ....fcb1bcffffff........
  101.                 ....f1c1c1ffffff........
  102.                 ....fdfdfdfffff.........
  103.                 .....f.f.f..............
  104.                 ........................
  105.                 ........................
  106.                 ........................
  107.                 """),
  108.             SpriteKind.enemy)
  109.         deathpill.x = randint(0, scene.screen_width())
  110.         deathpill.y = randint(0, scene.screen_height())
  111. def on_on_overlap2(sprite2, otherSprite2):
  112.     info.change_score_by(1)
  113.     otherSprite2.destroy()
  114. sprites.on_overlap(SpriteKind.player, SpriteKind.food, on_on_overlap2)
  115. def on_on_overlap3(sprite3, otherSprite3):
  116.     info.change_life_by(-1)
  117.     info.change_score_by(15)
  118.     otherSprite3.destroy()
  119. sprites.on_overlap(SpriteKind.player, SpriteKind.enemy, on_on_overlap3)
  120. deathpill: Sprite = None
  121. taco: Sprite = None
  122. cherry: Sprite = None
  123. strawberry: Sprite = None
  124. info.set_life(3)
  125. info.start_countdown(60)
  126. princess = sprites.create(img("""
  127.         . . . . . . 5 . 5 . . . . . . .
  128.         . . . . . f 5 5 5 f f . . . . .
  129.         . . . . f 1 5 2 5 1 6 f . . . .
  130.         . . . f 1 6 6 6 6 6 1 6 f . . .
  131.         . . . f 6 6 f f f f 6 1 f . . .
  132.         . . . f 6 f f d d f f 6 f . . .
  133.         . . f 6 f d f d d f d f 6 f . .
  134.         . . f 6 f d 3 d d 3 d f 6 f . .
  135.         . . f 6 6 f d d d d f 6 6 f . .
  136.         . f 6 6 f 3 f f f f 3 f 6 6 f .
  137.         . . f f d 3 5 3 3 5 3 d f f . .
  138.         . . f d d f 3 5 5 3 f d d f . .
  139.         . . . f f 3 3 3 3 3 3 f f . . .
  140.         . . . f 3 3 5 3 3 5 3 3 f . . .
  141.         . . . f f f f f f f f f f . . .
  142.         . . . . . f f . . f f . . . . .
  143.         """),
  144.     SpriteKind.player)
  145. princess.set_stay_in_screen(True)
  146. controller.move_sprite(princess)
  147. scene.set_background_color(11)
  148. def on_update_interval():
  149.     randomAssets()
  150. game.on_update_interval(2000, on_update_interval)
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏

这段 Arcade MakeCode 的《草莓公主游戏》代码是一个轻松有趣的收集类游戏,玩家控制“公主”在屏幕中收集食物并避开危险物品。
游戏目标,在 60 秒内,玩家控制草莓公主收集食物得分,同时避免失去生命。最终得分取决于收集的物品数量与种类。

核心机制解析

1、精灵种类定义
python
  1. @namespace
  2. class SpriteKind:
  3.     Taco = SpriteKind.create()
复制代码

扩展 SpriteKind,添加自定义类型 Taco,用于识别特殊食物。

2、食物与道具生成逻辑
python
  1. def randomAssets():
  2.     ...
  3. game.on_update_interval(2000, on_update_interval)
复制代码

每 2 秒自动生成一组随机物品,包括:
草莓(strawberry):得分 +1
樱桃(cherry):得分 +1
塔可(taco):20% 概率生成,得分 +10
死亡药丸(deathpill):80% 概率生成,得分 +15,但失去 1 条生命
每个物品随机出现在屏幕任意位置。

3、玩家控制与角色设置
python
  1. princess = sprites.create(img("""..."""), SpriteKind.player)
  2. controller.move_sprite(princess)
  3. princess.set_stay_in_screen(True)
复制代码

创建主角“草莓公主”精灵。
启用方向键控制移动。
限制角色不离开屏幕。

4、游戏时间与生命设定
python
  1. info.set_life(3)
  2. info.start_countdown(60)
复制代码

玩家初始拥有 3 条生命。
游戏限时 60 秒。

5、碰撞事件处理
收集塔可
python
  1. sprites.on_overlap(SpriteKind.player, SpriteKind.Taco, on_on_overlap)
复制代码

得分 +10,销毁塔可。

收集草莓或樱桃
python
  1. sprites.on_overlap(SpriteKind.player, SpriteKind.food, on_on_overlap2)
复制代码

得分 +1,销毁食物。

吃到死亡药丸
python
  1. sprites.on_overlap(SpriteKind.player, SpriteKind.enemy, on_on_overlap3)
复制代码

得分 +15,但生命 -1,销毁药丸。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏

图形编程参考实验程序

【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏图1

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

【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏图5

实验场景记录

【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏图2

【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏图4

【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏图3

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏

【花雕动手做】基于Kitronik可编程开发板之草莓公主游戏图1
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail