апрель 5, 2021

Mimizuku Saga 10

Добавить в
Мои игры
Торрент
Скачать

Это моя первая 10-строчная игра, написанная на BASIC для Commodore 64, и вторая игра, выпущенная на BASIC. Когда я был намного моложе, я много писал на BASIC, но после нескольких лет, проведенных на ассемблере 6502 - с заданной задачей в 10 строк - мне все еще нужно было выучить много вещей, "неприятных" вещей!

Эта игра была представлена ​​на конкурс Basic 10liner Contest 2021 в категории PUR-80. В коде не используются сокращения команд, просто максимум 80 символов в строке.

Вдохновленный другой игрой этого конкурса, потрясающим, потрясающим Сокобаном длиной в 10 строк, написанным Йоханом Бернтссоном. Хотя я начал с космической темы, пришельцев, ключей доступа, бомб и камер (SPACE10 — это название незавершенного проекта), каким-то образом я остановился на японской теме, так что спасибо за множество сознательных и бессознательных влияний со стороны Сокобана!

Вызов был отличным, я понятия не имел, что в 10 строк можно уместить столько всего! Но было несколько рефакторингов, перетасовок кода, использования математических вычислений вместо условий и некоторых уловок, чтобы вложить в него больше. Это было очень весело! И мне потребовалось не менее ~30 часов работы с тестированием, чтобы добиться такого результата.

Сюжет

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

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

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

Но оставайтесь смелыми в своих поисках. Таким образом, этой легенды не было бы, если бы не тот, кто вернулся из царства мертвых и передал ее.

Экран

Начиная с верхнего левого угла экрана, вы увидите:

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

Экран действий содержит:

  • твоя сова чараcter всегда начинается с левой верхней части экрана.
  • белые стены, сквозь которые нельзя пройти.
  • фиолетовые черепа ваших предков.
  • синие бутылки сакэ.
  • синие бутылки сакэ
  • фиолетовые черепа ваших предков
  • синие бутылки сакэ
  • li>
  • коричневые врата в разные части царства мёртвых
Элементы управления

Используйте клавиши WASD на клавиатуре, чтобы управлять персонажем-совой в четырех направлениях. Чтобы поприветствовать своих предков, собрать бутылки сакэ или пройти через ворота, просто подойдите туда.

Когда игра будет завершена, вы сможете сыграть в нее снова, просто набрав:

БЕГАТЬ:

* обратите внимание на двоеточие в конце, которое отделяет команду от следующих за ней символов

Чтобы перезапустить игру, просто используйте клавишу RUN STOP, чтобы остановить выполнение программы и запустить игру снова.

Игра тестировалась на реальном оборудовании и с использованием эмулятора WinVice 2.4.

Описание кода

Генерация уровней происходит медленно, поскольку я сжал логику с 3 строк кода до 2 строк. Из-за этого мне нужно было заменить условия ЕСЛИ на математические уравнения, которые нужно было выполнить и обнулить, когда в этом нет необходимости. По этой причине, если вы играете в эту игру на эмуляторе (например, WinVice), в режиме деформации играть будет гораздо приятнее.

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

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

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

Этот код менялся несколько раз, чтобы уместить все части математических уравнений в две строки и при этом сжать назначение `D$`  где-нибудь в этой свободной области!

