Выразительный JavaScript (Хавербеке) - страница 167

>    runLevel(new Level(plans[n]), Display, function(status) {

>      if (status == "lost")

>        startLevel(n);

>      else if (n < plans.length - 1)

>        startLevel(n + 1);

>      else

>        console.log("You win!");

>    });

>  }

>  startLevel(0);

>}

Эти функции демонстрируют необычный стиль программирования. Обе функции >runAnimation и >runLevel – функции высшего порядка, но не в том стиле, что мы видели в главе 5. Аргумент функций используется, чтобы подготовить вещи, которые произойдут когда-либо в будущем, и функции не возвращают ничего полезного. Их задача – запланировать действия. Оборачивая эти действия в функции, мы сохраняем их как значения, чтобы их можно было вызвать в нужный момент.

Такой стиль программирования обычно называют асинхронным. Обработка событий – тоже пример такого стиля, и мы с ним встретимся ещё не раз, когда будем работать с задачами, которые могут занять произвольные промежутки времени – например, сетевые запросы в главе 17, или ввод и вывод общего назначения в главе 20.

В переменной GAME_LEVELS хранится набор планов уровней. Такая страница скармливает их в >runGame, которая запускает саму игру.

>


>

>  

>

Попробуйте выиграть. Я здорово повеселился, сочиняя их.

Упражнения

Конец игры

По традиции, платформеры дают игроку ограниченное количество жизней, и вычитают по одной каждый раз при гибели игрока. Когда жизни кончаются, игра начинается заново.

Подредактируйте >runGame, чтобы она поддерживала жизни. Пусть игрок начинает с трёх.

>


>

>

>

Пауза

Сделайте возможным ставить и снимать игру с паузы по нажатию клавиши Esc.

Этого можно достичь, поменяв функцию >runLevel, чтобы она использовала другой обработчик событий клавиатуры, и прерывала и возобновляла анимацию по нажатию Esc.

На первый взгляд может показаться, что интерфейс >runAnimation не предназначен для этого – но если вы поменяете его вызов из >runLevel, всё получится.

Когда получится, можете попробовать ещё кое-что. Мы регистрируем события с клавиатуры не самым лучшим способом. Объект