问卷调查模块实现的过程中的历程

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

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

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

posted on 2013-09-18 20:31  新一  阅读(356)  评论(0编辑  收藏  举报

导航