3小时做了个给我引流120人的“老年痴呆测试器”小程序-2/1000

我是天元,立志做1000个有趣的项目的前端,公众号:cssandjs

如果你喜欢的话,请点赞,收藏,转发

评论领取早发现早治疗勋章

最终成品地址:#小程序://1000个项目/W4dqBC5NGIUADog(微信内打开)

背景

就在昨天(03-19),我的小程序审核终于通过了,于是我觉得应该做个小程序引流测试下。主题应该是有趣的,用户乐于分享的。此时脑海里闪出一个画面:

于是我脑子里的任督两条大筋马上意识到就是这个了。

需求分析

这个需求很简单,具体如下:

  • 开始提出三个物品
  • 然后开始10道计算题
  • 提出一个跟开始相关的最终问题
  • 通过所有测试,显示你没有得"老年痴呆"
  • 如果有任何一个问题回答错误,则显示"你得了老年痴呆"

相关UI如下

具体实操

项目目录如下

主要包含一个页面和四个状态的组件,组件为

  • start,有一个开始按钮,点击开始游戏
  • playing,展示初始三件物品
  • math,显示10道数学题,每道题为了增加紧迫性,增加5秒倒计时
  • status,显示结果页面

核心代码

三件物品的初始化

首先我准备了一个物品的素材库,按照5个分类,每个分类5个物品来制作了一个列表。整体数据结构如下:constant.js

js 复制代码
export const ITEM_LIST = [
  {
    category: "体育",
    items: [
      {
        id: 1,
        name: "足球",
      },
      ...
    ],
  },
...
]

在开始时我生成了三个不重复的随机数,因为数字不大,这里直接while了下,对于相同的数字重新生成。

js 复制代码
  const randomNums = new Set();
    while (randomNums.size < 3) {
      randomNums.add(Math.floor(Math.random() * 5));
    }

然后再生成一个0-4的随机数,取`items``里的单个子对象。

随机算数的生成

这里依旧采用了随机数,其实跟我上一篇给孩子写加减法的原理有点像,取随机数,然后加入运算符。这里后续可以优化下,我这里写的比较粗糙了。

js 复制代码
	// index.js 

      const operatorList=['+','-','x']
      // 第一个数使用历史记录的第一个数,同时计算的最终结果在回答正确后,会被记录为第一个

      let mathFirtNumber = this.data.mathFirtNumber;

      // 生成最终的结果数字
      let successNumber = Math.floor(Math.random() * 99) + 1;
      //  获取运算符,我按照+-x的顺序获取,这里每次执行函数后operatorIndex会++
      const operator = operatorList[operatorIndex % 3];

      // 因为不会出现 1 + -1,1 - -1的情况,所以对负数做了判断,如果有负数出现,则改为正数.然后将运算符反转
      let mathSecondNumber;
      if (operator === "+") {
        mathSecondNumber = successNumber - mathFirtNumber;
        if (mathSecondNumber < 0) {
          mathSecondNumber = -mathSecondNumber;
          mathOperator = "-";

        }
      } else if (operator === "-") {
        mathSecondNumber = mathFirtNumber - successNumber;
        if (mathSecondNumber < 0) {
          mathSecondNumber = -mathSecondNumber;
          mathOperator = "+";

        }
      } else if (operator === "x") {
        mathSecondNumber = Math.floor(Math.random() * 4) + 1;
        successNumber = mathFirtNumber * mathSecondNumber;
      }
      // 生成五个随机数,其中一个是正确答案
      const newNumberList = [successNumber];
      for (let i = 0; i < 5; i++) {
        newNumberList.push(Math.floor(Math.random() * 99) + 1);
      }
      // 将正确答案的位置随机放置下
      const numberList = newNumberList.sort(() => Math.random() - 0.5);
      ...

最终问题的展示

为了给玩家绕个弯子,我加入了一个使用类别,而不是具体名称,所以看到的问题是:

分享信息

为了增加趣味性,我设置了一个恶搞的分享信息

github代码地址

github.com/tinlee/1000...

历史阅读推荐

1/1000-用node帮老婆做excel工资表

3/1000-父爱如山-用vue3给女儿做做个10以内加减法练习工具

我是天元,立志做1000个有趣的项目的前端。

如果你喜欢的话,请点赞,收藏,转发

评论领取早发现早治疗勋章

相关推荐
摆烂工程师14 分钟前
今天 Cloudflare 全球事故,连 GPT 和你的网站都一起“掉线”了
前端·后端·程序员
拉不动的猪17 分钟前
一文搞懂:localhost和局域网 IP 的核心区别与使用场景
前端·javascript·面试
亿元程序员44 分钟前
你支持游戏内显示电量、信号或时间吗?
前端
阿珊和她的猫1 小时前
HTTP:Web 世界的基石协议详解
前端·网络协议·http
未来之窗软件服务1 小时前
自建开发工具IDE(二)文件托拽读取——东方仙盟炼气期
开发语言·前端·javascript·仙盟创梦ide·东方仙盟
conkl1 小时前
构建健壮的前端请求体系:从 HTTP 状态码到 Axios 实战
前端·网络协议·http
g***B7381 小时前
前端组件设计模式,复用与扩展
前端·设计模式
chxii1 小时前
第六章:MySQL DQL 表之间的关系 自连接 一对一、一对多、多对一、多对多
java·前端·mysql
U***49832 小时前
前端性能优化插件,图片压缩与WebP转换
前端
c***V3232 小时前
前端构建工具发展,esbuild与swc性能
前端