Это часть курса Игра в змейку на Rust, JavaScript и WebAssembly.
В этой части мы позволим пользователю управлять направлением змеи и остановить игру. Изменения, которые мы внесем в этой части, отражены в этом коммите.
Движение
Чтобы сообщить Rust, в каком направлении игрок хочет переместить змею, мы будем использовать перечисление.
Также нам понадобятся еще два метода Vector.
Теперь мы можем обновить методы с необязательным аргументом для движения.
Давайте добавим блок между двумя последними строками.
Во-первых, мы сопоставляем движение с соответствующим вектором. В нашей игре начало координат в левом верхнем углу. Поэтому вектор, направленный вверх, имеет отрицательную Y-компоненту.
Когда новое направление не равно или не противоположно старому, мы округляем старую и новую компоненты, чтобы проверить, пересек ли змееголов центр ячейки, потому что только в этом случае мы можем обновить направление.
Затем мы нажимаем ребро в центре пересеченной ячейки, чтобы встряхнуть хвост. Наконец, мы вычисляем новую позицию головы и обновляем направление.
Давайте скомпилируем Rust и перейдем к стороне JavaScript для реализации контроллера.
Контроллер
Контроллер обновляет значение поля перемещения и выполняет обратный вызов при нажатии кнопки остановки.
Давайте создадим экземпляр Controller в конструкторе GameManager.
При возобновлении игры меняем lastUpdate, чтобы вроде остановки не было.
Наконец, мы хотим передать движение в метод process и обновить метод tick, чтобы он не вызывал Rust и не выполнял рендеринг, когда игра остановилась.
Теперь мы можем зайти на страницу, переместить змейку по полю и остановить игру, нажав клавишу пробела.
В следующей части мы сделаем так, что каждый раз, когда змея ест еду, ее хвост становится длиннее.
Выйдите на новый уровень концентрации и продуктивности с помощью increaser.org.