zoukankan      html  css  js  c++  java
  • 问卷调查模块实现的过程中的历程

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

    设计之初,我们曾经想过使用数据库保存,为了实现这个模块将增加配置库里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,否则是一个对象。

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

  • 相关阅读:
    Gym 100553B Burrito King 无脑背包
    BestCoder Round #85 A B C
    poj 1687 Buggy Sat 简单计算几何
    HDU 1863 Kruskal求最小生成树
    记2016商大ACM省赛
    COMP9517 Week7 Tracking
    COMP9517 week7 Motion
    COMP9313 week7b Spark SQL
    COMP9313 Week 7 Product Quantization and K-Means Clustering
    COMP9517 lab3 image segementation
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3329210.html
Copyright © 2011-2022 走看看