我正在创建一个语言学习游戏,现在我将所有词汇单词存储在JS对象中(对于一个概念,稍后我会将它们存储在数据库中)。
words
对象中的单词将显示在单词库中的播放器中。从那里,他们可以单击一个单词将其添加到文本框中。
当他们完成句子时,他们可以提交,这将根据预先写好的句子检查正确的词序。类似的东西:
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'
}
}
这可以防止单词数据库中单词的重复,但仍然不允许我在给定任务的单词库中放置适当的词汇。
所以我的问题是:有没有办法像上面那样(pronouns
,adjectives
等)安排它,并以有效的方式选择单词I想给出一个特定任务编号的单词bank中显示?
谢谢!
答案 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);
});
我决定在你的话语上加一点复杂,但...... 当然,分隔符是可配置的;)