微信小程序游戏开发│智力测试游戏——button版

简介: 微信小程序游戏开发│智力测试游戏——button版

01、程序设计的思路


游戏中题目的显示使用View组件,4个选项使用button组件(按钮组件),在WXML文件中对每个按钮进行tap事件绑定,tap就是单击事件。作为选项答案的Button组件当用户单击后,触发其tap事件,在其事件处理函数btnOpClick中判断对错,统计得分。用户选对则此按钮的颜色改成绿色(#98FB98);用户选错则此按钮的颜色改成红色(#FF99B4);进入下一题的时候把ABCD 4个选项的按钮颜色改回正常颜色(#FBFBFB)。如图1所示。用户单击“上一题”“下一题”按钮后,则更新下标索引index(题目号),从而从题目数组postList读取“上一题”“下一题”题目数据,更新view组件和4个button组件上显示的题目信息,从而开始新的题目测试。


正确答案采用view组件,通过hidden属性设置成隐藏。为了控制hidden属性值,wxml文件中hidden属性值使用变量ny。如果显示正确答案则ny: "false",隐藏则ny: "true"。


02、程序设计的步骤


1. exam.wxml文件

视图文件中组件显示题目,4个按钮显示4个选项,并绑定tap事件处理函数btnOpClick,处理用户选择的答案。由于这些组件显示postList[index]中信息,只要index发生改变,则页面题目信息就会跟随改变。

<!--pages/exam/exam.wxml-->
<scroll-view>
  <view class="timu">{{postList[index].name}}</view>
  <view class="timu" hidden="{{ny}}">{{postList[index].daan}}</view>
</scroll-view>
<scroll-view style='width:100%'>
  <button id='A' class="anniu" bindtap="btnOpClick" style="background-color: {{bcA}};">A.{{postList[index].content[0]}}</button>
  <button id='B' class="anniu" bindtap="btnOpClick" style="background-color: {{bcB}};">B.{{postList[index].content[1]}}</button>
  <button id='C' class="anniu" bindtap="btnOpClick" style="background-color: {{bcC}};">C.{{postList[index].content[2]}}</button>
  <button id='D' class="anniu" bindtap="btnOpClick" style="background-color: {{bcD}};">D.{{postList[index].content[3]}}</button>
</scroll-view>
<view class="huanti">
  <button bindtap="lastQuestion" class="next">上一题</button>
  <button bindtap="nextQuestion" class="next">下一题</button>
  <button bindtap="xianshi" class="next">显示答案</button>
</view>
<text class="jifen">积分:每答对一题积20分,目前得分{{defen}}</text>

2. exam.js页面文件

采用对象数组local_database存储题目信息。每道题是一个对象,由题目name,正确答案daan,ABCD 4个选项内容content组成。

// pages/exam/exam.js
var local_database = [{
  "name": "哈雷慧星的平均周期为?",
  "daan": "C",
  "content": ["54年", "56年", "73年", "83年"]
},
{
  "name": "夜郎自大中“夜郎”指的是现在哪个地方?",
  "daan": "A",
  "content": ["贵州", "云南", "广西", "福建"]
},
{
  "name": "感时花溅泪下句是什么?",
  "daan": "C",
  "content": ["也无风雨也无晴", "明月几时有", "恨别鸟惊心", "老夫聊发少年狂"]
  },
  {
    "name": "在中国历史上是谁发明了麻药",
    "daan": "B",
    "content": ["孙思邈", "华佗", "张仲景", "扁鹊"]
  },
  {
    "name": "京剧中花旦是指?",
    "daan": "B",
    "content": ["年轻男子", "年轻女子", "年长男子", "年长女子"]
  }
]

userAnswer数组存储用户每题选择的答案。

var userAnswer = []; // ["A", " ", "C", " ", " "];用户的答案
Page({
  data: {
    postList: local_database ,
    index: 0, //当前题目号
    bc_default: '#FBFBFB', //默认颜色
    bc_right: '#98FB98', //正确时颜色
    bc_wrong: '#FF99B4', //错误时颜色
    bcA: '', //4个选项内容
    bcB: '',
    bcC: '',
    bcD: '',
    ny: true, //是否显示正确答案,true是隐藏答案
    defen: 0             //得分
  },

nextQuestion ()实现显示下一题信息。由于页面组件显示postList[index]中信息,index增加1,则页面题目信息就会跟随改变成下一题。进入下一题的时候把ABCD 4个选项的按钮颜色改回正常颜色(#FBFBFB)。

nextQuestion: function () { //下一题
    if (this.data.index < local_database.length - 1) {//不是最后一题
      this.setData({
          index: this.data.index + 1,
          ny: true  //是否显示正确答案,true是隐藏答案
        })
      this.setButtonColor() ;
    }
    else
      this.gotoOver(); //跳转测试结束页面
  },

lastQuestino()实现显示上一题信息。由于页面组件显示postList[index]中信息,index减少1,则页面题目信息就会跟随改变成上一题。

lastQuestion: function () { //上一题
    if (this.data.index > 0) {
      this.setData({
        index: this.data.index - 1,
        ny: true  //是否显示正确答案,true是隐藏答案
      })
      this.setButtonColor() ;
    }
  },

上一题和下一题按钮中都调用this.setButtonColor()实现按钮颜色变化。如果本题没有做过,所有按钮为正常颜色(#FBFBFB,未选择中状态)。如果选择过答案,则根据答案是否正确对应按钮显示不同颜色。用户选对则此按钮的颜色改成绿色(#98FB98);用户选错把此按钮的颜色改成红色(#FF99B4)。

setButtonColor: function () {
    //设置按钮正常颜色(未选择中状态)
    this.setData({
      bcA: this.data.bc_default,
      bcB: this.data.bc_default,
      bcC: this.data.bc_default,
      bcD: this.data.bc_default
    });
    var n = this.data.index;
    var jieg = local_database[n].daan;
    var select = userAnswer[n]
    if (select == undefined) return; //本题没有做过直接返回
    if (select == jieg)
      this.setButtonRightColor(select) //答案选择正确,所选按钮为绿色
    else 
      this.setButtonErrorColor(select) //答案选择错误,所选按钮为红色
  },
  //设置正确选择按钮颜色
  setButtonRightColor: function (select) {
    if (select == 'A') {
      this.setData({ bcA: this.data.bc_right }); //正确时颜色
    }
    else if (select == 'B') {
      this.setData({ bcB: this.data.bc_right }); //正确时颜色
    }
    else if (select == 'C') {
      this.setData({ bcC: this.data.bc_right }); //正确时颜色
    }
    else if (select == 'D') {
      this.setData({ bcD: this.data.bc_right }); //正确时颜色
    }
  },
   //设置错误选择按钮颜色
  setButtonErrorColor: function (select) {
    if (select == 'A') {
      this.setData({ bcA: this.data.bc_wrong }); //错误时颜色
    }
    else if (select == 'B') {
      this.setData({ bcB: this.data.bc_wrong }); //错误时颜色
    }
    else if (select == 'C') {
      this.setData({ bcC: this.data.bc_wrong }); //错误时颜色
    }
    else if (select == 'D') {
      this.setData({ bcD: this.data.bc_wrong }); //错误时颜色
    }
  },

自定义事件函数btnOpClick(e)响应按钮的单击事件,如果单击事件发生,参数e.currentTarget.id获取单击对象的id,这个id在exam.wxml中设置过。

<button id='A' class="anniu" bindtap="btnOpClick" style="background-color: {{bcA}};">A.{{postList[index].content[0]}}</button>
  <button id='B' class="anniu" bindtap="btnOpClick" style="background-color: {{bcB}};">B.{{postList[index].content[1]}}</button>
  <button id='C' class="anniu" bindtap="btnOpClick" style="background-color: {{bcC}};">C.{{postList[index].content[2]}}</button>
  <button id='D' class="anniu" bindtap="btnOpClick" style="background-color: {{bcD}};">D.{{postList[index].content[3]}}</button>

id就是上面'A','B','C','D'。从id可以得知用户的选择答案,与正确答案对比从而判断出对错。如果用户选择正确同时计算得分,并根据对错修改按钮的颜色。选择答案正确时按钮显示绿色,错误时按钮显示红色。

//ABCD选项按钮事件函数
  btnOpClick: function (e) {
    var select = e.currentTarget.id; //点击对象的id,这个id在index.wxml中设置了
    var jieg = local_database[this.data.index].daan;
    userAnswer[this.data.index] = select  //保存用户答案
    if (select == jieg) { //答案选择正确
        this.setData({
          defen: this.data.defen + 20
        })
    }
    this.setButtonColor(); //根据对错修改按钮的颜色,正确时绿色错误时红色
  },

gotoOver()跳转测试结束页面。

gotoOver: function () {
    wx.navigateTo({
      url: 'over', //跳转测试结束页面
    })
  },

xianshi()显示本题的正确答案。

//显示答案
  xianshi: function () {
    this.setData({
      ny: false 
    })
  }
})

3. exam.wxss样式文件

/* pages/exam/exam.wxss */
button.next {
  width: 250rpx;
  color: #fff;
  background: #369;
  margin: 5rpx ;
  font-size: 30rpx;
}
.timu{
  text-align: left;
  margin-top: 40rpx;
  line-height: 60rpx;
  font-size: 40rpx;
}
.anniu{
  min-height: 100rpx;
  text-align: left;
  margin-bottom: 20rpx;
  line-height: 90rpx;
  font-size: 40rpx;
  width: 100%;
}
.huanti{
  width: 100%;
  display: flex;
}
.jifen{
  margin-left:10%;
  position: fixed;
  bottom: 15rpx;
}


4. 简单的结束页面

<!--pages/exam/over.wxml-->
<text>测试结束</text>
<image src="over.png"></image>

images里面的over.png是撒花小女孩的图片。运行效果如图2。

image.png

■ 图2  游戏结束界面


智力测试游戏这种游戏需要存储大量的题目数据,这些数据可以直接存储到数组中处理,但是想改变题目数据就会不太方便,所以这些题目数据最好存储到外部文件中,在游戏中能动态地倒入进来。


微信小程序可以读取本地TXT文本、XML文件的数据。对于智力测试游戏最好的方法是将数据存入本地TXT文本、XML文件,在游戏开始时读取本地TXT文本、XML文件的数据,从而获取题目和答案信息。也可以将题目数据文本存储到云端,这样更新云端题目数据文本,达到更新题库目的。


目录
相关文章
|
6月前
|
小程序
【微信小程序】-- 其它常用组件介绍 -- button & image(八)
【微信小程序】-- 其它常用组件介绍 -- button & image(八)
|
2月前
|
人工智能 数据可视化 API
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
103 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
软件测试中的人工智能:改变游戏规则的革新
在这篇技术性文章中,我们将深入探讨人工智能(AI)如何彻底改变了软件测试领域。从自动化测试到智能缺陷检测,AI不仅提高了测试的效率和准确性,还为软件开发团队提供了前所未有的洞察力。通过具体案例,本文揭示了AI在软件测试中应用的现状、挑战及未来趋势,强调了技术创新在提升软件质量与开发效率中的关键作用。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
软件测试中的人工智能:改变游戏规则的技术革命
【10月更文挑战第10天】 本文深入探讨了人工智能在软件测试中的应用,揭示了它如何提高测试效率、减少人为错误,并预示了未来软件测试行业的发展趋势。通过案例分析和原理讲解,文章展现了AI技术在自动化测试、缺陷检测和性能评估等方面的巨大潜力。
|
2月前
|
小程序 容器
微信小程序常用组件的简单使用 view,scroll-view,swiper,swiper-item,text,rich-text,button,image
本文介绍了微信小程序中常用组件的使用方法,包括view、scroll-view、swiper与swiper-item、text与rich-text、button以及image组件。详细解释了各组件的功能、属性以及如何在小程序页面中进行使用。
微信小程序常用组件的简单使用 view,scroll-view,swiper,swiper-item,text,rich-text,button,image
|
2月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
103 4
|
3月前
|
jenkins 测试技术 持续交付
解锁.NET项目高效秘籍:从理论迷雾到实践巅峰,持续集成与自动化测试如何悄然改变游戏规则?
【8月更文挑战第28天】在软件开发领域,持续集成(CI)与自动化测试已成为提升效率和质量的关键工具。尤其在.NET项目中,二者的结合能显著提高开发速度并保证软件稳定性。本文将从理论到实践,详细介绍CI与自动化测试的重要性,并以ASP.NET Core Web API项目为例,演示如何使用Jenkins和NUnit实现自动化构建与测试。每次代码提交后,Jenkins自动触发构建流程,通过编译和运行NUnit测试确保代码质量。这种方式不仅节省了时间,还能快速发现并解决问题,推动.NET项目开发迈向更高水平。
51 8
|
3月前
|
Java Spring UED
Spring框架的异常处理秘籍:打造不败之身的应用!
【8月更文挑战第31天】在软件开发中,异常处理对应用的稳定性和健壮性至关重要。Spring框架提供了一套完善的异常处理机制,包括使用`@ExceptionHandler`注解和配置`@ControllerAdvice`。本文将详细介绍这两种方式,并通过示例代码展示其具体应用。`@ExceptionHandler`可用于控制器类中的方法,处理特定异常;而`@ControllerAdvice`则允许定义全局异常处理器,捕获多个控制器中的异常。
51 0
|
4月前
|
运维 小程序 前端开发
好的商业模式-----小程序定制资料,加一张好看的海报,在推广中就可以找到用户中了,云服务部署收5000,部署是一种服务,定制化,游戏开发创者,仲裁劳务会剪视频好,提供服务,想增加一些新功能收费,会说
好的商业模式-----小程序定制资料,加一张好看的海报,在推广中就可以找到用户中了,云服务部署收5000,部署是一种服务,定制化,游戏开发创者,仲裁劳务会剪视频好,提供服务,想增加一些新功能收费,会说
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的游戏账号交易微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的游戏账号交易微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)