функции динамического закрытия игры в javascript - PullRequest
0 голосов
/ 24 февраля 2012

Я работаю над простой игрой умножения html / javascript, в которой у меня есть таблица умножения с некоторыми входными данными, которые представляют результаты продуктов. В этой игре вы должны ответить как можно быстрее на столько вопросов, сколько сможете. чтобы упростить игру игрокам, я назначил событие клавише ввода, чтобы перейти к следующему вводу при его нажатии.

multiplication table game

Вот код JavaScript для подсветки строк и события ввода:

for (var i=0; i<boardInputArray.length; i++) {
    boardInputArray[i].onkeydown = (function(nextBox) {
        return function(e) {
            if(e.keyCode == 13) {
                if(nextBox==boardInputArray.length) {boardInputArray[0].focus();boardInputArray[0].select();}
                else {boardInputArray[nextBox].focus();boardInputArray[nextBox].select();}
                var gameCompleted = true;
                for(var c=0;c<boardInputArray.length;c++) {
                    if(boardInputArray[c].value == '') {gameCompleted = false;}
                }
                if(gameCompleted) validateGame();
            }
        }
    })(i+1);
}

Я не хочу размещать здесь весь код, потому что он очень длинный. Если вы хотите увидеть игру в действии, перейдите по ссылке: http://www.webdesk.co.il/articles/javascript/multiplication-table-game.php

Вот проблема: мне бы хотелось, чтобы каждый раз, когда нажималась клавиша Enter, он проверял, пуст ли следующий ввод или нет. если он не пустой - переходите к следующему и так далее, пока не найдете пустой ввод. Таким образом, игрок может вернуться к вопросу, на который он не ответил, и не просмотреть все те, на которые он ответил. имеет смысл?

1 Ответ

2 голосов
/ 24 февраля 2012

Возможно, вы можете улучшить этот код, но он позаботится о переходе к следующему пустому полю.

for (var i=0; i<boardInputArray.length; i++) {
    boardInputArray[i].onkeydown = (function(currentBox) {
        return function(e) {
            if(e.keyCode == 13) {
                var gameCompleted = true;
                if(boardInputArray[currentBox].value == '')
                    gameCompleted = false;
                for (
                        var c = (currentBox + 1) % boardInputArray.length;
                        c != currentBox;
                        c = (c + 1) % boardInputArray.length
                    )
                {
                    if(boardInputArray[c].value == '')
                    {
                        gameCompleted = false;
                        boardInputArray[c].focus();
                        boardInputArray[c].select();
                        break;
                    }
                }
                if(gameCompleted) validateGame();
            }
        }
    })(i);
}

Примечания:

  • Я сделал анонимную функциюфункция currentBox вместо nextBox (i вместо i + 1).
  • Цикл проходит через все блоки, кроме текущего, начиная со следующего, оборачивая и заканчивая предыдущимили когда он встречает пустое поле.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...