Построчный обзор кода <р>

  •  Строка 0: Инициализация констант и переменных, распределение таблицы плиток (`V`), данные об очках жизненной силы, количество предков, расположение цвета экрана.
  • Строка 1: Генерация уровня (вызывается каждый раз при входе в ворота), `Q` содержит часть уравнения, отвечающего за отображение всех других плиток, кроме стен, присваивая "D" значению `D$`, используемому для элементов управления.
  • Строка 2: Вторая строка генерации уровня генерирует случайный специальный тайл, хотя он может и не использоваться, но благодаря этому генератор умещается в две строки, вызывая рендеринг тайла, закрывая в конце цикл FOR с последующей установкой `X` и ` Y` будет использоваться персонажем игрока.
  • Строка 3: Здесь начинается основной цикл, сначала управление с клавиатуры, получение плитки, под которой игрок хочет переместиться, в конце определение tназвание игры в данных.
  • Строка 4: отображение верхней панели со всеми деталями, такими как жизненная сила и информация о том, сколько энергии израсходовал предок, в конце простая логика завершения игры в случае успеха или неудачи. с другим сообщением.
  • Строка 5: рисование персонажа игрока на экране, затем случай наступления на бутылку сакэ, за которым следует случай перемещения на поле с предком. В других случаях возвращаемся к началу основного цикла (строка 3). В конце некоторые данные со значением, используемым для генерации уровня, за которыми следует общая часть сообщения об окончании игры.
  • Строка 6: удаление персонажа со старой плитки, установка новых `X` и `Y ` позиции, уменьшающие жизненную силу на единицу, если плитка отличается от ворот: возврат к началу основного цикла (строка 3), в противном случае очистка экрана и возврат к генерации уровня (строка 1)
  • Строка 7: получение бутылки саке, переход к строке 6, чтобы перерисовать персонажа игрока в новой позиции. В конце просто строка данных, содержащая сообщение с двумя вариантами окончания игры, за которыми следуют все плитки, доступные в игре.
  • Строка 8: приветствие предка, генерация случайного количества очков, которые нужно истощить, и логика для удаления. их от жизненной силы и собранных глотков саке, переход к строке 6, чтобы перерисовать игрока на новой позиции.
  • Строка 9: установка плитки в таблице плиток, рендеринг плитки на экране под заданной позицией с помощью `SYS 58640` ($E510) или STUPT, процедура KERNAL для установки курсора pположение, плитка выбирается с использованием смещения строки.
Обзор переменных и некоторые использованные трюки
  • L - значение жизненной силы
  • M - количество предков, которых следует приветствовать
  • P - граница экрана и цвет переднего плана
  • T$ - название игры, хранящееся в строке вместе с очисткой экрана.
  • U — назначенное значение 10, используемое в коде генерации уровня, чтобы можно было установить значения для `X` и `Y` ( переменная принимает один символ)
  • E$ — первая часть экрана, отображаемая в конце игры (при успехе или неудаче)
  • S$ — строка, содержащая «DRAIN :" string
  • A$ — объединение двух элементов, поскольку таким образом в игре умещается все: сначала остальная часть сообщения, когда игрок выиграет или проиграет, а затем все плитки.
  • X, Y — позиции тайлов `X` и `Y` на экране.
  • V(X,Y) — двумерная таблица со всеми тайлами.
  • D$ - используется для хранения символа "D", иначе в названии игры не будет пробела.
  • K - глотки сакэ (в BASIC его не нужно определять, и он будет по умолчанию ноль)

И еще несколько математических трюков, таких как объединение некоторых условий в строке 4, например используя `L*M<0` вместо двух отдельных условий и смещая строку аналогичным образом.

Я сделал нечто подобное в строке 8, чтобы уменьшить жизненную силу. Некоторые глотки саке делает предок, но когда расход выше, его нужно брать не только из прилавка сакэ («К»), но итакже от жизненной силы («L»). Использовать условия могло быть проще, но было здорово найти такую ​​простую альтернативу!

Кроме того, просто взгляните на настройку D$ в строке 1. Я понятия не имел, что мне не нужно закрывать двойные кавычки при назначении некоторых строковых переменных. Ну, думаю, я делал что-то подобное в молодости...

В любом случае, ограничения подтолкнули меня к этим экспериментам с удивительными результатами!

В последней строке я повторно использовал назначение плиток двумерной таблице («V») между генерацией уровня и перемещением игрока в игре. Это было необходимо из-за нехватки места, но, поскольку некоторые вещи были изменены, этот рефакторинг стал откровением. Это заставило меня дважды вызывать строку 9 для обоих состояний, чтобы правильно отобразить плитку и получить объект только один раз. Мне также пришлось повторно использовать одни и те же переменные для `X` и `Y`, чего я бы никогда не сделал в «обычном» коде, но мне очень понравилась простота, которую я получил от всего этого. Хотя с точки зрения кода следовать этому непросто!

Примечания

Эта игра была представлена ​​на конкурс 23 февраля 2021 года. Запись об игре можно найти здесь: https://bunsen.itch.io/mimizuku-saga-10-by-bago-zonde

Как скачать Mimizuku Saga 10 через торрент

Всего несколько простых шагов:

  • Устанавливаем программу μTorrent, через которую мы будем скачивать торренты
  • Выбираем и скачиваем подходящий торрент-файл репака Mimizuku Saga 10
  • Двойным кликом открываем скаченный файл, программа μTorrent запустится автоматически и предложит выбрать место для сохранения дистрибутива.
  • После того как репак скачается, запускайте его. Начнется установка и... это все, приятной игры!