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

rndWordwhileループの前の値は何ですか?スコープの問題のように見え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];
    }
    ...
}

whileステートメントで行っているように、整数rと配列を比較しても意味がありません。インデックスまたは単語自体をグローバルに格納してから、再利用されていないことを確認できます。

このループの後currentWord、次の別の単語が含まれます

于 2012-11-19T14:48:35.080 に答える
0

ランダムな単語を見つけ、同じ単語が別の単語を見つけた場合は最後に見つかった単語と比較します。あなたがまともな数の単語を持っていれば、それで十分なはずです。

于 2012-11-19T14:48:04.693 に答える