暴打七夕青蛙——HarmonyOS服务卡片小游戏 原创 精华
前言
昨天是七夕节,令我“幸福”的是,被热心市民送来了七夕青蛙,听取一天了蛙声一片。吃饱了一整天的狗粮后,有点撑着,于是决定加班加点,用服务卡片实现了一个简单的小游戏:暴打七夕青蛙!游戏虽简单,但玩起来是真的爽!
效果展示视频
效果图
编写过程
更改程序标签和程序的图标
在resources文件下的zh.element中的string.json中修改如下,就把应用的名字修改为“七夕青蛙”,而主页面也会从“Hello World!” 变成 “GoodBye World!”
在config.json文件修改icon的值,引用到media里面的青蛙。
创建JS卡片
编写卡片的样式
游戏卡片的结构非常非常非常非常简单,就是一个div容器,通过设置div容器的背景图来实现游戏效果。playGame卡片的hml代码如下:
GamePanel的样式稍微复杂一点,但是其实也很简单。需要设置两个变量,得分score和倒计时countdown,其中得分设置成一个上下结构。hml代码如下:
给变量赋初值
在playGame卡片的index.json文件中,修改“data”如下图,默认一开始是没有青蛙出现的。
在GamePanel卡片的index.json文件中,修改“data”如下图
设置卡片的动作事件
“actions”数组是所有事件的集合,下面跟着每个事件的名称,名称里面又包含事件的类型“action”和携带的参数“params”。
在playGame卡片的index.json文件中,修改“actions”如下图
在GamePanel卡片的index.json文件中,修改“actions”如下图
编写游戏部分
七夕青蛙的随机出现
七夕青蛙的出现上文提到过是通过设置div容器的背景图片来实现,所以可以通过产生一个随机数的方式来随机地设置div容器的背景来实现游戏过程,因此需要把div的背景设置成变量,并添加一个onclick标签。
创建一个数据体来存储卡片的信息,并使用MAP将其存储起来
不同卡片的回调事件都是共用一个回调方法的,所以想要区分到底是哪一种,哪一个卡片发出的回调,就需要把卡片的信息:卡片的名称,卡片的ID,卡片的相关参数等记录下来。这里采用编写一个卡片数据类来存储1*2格式的卡片的信息。
修改onCreateForm()方法
onCreateForm()方法在两种情况被调用。第一种是上滑呼出卡片的时候,这时候上滑卡片是哪一种卡片,就会调用一次onCreateForm()方法生成一张该种卡片;
第二种情形是长按应用,然后点击"服务卡片",此时会显示应用的所有卡片,并每一张卡片都会回调一次onCreateForm()方法并生成一个卡片,当选择了其中某一张卡片添加到桌面之后,其他卡片回调onDeleteForm()方法来删除卡片。所有卡片都是调用同一个方法一起生成的,所以需要对卡片的名称进行一次判断,以确定卡片的种类。在onCreateForm()中添加如下代码:
修改onDeleteForm()方法
在onDeleteForm()方法中,要补充两种卡片删除时的设置,这里很重要,一开始我没有对游戏卡片进行设置,结果运行会抛出没有对应的FormId的错误,查看卡片的时候所有卡片都会调用onCreateForm()方法,然后所有12卡片的ID都写入Map里面,但是当其中一个卡片放置到桌面,而其他卡片回调onDeleteForm()进行删除的时候,12卡片的信息并没有从Map中移除。这就会导致并不是每一个Map中的FormId都有对应的卡片。
编写变量的更新方法
由于后面的操作需要频繁地用到更新,修改卡片上的变量的操作,所以在进行下面的操作之前,我们先编写一个修改变量的方法。
修改onTriggerFormEvent()方法
在这个游戏中,总共有三个点击事件需要响应:开始键,停止键,打青蛙。同样的,这三个事件共用一个回调方法,因此需要通过事件所携带的参数来判断到底是哪一个事件回调了方法。在onTriggerFormEvent()中添加如下代码:
编写游戏线程
在onStart()方法中添加游戏线程如下:
编写倒计时线程
在onStart()方法中编写倒计时线程如下:
项目踩的小坑
1.score要设置成静态变量,否则被释放,导致尽管打中很多次都只能到10分,而不能够往上累积。
2.onDeleteForm()方法要记得从Map中remove掉已经删除掉的卡片的ID
最后
最后祝有情人终成眷属啦,祝单身狗早日脱单!还有就是感谢我那群为我瞎操心的朋友们!(文后附上脱单压缩包)
青蛙的头像莫名的魔性。
单身狗的福利吗!!!
孤寡可还行 hhhhh
孤寡,有点意思,score要设置成静态变量
脱单压缩包哈哈哈
不孤寡 不孤寡 不孤寡
哇,求楼主完整代码!!!!!!!!!
在文章结尾的压缩包呢
不孤寡,楼主这么优秀,怎么可能没女朋友。哈哈,再不行,自己new一个对象。如今的你无人问津,他日别人高攀不起。(爱情方面)。楼主未来可期。