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的方法。

    获取多选题答案:

        // 获取多选题答案
        $(".checkbox2").each(function () {
            var questionId = $(this).attr('subject');
    
            var answerId  = [];
    
            // 循环读取多个选择项
            $("input[type='checkbox']:checked", this).each(function () {
                answerId.push($(this).val());
            });
    
            if (answerId.length) {
                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,否则是一个对象。

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

  • 相关阅读:
    SSL JudgeOnline 1194——最佳乘车
    SSL JudgeOnline 1457——翻币问题
    SSL JudgeOnlie 2324——细胞问题
    SSL JudgeOnline 1456——骑士旅行
    SSL JudgeOnline 1455——电子老鼠闯迷宫
    SSL JudgeOnline 2253——新型计算器
    SSL JudgeOnline 1198——求逆序对数
    SSL JudgeOnline 1099——USACO 1.4 母亲的牛奶
    SSL JudgeOnline 1668——小车载人问题
    SSL JudgeOnline 1089——USACO 1.2 方块转换
  • 原文地址:https://www.cnblogs.com/riskyer/p/3327455.html
Copyright © 2011-2022 走看看