目前,游戏已经到了收尾阶段,为了配合公测,特意做了一个问卷调查模块,用于收集玩家对游戏的反馈。下面使我们的设计历程。

设计之初,我们曾经想过使用数据库保存,为了实现这个模块将增加配置库里2-3个表,因为考虑到这个模块属于不大重要的模块(一次性使用),这样做增加了数据库的维护了成本,我们的游戏的配置表已经很多了很多了。

于是我们使用文件来保存问卷调查的配置信息:

题目的类别: 1: 单选;2: 多选 3:问答

    题号 => array('subject' => '问卷调查的题目','type'    => '题目的类别','options' => array(题号 . 序号 => '题目的答案',),),

如以下的格式:

return array(2 => array('subject' => '你觉得目前游戏在美术方面存在哪些不足?(多选)','type' => 2,'options' => array(201 => '装备道具贸易品等不够华丽',202 => '港口场景画不够写实',203 => '港口场景画不够写实',),),
);

注意:题号和序号的必须联合 ,这样才能保证题目对应相应的答案,这是构造这个数组的特别需要注意的地方。

所有的玩家都能参加这次问卷,也就是说这个表不涉及到分库的问题,于是我们在”全局库“中建立一张表,每个用户一条记录,字段有id ,uid, result。result是用户问卷调查的结果的序列化,使用json_encode序列化。

知识点:

1)获取一个文件中的数组,使用include。

2) 构建一个合理的数组

3)问卷调查的设计思路

这次问卷调查的主要需求:

1)每个玩家只做一次问卷调查

2)只有问卷调查所有的题目做完才能提交

针对第一个需求,在提前之前检测一下玩家是否已经提交。对于第2个问题,我们是这样做的:使用一个json保存玩家的选择 格式为{题号:答案},最后统计这个json的长度,和问卷调查的总长度对比,就可以知道题目是否做完,最后,通过ajax把json对象传到服务器,即可统计玩家的选择了。

获取单选题答案

    $(".radio1").each(function () {var questionId = $(this).attr('subject');var answerId = $("input[type='radio']:checked", this).val();if (answerId) {result[questionId] = answerId;}});

知识点:

1) $.each() 和 $(‘').each()的区别

2)$(':checked')和$(":checked", this)的区别

3)需要验证答案是否为空,因为即使获取不到答案,也会追加到result中

4)动态构建json的方法。

5) $(this).find('')这个函数使用

获取多选题答案:

    // 获取多选题答案$(".checkbox2").each(function () {var questionId = $(this).attr('subject');var answerId  = [];// 循环读取多个选择项$("input[type='checkbox']:checked", this).each(function () {answerId.push($(this).val());});if (answerId.length -> 0) {result[questionId] = answerId;}});

知识点:
1)多选题多选,比单选题,多一次循环

2)判断数组为空的方法

获取json的长度,没有专门的函数,只能循环json

    // 获取json的长度var j = 0;for (var i in result) {j++;}

提交json到服务器,这里让我想到了,在URL中,可以直接把JS数组传到服务器中,那可不可以把json对象直接传入到URL中呢,最后测试不可以。于是想到了遍历json,自己构建合法的URL,还有一个方法就是 使用jquery $_get() 第二个参数,把json直接传入到服务器。

在做这个模块的时候,还遇到一个知识点就是 使用json_decode()把json转成数组,需要加入第二个参数并设置为true,否则是一个对象。

最后学到一点设计的问题,必须检查玩家提交的结果:验证题号和答案的合法性。

