Это часть курса Игра в змейку на Rust, JavaScript и WebAssembly.

В этой части мы позволим пользователю управлять направлением змеи и остановить игру. Изменения, которые мы внесем в этой части, отражены в этом коммите.

Движение

Чтобы сообщить Rust, в каком направлении игрок хочет переместить змею, мы будем использовать перечисление.

Также нам понадобятся еще два метода Vector.

Теперь мы можем обновить методы с необязательным аргументом для движения.

Давайте добавим блок между двумя последними строками.

Во-первых, мы сопоставляем движение с соответствующим вектором. В нашей игре начало координат в левом верхнем углу. Поэтому вектор, направленный вверх, имеет отрицательную Y-компоненту.

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

Затем мы нажимаем ребро в центре пересеченной ячейки, чтобы встряхнуть хвост. Наконец, мы вычисляем новую позицию головы и обновляем направление.

Давайте скомпилируем Rust и перейдем к стороне JavaScript для реализации контроллера.

Контроллер

Контроллер обновляет значение поля перемещения и выполняет обратный вызов при нажатии кнопки остановки.

Давайте создадим экземпляр Controller в конструкторе GameManager.

При возобновлении игры меняем lastUpdate, чтобы вроде остановки не было.

Наконец, мы хотим передать движение в метод process и обновить метод tick, чтобы он не вызывал Rust и не выполнял рендеринг, когда игра остановилась.

Теперь мы можем зайти на страницу, переместить змейку по полю и остановить игру, нажав клавишу пробела.

В следующей части мы сделаем так, что каждый раз, когда змея ест еду, ее хвост становится длиннее.

Выйдите на новый уровень концентрации и продуктивности с помощью increaser.org.