休闲小游戏,和修勾一起来捉蝴蝶🦋(兴趣涂鸦)
从加班说起
这个小游戏还要从周末加班说起,大约是心里想着事,早上不到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畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)