休闲小游戏,和修勾一起来捉蝴蝶🦋(兴趣涂鸦)

举报
叶一一 发表于 2023/02/22 20:27:34 2023/02/22
【摘要】 从加班说起这个小游戏还要从周末加班说起,大约是心里想着事,早上不到8点就醒了,于是开启了加班模式。吃过晚饭,经过一天的锤炼,想放松一下。但是最近的小游戏都太坑了,过关比抽到SSR还难(当年我可是抽到过茨木、妖刀姬、酒吞、辉夜姬的)。于是,我决定自己做个小游戏,规则一定要简单,场景一定要清新。捉蝴蝶🦋小游戏先来试玩一下吧。小蝴蝶+1小蝴蝶,飞啊飞,捉了一只又一只,还剩几只。游戏场景我最近解锁...

从加班说起

这个小游戏还要从周末加班说起,大约是心里想着事,早上不到8点就醒了,于是开启了加班模式。

吃过晚饭,经过一天的锤炼,想放松一下。

但是最近的小游戏都太坑了,过关比抽到SSR还难(当年我可是抽到过茨木、妖刀姬、酒吞、辉夜姬的)。

于是,我决定自己做个小游戏,规则一定要简单,场景一定要清新。


捉蝴蝶🦋小游戏

先来试玩一下吧。

小蝴蝶+1

小蝴蝶,飞啊飞,捉了一只又一只,还剩几只。

游戏场景

我最近解锁了人肉扫描仪的功能,所以我现在刷到图片,首先想到的是,里面的图案、图形,我能不能实现,怎么实现。

所以当我想做小游戏的时候,我先从大脑库存里找到一张图,然后从图片上的信息,寻找适合的游戏素材,终于让我找到一张有蝴蝶的图片。所以我决定做一个抓蝴蝶的小游戏。

既然是抓蝴蝶,游戏场景肯定是春日啊,鲜花啊,小动物啊,等等这些充满童趣的内容。


风铃花 🎐

风铃花,顾名思义,像一个小铃铛的花。受地心引力的影响,花开口向下,所以花瓣是向下的。

半圆形花瓣的形状,如果没有外边框,很好实现,加上边框,所以加了一个伪元素进行遮挡,将花瓣的部分遮住,就形成了半圆的效果。

.campanula-c {
  border-radius: 100%;
  background: #fff;
  border: 1px solid #734631;
  position: absolute;
  z-index: 29;
}
.campanula-c::before {
  content: '';
  background: #fff;
  position: absolute;
}

修勾 🐶

今天的主角之一,只有一个背影,所以比较好实现。

修勾的耳朵类似花瓣的实现,也是用伪元素遮挡了部分内容。

.dog-ear {
  background: #fffffd;
  border: 2px solid #684134;
  width: 25px;
  height: 40px;
  border-radius: 100%;
  position: absolute;
  z-index: 119;
}
.dog-ear::before {
  content: '';
  background: #fffffd;
  position: absolute;
  border-radius: 100%;
  height: 20px;
  width: 25px;
  top: -3px;
}

蝴蝶 🦋

今天的主角之二,蝴蝶是简笔画,所以比较好实现,两个翅膀+两个触角+身体(并没有)。

触角是直线+圆。

讲讲翅膀的实现吧,有点像灯泡💡的形状,其实是一个圆,然后将三个角的半径值设置为另外一个角的二倍,最终图形就能呈现出灯泡的效果。

.butterfly-wing {
  width: 24px;
  height: 24px;
  background: #f5e296;
  border: 2px solid #684529;
  border-radius: 200% 200% 200% 100%;
  position: absolute;
}


游戏设计

游戏规则

抓蝴蝶有两种结果,捉住和没捉住(并不是废话)。

我是依据结果设置了两种效果,以及最终抓住蝴蝶🦋的数量。

捕捉结果

内容

捉住

1、对应蝴蝶位置右上角展示“+1”的字样。

2、蝴蝶消失,2秒钟之后蝴蝶重新刷新。(和游戏中野怪一样,刷掉之后,过固定或者不固定的时间重新刷新出来)

3、屏幕左上角蝴蝶数量增加1。

没捉住

1、对应蝴蝶位置右上角展示“Miss”的字样。

2、屏幕左上角蝴蝶数量不会增加。

实现

  • 捕捉时,辅助字样的展示位置设置,最好是根据鼠标的位置计算出文字出现的位置,但是目前游戏就三个小蝴蝶,我就直接设置了一个字样对象枚举,哪个蝴蝶被捕捉,就用哪个枚举的数据就行了。
  • 捕获随机数就两个,0或者1。我是这样实现的,获取【1,,2)的随机数,当获取的数值大于等于1的时候,捕获随机数的值设置为1,小于1时,捕获随机数的值设置为0。
  • 当捕获随机数的值是0时,表示没有捉住,这个时候只需要展示“Miss”的字样。
  • 当捕获随机数的值是1时,表示捉住了,这个时候除了展示“+1”的字样,左上角蝴蝶数量增加1,且当前蝴蝶小时,2秒之后重新展示(通过定时设置)。
var butterfly1 = document.getElementById('butterfly1');
var butterfly2 = document.getElementById('butterfly2');
var butterfly3 = document.getElementById('butterfly3');
var score = document.getElementById('score');
var add = document.getElementById('add');
var miss = document.getElementById('miss');
var scoreNum = 0;
var triggerObj = {
  1: {
    top: 55,
    left: 75,
    butterfly: butterfly1,
  },
  2: {
    top: 150,
    left: 160,
    butterfly: butterfly2,
  },
  3: {
    top: 50,
    left: 260,
    butterfly: butterfly3,
  },
};
let butterflyFlag = true;
// 随机获取0或者1
function getRandomNum() {
  let num = Math.random() * 2;
  let digit = 0;
  if (num >= 1) {
    digit = 1;
  }
  return digit;
}
// 捕获蝴蝶
function capture(type) {
  if (butterflyFlag) {
    let randomNum = getRandomNum();
    let triggerItem = triggerObj[type];
    butterflyFlag = false;
    // 没有抓住
    if (randomNum === 0) {
      miss.style.top = triggerItem.top + 'px';
      miss.style.left = triggerItem.left + 'px';
      miss.style.display = 'block';
      setTimeout(function () {
        miss.style.display = 'none';
        butterflyFlag = true;
      }, 2000);
    } else {
      add.style.top = triggerItem.top + 'px';
      add.style.left = triggerItem.left + 'px';
      scoreNum += 1;
      score.innerHTML = scoreNum;
      add.style.display = 'block';
      triggerItem['butterfly'].style.display = 'none';
      setTimeout(function () {
        add.style.display = 'none';
        triggerItem['butterfly'].style.display = 'block';
        butterflyFlag = true;
      }, 2000);
    }
  }
}
butterfly1.addEventListener('click', e => {
  capture(1);
});
butterfly2.addEventListener('click', e => {
  capture(2);
});
butterfly3.addEventListener('click', e => {
  capture(3);
});

未完待续

其实自己开发小游戏,比较重要的是游戏规则,如果游戏场景这些,绘制的不够精美都没有关系,有了游戏规则,好玩就行。

还有这种简单的小游戏,解压又有趣,如果有时间,我准备再开发几个。🎮

作者:非职业「传道授业解惑」的开发者叶一一
简介:「趣学前端」、「CSS畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。