Funpack第十期-在Kitronik ARCADE平台上复刻诺基亚手机经典游戏rapid roll
在Kitronik ARCADE平台上复刻诺基亚手机经典游戏rapid roll
标签
嵌入式系统
氢化脱氯次氯酸
更新2021-08-26
896

1 平台介绍

1.1 Kitronik ARCADE

Kitronik ARCADE是一款专门设计用于运行复古街机游戏的平台 - 来自英国的Kitronik公司专为创客教育市场推出的Kitronik Arcade,搭配微软MakeCode Arcade编辑器一起使用。Kitronik Arcade功能齐全,符合人体工程学设计,舒适易用。具有全彩色 LCD 宽视角屏幕、用于音频反馈的压电发声器、用于触觉反馈的振动电机、6 个游戏玩家输入按钮、一个菜单按钮、一个重置按钮和一个开/关开关。完美游戏体验所需的一切。还具有软件音量控制、一个 USB 编程端口和 2 个为专家级用户提供的扩展端口。

ARCADE 可以由 3xAA 电池或通过微型 USB 连接器供电,电池座位于 PCB 的背面。三个电池座的位置还可以用作手柄,在游戏时提供最大的舒适度和控制力。

FtOQGLZXIQFsGpzeVn7nEJ_dFnxz

1.2 Microsoft MakeCode Arcade

MakeCode Arcade 编辑器旨在让从初学者到经验丰富的游戏爱好者,都可以创建在浏览器或掌上游戏机上运行的复古街机游戏。它由拖放的块组成,这些块组合在一起形成程序。你还可以使用 Javascript 为 ARCADE 编写代码,并且已经支持 Python 编辑器!

MakeCode Arcade 的重点是教育,网站上提供了大量资源来促进这一点。可根据指导教程来创建简单游戏,也可以打开和学习更复杂的游戏,学习社区成员编写的游戏、游戏概念教程、探索图形和数学的教程、课程计划、计算机科学课程、视频教程等等!

2 任务及实现方案

2.1 本期任务

任务一:参考官方教程,移植或设计一款游戏(要求: 不得与官方提供的游戏重复;可供选择:打地鼠、俄罗斯方块等)。

2.2 游戏简介

本次任务我复刻了诺基亚手机的经典游戏—— rapid roll。游戏规则是玩家使用左右键控制小球移动,使小球落在挡板上并且防止其碰到尖刺或掉落底部。默认有三条生命,碰到尖刺或掉落底部失去一条生命,吃到心增加一条生命,分数由小球总共的下落距离决定,即下落过程中持续得分,在挡板上不得分。

游戏程序的编写全部在Microsoft MakeCode平台上使用方块编程完成,没有手动编写任何代码。

FmWtsTvlMoHM0yJmIqyBMYelSkRG

3 实现过程

3.1 初始化

开机时,进行背景图片,分数、生命值、板移动速度和板生成时间间隔等各项参数的初始化,之后在屏幕中间生成一个球和一个板。

FgoV716KGG2GAxbZjvP20i9gYk9b

ballCreate函数为球的生成函数,两个参数分别为生成位置的横纵坐标。由于屏幕尺寸为160*120,参数为80,60时球生成在屏幕中间。在函数内部首先创建一个Player类型的精灵作为玩家控制的球,并设置按键控制的vy为0使得玩家只能用左右键控制球。之后设置球保持在屏幕内,最后将ball_present变量置为1代表场地上已经生成球。

Fk9FE1busKhDxfpoNeZg1Zcg9AyQ

planeCreate为板的生成函数,第一个参数为板的类型(0:正常板board,1:带心的板board+life,2:刺板thorn),后两个参数为板的中心坐标。根据第一个参数生成对应的板,设置其向上移动的速度为speed(开机时定义),并开启自动销毁,即移出屏幕时销毁。

FsB42BmIMK7oMaA2ZvCp-zJnMwTz

3.2 板定时生成

每隔一段时间,屏幕下方需要生成新的板,生成间隔为gen_time(开机时定义,单位为ms),首先判断是否需要生成球,若ball_present为1,代表屏幕中有球,直接生成一块板。板的类型由随机数产生,70%概率为正常板,20%概率为刺板,10%概率为带心的板,板的横坐标随机,纵坐标在屏幕底部位置。若ball_present为0,代表球刚被消灭,在底部中心位置重新生成一个球和正常板。

FhezYpmwqAGh2D5iSuVBcgWivTiF

在原版rapid roll中,随着游戏时间增加,板的速度越来越快。makecode提供的方块函数虽然可以改变板的速度,但是板的生成间隔时间在初始化后已经确定了,这样会导致随着速度增加,板间距离越来越远,造成游戏体验的下降。所以我暂时没有添加速度调整的功能,有兴趣的同学可以尝试解决这个问题,实现难度的动态变化,提高游戏的挑战性。

3.3 球的运动

当球没有在板上时为自由落体状态,设置其y轴加速度为500。利用球的y轴速度进行加分判定,若y轴速度大于0,代表球为下落状态,此时分数不断增加。当球在屏幕最顶部或者屏幕最底部时,将球销毁。

FpBZ4nsA8WE-IoEU1KtLqZ0a3xcm

当球落到板上时,设置球的y轴加速度为0,速度与板相同,代表球与板一同上升:

FoTl2kkWXxwcZLz-vQNJdZ_IH0-L

当球与心重合时,生命值加一:

Fod84XECTSNBRnOIXpXW2COsKOQW

当球落到刺板上时,直接将球销毁:

Fup2Yu_OiEiaNFoVkjwtX059bqgh

在销毁回调函数中,播放销毁的音效与特效,生命值减一,设置ball_present为0以便下次生成板的同时生成一个新球:

FuKgl8JwoiS4uhpinORBbtVQxKfw

4 心得体会

本次funpack活动的游戏手柄开发板非常有创意,在学习编程的同时还可以设计一款游戏,极大地调动了我的学习兴趣。且开发平台makecode可以使用图形化编程,不需要编写任何代码,容易上手入门。

附件下载
arcade-rapid-roll.uf2
游戏文件
团队介绍
团队成员
氢化脱氯次氯酸
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号