眼力考验小游戏,我写了一个手势版本的找一找【CSS畅想】

举报
叶一一 发表于 2023/02/22 20:28:48 2023/02/22
【摘要】 先玩一阵试试身手 🎮没有排行,积分无法兑换任何礼品,暂时想到这些。试试身上简简单单游戏介绍我本来是想做成找茬版的,图案尽量小,尽量多。但是我发现,纯属自我找茬。毕竟原生的写起来,是纯纯靠代码的堆积。手势找一找,即在相似的手势中找到不同的那一个,选对加一分,选错不加分。找对,给出成功提示,并重置页面的图案位置。成功提示是自动消失的。也可以点击重新开始按钮,重置页面的图案位置。游戏设计手势图案...

先玩一阵试试身手 🎮

没有排行,积分无法兑换任何礼品,暂时想到这些。

试试身上

简简单单

游戏介绍

我本来是想做成找茬版的,图案尽量小,尽量多。但是我发现,纯属自我找茬。毕竟原生的写起来,是纯纯靠代码的堆积。

手势找一找,即在相似的手势中找到不同的那一个,选对加一分,选错不加分。

找对,给出成功提示,并重置页面的图案位置。成功提示是自动消失的。

也可以点击重新开始按钮,重置页面的图案位置。

游戏设计

手势图案

手势图案有两种,比耶和比心。两种结构是一致的。布局为7行3列。即一行三个,一共7行。

比心手势

<div class='heart' id='heart'>
  <div class='heart-r'></div>
  <div class='finger finger1'></div>
  <div class='finger finger2'></div>
  <div class='finger finger3'></div>
  <div class='finger finger4'></div>
  <div class='finger finger5'></div>
  <div class='palm'></div>
</div>

比耶手势

<div class='gesture gesture1' id='gesture1'>
  <div class='finger finger1'></div>
  <div class='finger finger2'></div>
  <div class='finger finger3'></div>
  <div class='finger finger4'></div>
  <div class='finger finger5'></div>
  <div class='palm'></div>
</div>

比心手势随机计算

  • 这个随机摆放位置有讲究,想象成一个表格,它会属于7行3列中的某一个单元格。也就是说随机数获取需要两个,第一个行位置,第二个列位置。
  • 获取随机数的方法是同一个,公共方法为获取某个范围值的随机整数。先获取随机数,然后向下取整即可。
  • 得到比心手势的位置之后,除了将比心的手势放到对应的位置,还要将该位置的比耶手势隐藏掉。

公共随机数获取方法

// 获取随机数
function getRandomNum(m, n) {
  let num = Math.random() * (m - n + 1) + n;
  num = Math.floor(num);
  return num;
}

获取比心的位置

// 获取随机的行和列
function randomIndex() {
  let r = getRandomNum(0, rNum); // 行
  let c = getRandomNum(0, cNum); // 列
  r = Math.floor(r); // 向下求整
  c = Math.floor(c); // 向下求整
  let indexR = r + 1;
  let indexC = c + 1;
  let top = r * 100;
  let left = c * 100;
  let indexNew = r * cNum + indexC;
  let gestureItemNew = gestureObj[indexNew];
  gestureItemNew.classList.add('hidden');
  heart.style.top = top + 'px';
  heart.style.left = left + 'px';
  heart.classList.add('show');
}

重置页面图案位置

重置即要将比心手势放到新获取的位置,又要将上一个隐藏的比耶手势重新展示出来。注意一种特殊情况,如果两次获取的比耶手势的位置一样,则不需要释放该手势。

if (index && index !== indexNew) {
  let gestureItem = gestureObj[index];
  gestureItem.classList.remove('hidden');
}
index = indexNew;


捕获手势

  • 首先获取当前鼠标点击的位置,这个位置需要减去元素距离浏览器的距离才是最终准确的位置。
  • 将该位置除以100(每个手势的元素的宽和高都是100px),并且向下取整,得到的就是点击的元素前面的行数和前面的列数。
  • 最终的位置的计算公式为:前面的行数 * 每行数量 + 前面的列数。
  • 如果点击的是比心手势正确的位置,则给出成功提示,分数增加1,且2秒后重置图案位置。
gestureBox.addEventListener('click', e => {
  let eLeft = e.pageX - gestureBox.offsetLeft;
  let eTop = e.pageY - gestureBox.offsetTop;
  let pointerR = Math.floor(eTop / 100); // 行
  let pointerC = Math.floor(eLeft / 100); // 列
  let pointerIndexC = pointerC + 1;
  let pointerIndex = pointerR * cNum + pointerIndexC;
  // 点击的是比心手指所在的位置
  if (gestureFlag) {
    if (pointerIndex === index) {
      scoreNum += 1;
      score.innerHTML = scoreNum;
      gestureFlag = false; // 不可再次点击
      modal.style.display = 'block';
      setTimeout(function () {
        modal.style.display = 'none';
        resetFunc();
      }, 2000);
    }
  }
});


未完待续

等哪天,我的趣味值爆表之后,我就开发一个鬼畜版的,图案会跑、怎么也逮不住的那种。😋

是谁说来着,“把痛苦留给别人,快乐留给自己”。

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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