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个有趣的项目的前端。

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

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

相关推荐
cs_dn_Jie28 分钟前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic1 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿1 小时前
webWorker基本用法
前端·javascript·vue.js
cy玩具2 小时前
点击评论详情,跳到评论页面,携带对象参数写法:
前端
qq_390161772 小时前
防抖函数--应用场景及示例
前端·javascript
John.liu_Test3 小时前
js下载excel示例demo
前端·javascript·excel
Yaml43 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
PleaSure乐事3 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro
哟哟耶耶3 小时前
js-将JavaScript对象或值转换为JSON字符串 JSON.stringify(this.SelectDataListCourse)
前端·javascript·json
getaxiosluo3 小时前
react jsx基本语法,脚手架,父子传参,refs等详解
前端·vue.js·react.js·前端框架·hook·jsx