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

[项目] 【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑

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

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

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

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑图1

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑图3

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑图2

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑

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

MicroPython实验代码

  1. class ActionKind(Enum):
  2.     Walking = 0
  3.     Idle = 1
  4.     Jumping = 2
  5.     Dead = 3
  6. @namespace
  7. class SpriteKind:
  8.     Ground = SpriteKind.create()
  9.     Cloud = SpriteKind.create()
  10. def initGround():
  11.     global ground1, ground2
  12.     ground1 = sprites.create(img("""
  13.             ...................................................................................cccc...........................................................................
  14.             ..................................................................................c....c..........................................................................
  15.             cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc......ccccccccccccccccc....ccccccccccccccccccccccccccccccccccccccccccccccccccccc
  16.             .........................................................................................................cccc.....................................................
  17.             ..................................................................................................................................................................
  18.             ..cccc..c.......................c..cccc.........................cccc..c.............c..........................cccc..c...........c..ccc.................c..ccc....
  19.             ..................................................................................................................................................................
  20.             ...............cccc..c.........................cccc.c.......c..............cc.c........cccc..c.....cccc..c..................c...............cccc..c...............
  21.             ..................................................................................................................................................................
  22.             ..................................................................................................................................................................
  23.             ..................................................................................................................................................................
  24.             ..................................................................................................................................................................
  25.             ..................................................................................................................................................................
  26.             ..................................................................................................................................................................
  27.             ..................................................................................................................................................................
  28.             ..................................................................................................................................................................
  29.             ..................................................................................................................................................................
  30.             ..................................................................................................................................................................
  31.             ..................................................................................................................................................................
  32.             ..................................................................................................................................................................
  33.             ..................................................................................................................................................................
  34.             ..................................................................................................................................................................
  35.             ..................................................................................................................................................................
  36.             ..................................................................................................................................................................
  37.             ..................................................................................................................................................................
  38.             ..................................................................................................................................................................
  39.             ..................................................................................................................................................................
  40.             ..................................................................................................................................................................
  41.             ..................................................................................................................................................................
  42.             ..................................................................................................................................................................
  43.             ..................................................................................................................................................................
  44.             ..................................................................................................................................................................
  45.             """),
  46.         SpriteKind.Ground)
  47.     ground2 = sprites.create(img("""
  48.             .....................................................cccc..................cccc...................................................................................
  49.             ....................................................c....c................c....c..................................................................................
  50.             cccccccccccccccccccccccccccccccccccccccccccccccccccc......cccccccccccccccc......cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  51.             ..................................................................................................................................................................
  52.             ..................................................................................................................................................................
  53.             ....ccc..c.................ccc..c...........c..cccc..........................c.............c..cccc.........................cccc..c.......................c..cccc..
  54.             ..................................................................................................................................................................
  55.             ...............c..cccc...............c..................c..cccc.....c..cccc........c.cc..............c.......c.cccc.........................c..cccc...............
  56.             ..................................................................................................................................................................
  57.             ..................................................................................................................................................................
  58.             ..................................................................................................................................................................
  59.             ..................................................................................................................................................................
  60.             ..................................................................................................................................................................
  61.             ..................................................................................................................................................................
  62.             ..................................................................................................................................................................
  63.             ..................................................................................................................................................................
  64.             ..................................................................................................................................................................
  65.             ..................................................................................................................................................................
  66.             ..................................................................................................................................................................
  67.             ..................................................................................................................................................................
  68.             ..................................................................................................................................................................
  69.             ..................................................................................................................................................................
  70.             ..................................................................................................................................................................
  71.             ..................................................................................................................................................................
  72.             ..................................................................................................................................................................
  73.             ..................................................................................................................................................................
  74.             ..................................................................................................................................................................
  75.             ..................................................................................................................................................................
  76.             ..................................................................................................................................................................
  77.             ..................................................................................................................................................................
  78.             ..................................................................................................................................................................
  79.             ..................................................................................................................................................................
  80.             """),
  81.         SpriteKind.Ground)
  82.     ground1.set_position(scene.screen_width() / 2, 120)
  83.     ground2.set_position(ground1.x + scene.screen_width(), 120)
  84.     ground1.vx = -100
  85.     ground2.vx = -100
  86.     ground1.z = 2
  87.     ground2.z = 2
  88. def initRaptor():
  89.     global raptor, run, jump, dead
  90.     raptor = sprites.create(img("""
  91.             ................................
  92.             ................................
  93.             ................................
  94.             ................................
  95.             ................................
  96.             ................................
  97.             ................................
  98.             ................................
  99.             ................................
  100.             ................................
  101.             ................................
  102.             ................................
  103.             ................................
  104.             ................................
  105.             ................................
  106.             ........................fff.....
  107.             .......................fcccff...
  108.             ......................fc1fcccf..
  109.             ......................fccccccf..
  110.             .................fffffcccccff...
  111.             .............ffffcccccccccf.....
  112.             .........ffffccccccccccccf......
  113.             .....ffffcccccccccccccccf.......
  114.             ...fccccccccccccccccccccf.......
  115.             ..fccc......fffccccccfffcf......
  116.             ...............ffcccf...cf......
  117.             .................fccf..ff.......
  118.             .................fcf............
  119.             ................fccf............
  120.             ................fcf.............
  121.             ................fcf.............
  122.             .................f..............
  123.             """),
  124.         SpriteKind.player)
  125.     run = animation.create_animation(ActionKind.Walking, 100)
  126.     run.add_animation_frame(img("""
  127.         ................................
  128.         ................................
  129.         ................................
  130.         ................................
  131.         ................................
  132.         ................................
  133.         ................................
  134.         ................................
  135.         ................................
  136.         ................................
  137.         ................................
  138.         ................................
  139.         ................................
  140.         ................................
  141.         ................................
  142.         ........................fff.....
  143.         .......................fcccff...
  144.         ......................fc1fcccf..
  145.         ......................fccccccf..
  146.         .................fffffcccccff...
  147.         .............ffffcccccccccf.....
  148.         .........ffffccccccccccccf......
  149.         .....ffffcccccccccccccccf.......
  150.         ..ffccccccccccccccccccccf.......
  151.         ............fffccccccfffcf......
  152.         ...............ffcccff..cf......
  153.         .................fccff.ff.......
  154.         .................fcfff..........
  155.         ................fccf.ff.........
  156.         ................fcf...f.........
  157.         ................fcf....f........
  158.         .................f..............
  159.         """))
  160.     run.add_animation_frame(img("""
  161.         ................................
  162.         ................................
  163.         ................................
  164.         ................................
  165.         ................................
  166.         ................................
  167.         ................................
  168.         ................................
  169.         ................................
  170.         ................................
  171.         ................................
  172.         ................................
  173.         ................................
  174.         ................................
  175.         ................................
  176.         ........................fff.....
  177.         .......................fcccff...
  178.         ......................fc1fcccf..
  179.         ......................fccccccf..
  180.         .................fffffcccccff...
  181.         .........ffffffffcccccccccf.....
  182.         .....ffffccccccccccccccccf......
  183.         ..ffccccccccccccccccccccf.......
  184.         ............ffcccccccccccf......
  185.         ..............fcccccccffccf.....
  186.         ...............ffffcccf..cf.....
  187.         ................fffffcf.ff......
  188.         ................fff.fcf.........
  189.         ................ff.fccf.........
  190.         ...............ff..fcf..........
  191.         ..............f....fcf..........
  192.         ....................f...........
  193.         """))
  194.     animation.attach_animation(raptor, run)
  195.     jump = animation.create_animation(ActionKind.Jumping, 200)
  196.     jump.add_animation_frame(img("""
  197.         ................................
  198.         ................................
  199.         ................................
  200.         ................................
  201.         ................................
  202.         ................................
  203.         ................................
  204.         ................................
  205.         ................................
  206.         ................................
  207.         ................................
  208.         ................................
  209.         ................................
  210.         ................................
  211.         ................................
  212.         ........................fff.....
  213.         .......................fcccff...
  214.         ......................fc1fcccf..
  215.         ......................fccccccf..
  216.         .................fffffcccccff...
  217.         .............ffffcccccccccf.....
  218.         ...........ffccccccccccccf......
  219.         .........ffcccccccccccccf.......
  220.         .......ffcccccccccccccccf.......
  221.         ......fccc..fffccccccfffcf......
  222.         .....fcc.......ffcccf...cf......
  223.         .....fc..........fccf..ff.......
  224.         ....cc...........fcf............
  225.         ....f...........fccf............
  226.         ................fcf.............
  227.         ................fcf.............
  228.         .................f..............
  229.         """))
  230.     animation.attach_animation(raptor, jump)
  231.     dead = animation.create_animation(ActionKind.Dead, 200)
  232.     dead.add_animation_frame(img("""
  233.         ................................
  234.         ................................
  235.         ................................
  236.         ................................
  237.         ................................
  238.         ................................
  239.         ................................
  240.         ................................
  241.         ................................
  242.         ................................
  243.         ................................
  244.         ................................
  245.         ................................
  246.         ................................
  247.         ................................
  248.         ........................fff.....
  249.         .......................f111ff...
  250.         ......................fc1f1ccf..
  251.         ......................fc111ccf..
  252.         .................fffffcccccff...
  253.         .............ffffcccccccccf.....
  254.         .........ffffccccccccccccf......
  255.         .....ffffcccccccccccccccf.......
  256.         ...fccccccccccccccccccccf.......
  257.         ..fccc......fffccccccfffcf......
  258.         ...............ffcccf...cf......
  259.         .................fccf..ff.......
  260.         .................fcf............
  261.         ................fccf............
  262.         ................fcf.............
  263.         ................fcf.............
  264.         .................f..............
  265.         """))
  266.     animation.attach_animation(raptor, dead)
  267.     raptor.z = 3
  268.     raptor.set_position(15, 94)
  269. def on_on_overlap(sprite, otherSprite):
  270.     global end
  271.     end = 1
  272.     animation.set_action(raptor, ActionKind.Dead)
  273.     pause(50)
  274.     game.over(False, effects.dissolve)
  275. sprites.on_overlap(SpriteKind.player, SpriteKind.projectile, on_on_overlap)
  276. def on_button_pressed():
  277.     if raptor.y == 94 and end == 0:
  278.         raptor.vy = -160
  279.         animation.set_action(raptor, ActionKind.Jumping)
  280. controller.any_button.on_event(ControllerButtonEvent.PRESSED, on_button_pressed)
  281. cloud: Sprite = None
  282. cactus: Sprite = None
  283. choice = 0
  284. dead: animation.Animation = None
  285. jump: animation.Animation = None
  286. run: animation.Animation = None
  287. raptor: Sprite = None
  288. ground2: Sprite = None
  289. ground1: Sprite = None
  290. end = 0
  291. idle = None
  292. game.set_dialog_cursor(img("""
  293.     ................................
  294.     ..1111111111111111111111111111..
  295.     .111111111111111111111111111111.
  296.     11111111111111111111111111111111
  297.     11111111111111111111111111111111
  298.     11111111111111111111111111111111
  299.     11111111111111111111111111111111
  300.     11111111111111111111111111111111
  301.     11111111111111111111111111111111
  302.     111111111111111111111111fff11111
  303.     11111111111111111111111fcccff111
  304.     1111111111111111111111fc1fcccf11
  305.     1111111111111111111111fccccccf11
  306.     11111111111111111fffffcccccff111
  307.     1111111111111ffffcccccccccf11111
  308.     111111111ffffccccccccccccf111111
  309.     11111ffffcccccccccccccccf1111111
  310.     111fccccccccccccccccccccf1111111
  311.     11fccc111111fffccccccfffcf111111
  312.     111111111111111ffcccf111cf111111
  313.     11111111111111111fccf11ff1111111
  314.     11111111111111111fcf111111111111
  315.     1111111111111111fccf111111111111
  316.     1111111111111111fcf1111111111111
  317.     1111111111111111fcf1111111111111
  318.     11111111111111111f11111111111111
  319.     11111111111111111111111111111111
  320.     11111111111111111111111111111111
  321.     11111111111111111111111111111111
  322.     11111111111111111111111111111111
  323.     .111111111111111111111111111111.
  324.     ..1111111111111111111111111111..
  325.     """))
  326. game.splash("Raptor Run")
  327. scene.set_background_color(1)
  328. initGround()
  329. initRaptor()
  330. info.set_score(0)
  331. end = 0
  332. game.show_long_text("Press any button to jump.", DialogLayout.TOP)
  333. def on_on_update():
  334.     if raptor.y < 94:
  335.         raptor.ay = 400
  336.     else:
  337.         raptor.ay = 0
  338.         raptor.y = 94
  339.         if end == 0:
  340.             animation.set_action(raptor, ActionKind.Walking)
  341. game.on_update(on_on_update)
  342. def on_update_interval():
  343.     info.change_score_by(1)
  344. game.on_update_interval(50, on_update_interval)
  345. def on_update_interval2():
  346.     global choice, cactus
  347.     choice = randint(0, 4)
  348.     if choice == 0:
  349.         cactus = sprites.create_projectile_from_side(img("""
  350.                 ................................
  351.                 ................................
  352.                 ................................
  353.                 ................................
  354.                 ................................
  355.                 ................................
  356.                 ................................
  357.                 ................................
  358.                 ................................
  359.                 ................................
  360.                 ................................
  361.                 ................................
  362.                 ..............ccc...............
  363.                 .............ccccc..............
  364.                 .............ccccc..............
  365.                 .............ccccc...c..........
  366.                 .........c...ccccc..ccc.........
  367.                 ........ccc..ccccc..ccc.........
  368.                 ........ccc..ccccc..ccc.........
  369.                 ........ccc..ccccc..ccc.........
  370.                 ........cccccccccc..ccc.........
  371.                 ........cccccccccc..ccc.........
  372.                 .........cccccccccccccc.........
  373.                 .............cccccccccc.........
  374.                 .............ccccccccc..........
  375.                 .............ccccc..............
  376.                 .............ccccc..............
  377.                 .............ccccc..............
  378.                 .............ccccc..............
  379.                 .............ccccc..............
  380.                 .............ccccc..............
  381.                 .............ccccc..............
  382.                 """),
  383.             ground1.vx,
  384.             0)
  385.         cactus.y = 94
  386.         cactus.z = 2
  387.     elif choice == 1:
  388.         cactus = sprites.create_projectile_from_side(img("""
  389.                 ................................
  390.                 ................................
  391.                 ................................
  392.                 ................................
  393.                 ................................
  394.                 ................................
  395.                 ................................
  396.                 ................................
  397.                 ................................
  398.                 ................................
  399.                 ................................
  400.                 ................................
  401.                 ..............ccc...............
  402.                 .............ccccc..............
  403.                 .............ccccc..............
  404.                 .............ccccc..............
  405.                 .........c...ccccc...c..........
  406.                 ........ccc..ccccc..ccc.........
  407.                 ........ccc..ccccc..ccc.........
  408.                 ........ccc..ccccc..ccc.........
  409.                 ........ccc..cccccccccc.........
  410.                 ........ccc..cccccccccc.........
  411.                 ........cccccccccccccc..........
  412.                 ........cccccccccc..............
  413.                 .........ccccccccc..............
  414.                 .............ccccc..............
  415.                 .............ccccc..............
  416.                 .............ccccc..............
  417.                 .............ccccc..............
  418.                 .............ccccc..............
  419.                 .............ccccc..............
  420.                 .............ccccc..............
  421.                 """),
  422.             ground1.vx,
  423.             0)
  424.         cactus.y = 94
  425.         cactus.z = 2
  426.     elif choice == 2:
  427.         cactus = sprites.create_projectile_from_side(img("""
  428.                 ................................
  429.                 ................................
  430.                 ................................
  431.                 ................................
  432.                 ................................
  433.                 ................................
  434.                 ................................
  435.                 ................................
  436.                 ................................
  437.                 ................................
  438.                 ................................
  439.                 ................................
  440.                 ................................
  441.                 ................................
  442.                 ................................
  443.                 ................................
  444.                 ................................
  445.                 ................................
  446.                 ................................
  447.                 ................................
  448.                 ...........c....................
  449.                 ..........ccc...................
  450.                 ..........ccc......c............
  451.                 ........c.ccc.....ccc...........
  452.                 ........c.ccc.....ccc.c.........
  453.                 ........ccccc.c...ccc.c.........
  454.                 ..........ccc.c.c.ccccc.........
  455.                 ..........ccccc.c.ccc...........
  456.                 ..........ccc...ccccc...........
  457.                 ..........ccc.....ccc...........
  458.                 ..........ccc.....ccc...........
  459.                 ..........ccc.....ccc...........
  460.                 """),
  461.             ground1.vx,
  462.             0)
  463.         cactus.y = 94
  464.         cactus.z = 2
  465. game.on_update_interval(1000, on_update_interval2)
  466. def on_update_interval3():
  467.     ground1.vx += -1
  468.     ground2.vx += -1
  469. game.on_update_interval(1000, on_update_interval3)
  470. def on_update_interval4():
  471.     global cloud
  472.     if Math.percent_chance(40):
  473.         cloud = sprites.create_projectile_from_side(img("""
  474.                 ................................
  475.                 ................................
  476.                 ................................
  477.                 ................................
  478.                 ................................
  479.                 ................................
  480.                 ................................
  481.                 ................................
  482.                 ................................
  483.                 ................................
  484.                 ................................
  485.                 ................................
  486.                 ................................
  487.                 ................................
  488.                 ................bbbb.bb.........
  489.                 ...............bb.....b.........
  490.                 .............bbb......bbb.......
  491.                 .............b..........bbbb....
  492.                 .............b.............b....
  493.                 ..........bbbb.............bbb..
  494.                 .........bb..................b..
  495.                 .....bbbbb...................bb.
  496.                 .....b........................b.
  497.                 .bb.bb..b......................b
  498.                 bb.......bbbbbbbbbbbbbbbbbbbbbbb
  499.                 ................................
  500.                 ................................
  501.                 ................................
  502.                 ................................
  503.                 ................................
  504.                 ................................
  505.                 ................................
  506.                 """),
  507.             ground1.vx / 4,
  508.             0)
  509.         cloud.y = randint(20, 60)
  510.         cloud.set_kind(SpriteKind.Cloud)
  511.         cloud.z = 1
  512. game.on_update_interval(1500, on_update_interval4)
  513. def on_forever():
  514.     if ground2.x < -1 * (scene.screen_width() / 2):
  515.         ground2.x = ground1.x + scene.screen_width()
  516. forever(on_forever)
  517. def on_forever2():
  518.     if ground1.x < -1 * (scene.screen_width() / 2):
  519.         ground1.x = ground2.x + scene.screen_width()
  520. forever(on_forever2)
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑

