Что же, игры я писать не умею. Тут, как ни странно, тоже есть свои особенности. Думал так, что с играми, как и с любым другим делом, поначалу может быть интересно, пока эффект новизны присутствует, а потом всё, скучно. Вот и не брался, не интересовался, не смотрел. Зря наверное.
Поэтому, решил, что для начала буду делать прототип: это почти полноценная игра, вот только сделанная специально, чтобы оценить болевые точки, которые придётся встретить по пути её создания.
Оказалось - не зря. Хорошо, когда делаешь дела последовательно: всё просто и понятно. Однако во время разработки, когда видишь несколько дел, которые, кажется, можно сделать одновременно, нет-нет, да и попытаешься время сэкономить, сделать всё одновременно. Но работает это не всегда.
Впрочем, отвлёкся.
Для начала я примерно поделил весь экран на сетку (её будет видно ниже, на прототипе). Наверху - планирующие пришельцы, внизу - катающаяся по земле ракетная платформа. Разрешение экрана взял 800 на 600 точек, а размеры любого элемента - 20 на 20 точек. Почему? Да просто так захотелось. Нет объяснения. Поделил примерно пополам экран: сверху будут пришельцы, снизу - пространство для спуска. Их вышло очень много, поэтому немного проредил вертикальными рядами. Думал, набросать их в случайном порядке, но не сделал этого.
В какой-то момент, всё пришло в движение: пришельцы начали двигаться влево-вниз-вправо-вниз и так пока нижний ряд не достигнет земли. И тут встал вопрос о том, с какой скоростью это будет всё работать. И это, пожалуй, был первый вызов.
Изображение рисуется с частотой примерно 60 кадров в минуту (иногда больше, иногда сильно больше, иногда меньше). То есть ориентироваться на этот показатель было нельзя.
Поэтому я поделил секунду на такты (от 8 до 12). Число это менялось в зависимости от количества оставшихся пришельцев. Двигались пришельцы каждый 4 такт, анимация обновлялась каждый второй. То есть, по мере увеличения тактов - скорость движения пришельцев возрастала и сложность игры увеличивалась. Платформа двигалась изначально быстрее.
Потом - следующая сложность: управление с клавиатурой. Нажатые сразу две кнопки блокировали друг друга (а на этом, изначально, строился механизм управления платформой - вообще, плохая идея, но всё же). Пришлось фиксировать факт нажатия и факт отпускания кнопки. И пока кнопка нажата - платформа будет двигаться (а не останавливаться при выстреле).
И, когда уже всё было почти что хорошо, выяснилось, что запуск всего 1 снаряда за раз - гарантированно приводит к поражению. То есть платформа физически не успевает уничтожить всех врагов. Увеличил число до 10 (у пришельцев только 5 выстрелов единовременно может быть). И не могу сказать, чтобы победил. Однако дефицита боеприпаса больше не было, так что далее - дело техники.
Ну, и как обещал, короткое видео, как всё выглядит сейчас:
Что дальше. О, дальше начинается самое сложное.
Во-первых, я хочу всё это переписать на rust и встроить через wasm. Зачем? Ну, мне интересен rust и я давно хотел его попробовать в деле. Плюс, компилированный код куда сложнее просмотреть.
Во-вторых, такой вот внешний вид никуда не годится: я хочу сделать надлежащий внешний вид и для этого использовать webgl. Знаю, что есть пути и проще, но тут дело в том, что данный проект - должен стать лишь началом к череде других.
Продолжение быстро не обещаю. Но попробую.