1

在我的游戏中,当单击“下一个问题”按钮时,它应该在网格中选择一个新单词供用户拼写。它这样做了,但问题是,有时随机化不是转到另一个单词,而是将它带回它已经存在的单词。我需要做到这一点,以便它选择除了它打开的那个之外的任何其他东西。

    //Next question click event
    $('.next-question').on('click', function () {
    $('td').removeClass('highlight-problem');
    var r = rndWord;
    while (r == rndWord) {
    rndWord = Math.floor(Math.random() * (listOfWords.length));
}
    //Adds and removes nesesary classes
    $('td[data-word="' + listOfWords[rndWord].name + '"]').addClass('highlight-problem');
    $('td[data-word=' + word + ']').removeClass('wrong-letter').removeClass('wrong-word').removeClass('right-letter');
    var spellSpace = $('td[data-word="' + listOfWords[rndWord].name + '"]').hasClass('right-word');
    if (spellSpace) {
        $(".next-question").eq(($(".next-question").index($(this)) + 1) %$(".next-question").length).trigger("click");
    } else {
        $("#hintSound").attr('src', listOfWords[rndWord].audio);
        hintSound.play();
        $("#hintPic").attr('src', listOfWords[rndWord].pic);
        $('#hintPicTitle').attr('title', listOfWords[rndWord].hint);
    }
});
4

2 回答 2

3

rndWord你的while循环之前的价值是什么?这看起来像是一个范围问题 - 您要么需要rndWord在函数外部声明,以便在调用之间保留它,要么每次都将其传递。

var rndWord;

function() { 
    //Next question click event
    ....
    var r = rndWord;
    while (r == rndWord) {
        rndWord = Math.floor(Math.random() * (listOfWords.length));
    }

进一步澄清后:

var currentWord;
function ClickEventHere() {
    r = currentWord;
    while (r == currentWord) {
        nextIndex = Math.floor(Math.random() * (listOfWords.length));
        currentWord = listOfWords[nextIndex];
    }
    ...
}

r正如您在 while 语句中所做的那样,将整数与数组进行比较是没有意义的- 您可以将索引或单词本身存储在全局中,然后检查以确保它没有被重用。

在这个循环之后,currentWord将包含下一个不同的单词

于 2012-11-19T14:48:35.080 回答
0

查找随机单词,如果相同找到另一个,则与上次找到的单词进行比较。只要你有相当数量的单词就足够了。

于 2012-11-19T14:48:04.693 回答