问卷调查模块实现的过程中的历程相关推荐

  1. 模块加载过程代码分析1

    一.概述 模块是作为ELF对象文件存放在文件系统中的,并通过执行insmod程序链接到内核中.对于每个模块,系统都要分配一个包含以下数据结构的内存区. 一个module对象,表示模块名的一个以null ...

  2. 使用ionic开发移动app的过程中经验总结

    最近在使用ionic开发几个移动端的模块,使用过程中积累一些经验,在此总结下,以供参考.后续开发过程中如果有其他问题,会随时补充. 这些问题经过归纳总结分为以下几大类: html angularJs ...

  3. 复现Transformer架构主干网络过程中的心路历程和个人感悟

    心路历程:复现Transformer架构主干网络过程中,感受颇多,以前只是使用相关衍生模型,但是,从来没有深入的研究过Transformer架构的细节处理工作,这几天真的是成长了.这两年第三次复现作者 ...

  4. 现在无法开始异步操作。异步操作只能在异步处理程序或模块中开始,或在页生存期中的特定事件过程中开始...

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 这篇没啥技术含量,用来小记一番 错误信息 "System.Invalid ...

  5. matlab运行过程中出现找不到指定模块问题解决

    matlab运行过程中出现找不到指定模块问题解决 参考文章: (1)matlab运行过程中出现找不到指定模块问题解决 (2)https://www.cnblogs.com/dyllove98/p/32 ...

  6. 光模块组装过程中常见问题分析及解决方法

    光模块组装过程中会出现一些问题,经常使用光模块的人可能会知道,下面就分享了组装光模块的问题及原因分析,并附有解决方案,大家参考下,希望对大家有帮助 在光模块组装过程中会出现一些问题,经常使用光模块的人 ...

  7. 如何debug preloader bootup time 问题以及开机过程中preloader慢抓取 preload模块开机log

    [DESCRIPTION] 有时候bootup过程中,会出现preloader启动时间过程的问题.此FAQ帮助你如何去debug这个阶段的perfoamnce问题. 建议测试时一定要用user loa ...

  8. linux优化网页加载过程,【zz】Linux起步过程中硬件模块的加载

    [zz]Linux起步过程中硬件模块的加载 [zz]Linux起步过程中硬件模块的加载 日期:2014-05-16 浏览次数:20354 次 [zz]Linux启动过程中硬件模块的加载 文章来源不详. ...

  9. Blender雕刻模块:如何在雕刻过程中无缝合并物体

    本文基于Blender 2.8正式版 在雕刻过程中经常会新建一些物体然后合并进来一起雕刻,但是实际操作中会出现很多意想不到的问题 例如:简单地把两个物体Ctrl + J合并到一起 使用Smooth笔刷 ...

最新文章

  1. 软件开发中 前台、中台、后台英文_中台产品那些事儿-啥是中台
  2. php怎么写官网,PHP - Manual: 简介 (官方文档)
  3. 【JEECG技术博文】JEECG图表配置说明
  4. Android-Apk插件化研究
  5. java映射和反射的理解
  6. 将Ubuntu的引导写入自己所在分区——变色龙引导Linux,Windows,Mac OS(苹果系统)攻略之一
  7. 基础知识(五)Blend2015 具有强大的组合功能,即合并功能。
  8. 深度学习实例——Flappy Bird
  9. 利率浮动幅度bp什么意思,浮动利率bps换算百分比
  10. IT项目经理如何正确做好项目实施
  11. Facebook多账号运营如何防关联
  12. 路由器与交换机的工作原理(转)
  13. 【gitLab】gitLab新建项目步骤
  14. (爬取猫眼电影TOP100的电影信息(含图片、评分等))
  15. 数据系统架构-6.BI数据展示平台
  16. 计算机仿真模拟python,计算机仿真之电子宠物,,
  17. 腾讯微下载android和ios共用一个二维码
  18. [Android 13]开机动画原理分析
  19. 设置百度地图的缩放比例
  20. [MATLAB]曲面与曲面对象(光照+反射)

热门文章

  1. 【问题解决】解决eclipse不识别Android手机的问题
  2. 数据库主从数据一致性的几种解决方案
  3. 异常:Error resolving template “xxx“, template might not exist or might not be accessible...解决办法
  4. SpringBoot-文件在线预览解决方案-基于OpenOffice及jacob
  5. 使用Javascript / jQuery下载文件
  6. 电脑遇到DNS服务器未响应的情况该怎么办
  7. ros中使用boost::thread多线程boost::bind绑定参数,多线程发送topic
  8. JDBC的API与德鲁伊Druid连接池配置
  9. Linux编程训练网站,OK6410汇编程序练习
  10. MTK:串口调试方法|MTK串口工具