猛禽奔跑游戏代码解读
这是一个基于ARCADE MakeCode的猛禽奔跑游戏,类似于经典的跑酷游戏。

1. 枚举和自定义精灵类型
python
  1. class ActionKind(Enum):
  2.     Walking = 0
  3.     Idle = 1
  4.     Jumping = 2
  5.     Dead = 3
  6. @namespace
  7. class SpriteKind:
  8.     Ground = SpriteKind.create()
  9.     Cloud = SpriteKind.create()
复制代码

定义了猛禽的四种动作状态:行走、空闲、跳跃、死亡

创建了两种自定义精灵类型:地面和云朵

2. 初始化地面
python
  1. def initGround():
  2.     global ground1, ground2
  3.     # 创建两个地面精灵
  4.     ground1 = sprites.create(...)
  5.     ground2 = sprites.create(...)
  6.     # 设置位置和速度
  7.     ground1.set_position(scene.screen_width() / 2, 120)
  8.     ground2.set_position(ground1.x + scene.screen_width(), 120)
  9.     ground1.vx = -100  # 向左移动
  10.     ground2.vx = -100
  11.     ground1.z = 2  # 设置图层
  12.     ground2.z = 2
复制代码

创建了两个连续的地面,形成无限循环的效果

地面以恒定速度向左移动

