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

На ноябрь я нашел еще одну игру по противоракетной обороне, которую написал несколько лет назад. Честно говоря, я не помнил эту игру, пока не начал в нее играть. Начав немного медленно, я продолжал говорить себе, что он должен ускориться. И это произошло! Думаю, моя память не так уж и плоха. Давайте немного покопаемся в Laser Catch.

Наращивание.
Идея Laser Catch довольно проста. Наведите курсор с помощью клавиш со стрелками на каждую из ракет в зависимости от вашего города, чтобы остановить их. Если остановить их всех, начнется новая волна. Если вы этого не сделаете, это засчитывается как промах, и вы получаете еще один шанс. Пропустите слишком много ракет, разрушающих город.

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

Такие игры могут быть довольно забавными. Увеличение сложности дает вам время изучить механику и стратегии устройств. Где Laser Catch терпит неудачу, так это в том, что игра становится довольно повторяющейся. Если ракеты будут размещены достаточно далеко друг от друга, невозможно поймать их все на более поздних уровнях. Это не плохо, но могло быть и лучше.

Что за имя?
Самое странное в игре — это название. Я имею в виду, что это не могут быть лазеры, потому что они слишком медленные. И чем бы вы их ловили? В некотором смысле ваш курсор может быть лазером, ловящим ракеты. Хотя это немного натянуто. Я должен был выбрать имя получше, но Missle Defense уже было занято моей предыдущей игрой. Я должен был назвать это "Лазерной защитой".

Честно говоря, эта игра больше похожа на оригинальную Missile Command. На этот раз у вас есть курсор, и вы можете преследовать четыре ракеты по экрану. Хотя у меня нет крутых взрывов, внешний вид Laser Catch обнадеживает.

Требуется доработка.
Как написано, игра разработана хорошо. Довольно простая программа, код простой и незамысловатый. Я использовал стандартные методы кодирования, как и другие написанные мной программы. Простой и работоспособный, он все еще может использовать некоторую работу.

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

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

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

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

Кроме того, каждый раз, когда программа перемещает ракеты, выполняется восемь логических проверок. Это сложнее удалить. То, как работает цикл, ускоряет работу, поскольку не нужно вычислять положение ракеты. Мне пришлось бы попробовать несколько разных стратегий, чтобы посмотреть, смогу ли я уменьшить количество повторений. В прошлом я использовал несколько различных вариаций, но ни одна из них не идеальна.

Потратив некоторое время на эти оптимизации, можно повысить скорость. Но еще лучше было бы использовать Mcoder для преобразования кода BASIC в более быструю сборку. Это потребует нескольких модификаций, но код и так довольно близок.

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

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

Несколько простых улучшений.
Простое исправление, которое также выглядело бы неплохо, — взрывать ракеты, когда вы наезжаете на них. Прямо сейчас они исчезают. Это работает, но визуальная очередь была бы интереснее. Добавить немного взрыва и дыма тоже было бы круто. Но это может сильно замедлить игру. Опять же, здесь на помощь может прийти Mcoder. Или я мог бы написать чертову вещь на ассемблере.

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

Мне до сих пор нравится Laser Catch. Это весело и сложно, как есть. Изменение названия и некоторые графические улучшения сделали бы его еще более интересным. Усилие на другой день.

Первоначально опубликовано на https://www.reids4fun.com 20 ноября 2019 г.