语言学习游戏 - 如何对对象中的单词进行分类

时间:2014-01-15 03:43:59

标签: javascript jquery html object

我正在创建一个语言学习游戏,现在我将所有词汇单词存储在JS对象中(对于一个概念,稍后我会将它们存储在数据库中)。

words对象中的单词将显示在单词库中的播放器中。从那里,他们可以单击一个单词将其添加到文本框中。

enter image description here

当他们完成句子时,他们可以提交,这将根据预先写好的句子检查正确的词序。类似的东西:

preWrittenSentence.push("Ni", "Hao", "Wo", "Shi");

var correctOrder = preWrittenSentence.join(' ').toLowerCase();
if ($.trim(input.toLowerCase()) == correctOrder) {
    Good job...

在游戏中,如果玩家完成“任务”,意味着他们已经提交了正确的句子,他们将继续执行下一个任务。

最初,我通过对象中的“任务”来构造单词。这使我只能将给定任务的相应单词输出到单词bank(否则,如果我没有在对象中将它们分开,它将遍历对象中的每个单词,即使它与对象无关)给出句子):

var words = {
    "task1" :
    {
        'Ni'    : 'you',
        'Wo'    : 'I',
    },
    "task2" :
    {
        'Xie Xie' : 'Thanks',
        'Bu' : 'No',
    }
}

这个问题是......如果我想在另一个任务中重用一个单词,比如Ni,我就不得不在该任务的对象中复制它...当我宁愿只是从task1重用Ni

所以我想也许我可以把所有单词都拼成一个对象:

var words = {
    'Ni'    : 'you',
    'Wo'    : 'I',
    'Xie Xie' : 'Thanks',
    'Bu' : 'No'
}

但是现在我无法控制我想要在wordbank中显示哪些单词,如果它们全部集中在一起。

所以最后,我想也许我可以通过词性把话语放在对象中:

var words = {
    "pronouns" :
    {
        'Ni'    : 'you',
        'Wo'    : 'I',
    },
    "adjectives" :
    {
        'Hao'   : 'good',
        'Kuai'  : 'fast'    
    }
}

这可以防止单词数据库中单词的重复,但仍然不允许我在给定任务的单词库中放置适当的词汇。

所以我的问题是:有没有办法像上面那样(pronounsadjectives等)安排它,并以有效的方式选择单词I想给出一个特定任务编号的单词bank中显示?

谢谢!

1 个答案:

答案 0 :(得分:0)

检查此代码并告诉我它是否适合您的要求。

var words = {
    pronouns :
        {
            Ni    : {
                text1    :    'you',
                text2    :    'Ni',
                tasks    :    '#1#2#3#'
            },
            Wo    : {
                text1    :    'I',
                text2    :    'Wo',
                tasks    :    '#3#4#'
            }
        },
    adjectives :
        {
            Hao    : {
                text1    :    'good',
                text2    :    'Hao',
                tasks    :    '#1#2#3#'
            },
            Kuai    : {
                text1    :    'fast',
                text2    :    'Kuai',
                tasks    :    '#2#4#'
            }
        }
};

function getWords(task) {
    var ret = new Array();

    for (var kind in words) {
        for (var word in words[kind]) {
            if (words[kind][word].tasks.match("#"+task+"#")) {
                ret.push(words[kind][word]);
            }
        }
    }
    return ret;
}

$(document).ready(new function(){
    var out = "";
    var arr = getWords(2);
    for (var i = 0; i < arr.length; i++) {
        var word = arr[i];
        out += "[" + word.text1 + "->" + word.text2 + "],";
    }
    alert(out);
});

我决定在你的话语上加一点复杂,但...... 当然,分隔符是可配置的;)