3. 初始化猛禽角色
python
  1. def initRaptor():
  2.     global raptor, run, jump, dead
  3.     raptor = sprites.create(...)  # 创建猛禽精灵
  4.    
  5.     # 创建行走动画
  6.     run = animation.create_animation(ActionKind.Walking, 100)
  7.     run.add_animation_frame(...)  # 添加动画帧
  8.     run.add_animation_frame(...)
  9.    
  10.     # 创建跳跃动画
  11.     jump = animation.create_animation(ActionKind.Jumping, 200)
  12.     jump.add_animation_frame(...)
  13.    
  14.     # 创建死亡动画
  15.     dead = animation.create_animation(ActionKind.Dead, 200)
  16.     dead.add_animation_frame(...)
  17.    
  18.     raptor.z = 3  # 设置图层
  19.     raptor.set_position(15, 94)  # 设置初始位置
复制代码

创建了猛禽角色和三种动画状态

设置了角色的初始位置和图层

4. 碰撞检测
python
  1. def on_on_overlap(sprite, otherSprite):
  2.     global end
  3.     end = 1
  4.     animation.set_action(raptor, ActionKind.Dead)  # 播放死亡动画
  5.     pause(50)
  6.     game.over(False, effects.dissolve)  # 游戏结束
  7. sprites.on_overlap(SpriteKind.player, SpriteKind.projectile, on_on_overlap)
复制代码

当猛禽与障碍物碰撞时触发游戏结束

播放死亡动画后显示游戏结束画面

5. 跳跃控制
python
  1. def on_button_pressed():
  2.     if raptor.y == 94 and end == 0:  # 确保在地面上且游戏未结束
  3.         raptor.vy = -160  # 设置向上的速度
  4.         animation.set_action(raptor, ActionKind.Jumping)  # 播放跳跃动画
  5. controller.any_button.on_event(ControllerButtonEvent.PRESSED, on_button_pressed)
复制代码

按下任意按钮时触发跳跃

设置垂直速度并播放跳跃动画

6. 游戏初始化
python
  1. game.set_dialog_cursor(...)  # 设置对话框光标
  2. game.splash("Raptor Run")  # 显示游戏标题
  3. scene.set_background_color(1)  # 设置背景颜色
  4. initGround()  # 初始化地面
  5. initRaptor()  # 初始化猛禽
  6. info.set_score(0)  # 初始化分数
  7. end = 0  # 游戏结束标志
  8. game.show_long_text("Press any button to jump.", DialogLayout.TOP)  # 显示操作提示
复制代码

7. 物理更新
python
  1. def on_on_update():
  2.     if raptor.y < 94:  # 如果在空中
  3.         raptor.ay = 400  # 应用重力
  4.     else:
  5.         raptor.ay = 0  # 取消重力
  6.         raptor.y = 94  # 固定在地面高度
  7.         if end == 0:  # 如果游戏未结束
  8.             animation.set_action(raptor, ActionKind.Walking)  # 播放行走动画
  9. game.on_update(on_on_update)
复制代码

处理猛禽的重力物理效果

确保猛禽落回地面时恢复行走状态

8. 分数系统
python
  1. def on_update_interval():
  2.     info.change_score_by(1)  # 每50毫秒增加1分
  3. game.on_update_interval(50, on_update_interval)
复制代码

随着游戏进行,分数不断增加

9. 障碍物生成
python
  1. def on_update_interval2():
  2.     global choice, cactus
  3.     choice = randint(0, 4)  # 随机选择障碍物类型
  4.     if choice == 0:
  5.         cactus = sprites.create_projectile_from_side(..., ground1.vx, 0)
  6.         cactus.y = 94  # 设置在地面高度
  7.         cactus.z = 2  # 设置图层
  8.     # 其他障碍物类型...
  9. game.on_update_interval(1000, on_update_interval2)
复制代码

每隔1秒随机生成一种障碍物

障碍物与地面同速向左移动

10. 游戏难度递增
python
  1. def on_update_interval3():
  2.     ground1.vx += -1  # 逐渐加快地面速度
  3.     ground2.vx += -1  # 增加游戏难度
  4. game.on_update_interval(1000, on_update_interval3)
复制代码

随着时间的推移,地面速度逐渐增加

使游戏难度随时间递增

11. 云朵生成
python
  1. def on_update_interval4():
  2.     global cloud
  3.     if Math.percent_chance(40):  # 40%的概率生成云朵
  4.         cloud = sprites.create_projectile_from_side(..., ground1.vx / 4, 0)
  5.         cloud.y = randint(20, 60)  # 随机高度
  6.         cloud.set_kind(SpriteKind.Cloud)  # 设置为云朵类型
  7.         cloud.z = 1  # 设置图层(在背景但在地面前面)
  8. game.on_update_interval(1500, on_update_interval4)
复制代码

每隔1.5秒有40%的概率生成云朵

云朵移动速度较慢,营造景深效果

12. 地面循环
python
  1. def on_forever():
  2.     if ground2.x < -1 * (scene.screen_width() / 2):
  3.         ground2.x = ground1.x + scene.screen_width()  # 重置地面位置
  4. def on_forever2():
  5.     if ground1.x < -1 * (scene.screen_width() / 2):
  6.         ground1.x = ground2.x + scene.screen_width()  # 重置地面位置
复制代码

确保两个地面精灵无缝循环

当一个地面移出屏幕时,将其重置到另一个地面的右侧。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑

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

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑图1

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑图2

实验场景记录

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑图3

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑图5

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑图6

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑图4

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑图7



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑

【花雕动手做】基于 Kitronik 可编程开发板之猛禽奔跑图1
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail