Рыба моей мечты #6 Нет предела совершенству
(Язык Программирования - Аперо, создаём на пару с товарищем. Есть желающие освоить?)
Сегодня мы доработаем код нашей прошлой игры, вдохнув в него ещё немного жизни. Поэтапно изменяя его в лучшую сторону. Сперва надо исправить его самый главный недостаток - масштабируемость, когда при добавлении новых переменных (новых Монстров), приходится менять весь код целиком. Покажу это вам на примере.
Теперь мы добавили в него 6-ых новых монстров и вот что изменилось.
Наш код закономерно начал расти. И теперь, нам предстоит понять - где мы допустили ошибку и быстро исправить её. Не буду томить, проблема в 4-ой строчке кода. Представьте что случится, если мы расширим Массив1 до 100 значений? Не порядок. Код -> https://disk.yandex.ru/d/B3QJVMiWlqXYdQ
Считаю, что работа проделана успешно. Добавив ещё одну переменную Счёт, мы избавились от всего этого лишнего нагромождения кода. Пока мы бьём, переменная Счёт=2. Как только здоровье монстра опускается до единицы, мы приравниваем Счёт=1. А нажатием на кнопку Бить, делаем (локальную) переменную Выбор равной единице. Затем срабатывает условие 4-ой строки кода \ЕСЛИ (Выбор=Счёт) \ТО и Имя монстра, его жизни и их кол-во увеличивается.
Теперь осталась лишь одна зависимость от имени (в 10-й строчке кода). Здесь мы пишем Имя последнего Монстра, на котором игрок пойдёт на второй круг. Но и эту оплошность (недоработку) можно исправить, пишите свои варианты в комментариях (как именно).
Плюс к этому, в последней (12-ой) строчке кода была добавлена дебаг-панель для выявления ошибок. Очень полезная штука, рекомендую каждому проводить данную практику на постоянной основе. Так легче понять, где может быть просчёт в коде.
Каким образом можно оптимизировать код всего в одну строчку? - оставлю этот вопрос на рассмотрение читателя. Решение искать здесь -> https://apero.ru/Документация А вот и сам код -> https://disk.yandex.ru/d/qc-ZnGcdqP0s8w
Дополним наши "Петушиные Разборки" (из 4-ой статьи) новым кодом. Теперь кнопку для каждого удара нажимать не обязательно (её просто нету). Каждый удар Петуха будет происходить по таймеру раз в 3 секунды. Весь секрет в том, что мы объявляем сразу две локации. Одна из них Битва, вторая Битва(Выбор) с локальной переменной. Таймер сам по себе не умеет работать с локациями второго типа (с выбором локальных переменных). Поэтому данный трюк жизненно необходим, чтобы преодолеть это ограничение. (очень важно, в документации этого нет)
Добавлено условие победы, жизнь одного из Петухов должна уменьшиться ниже 1. Если здоровье обоих упадёт ниже нуля, то появится сообщение - что они оба проиграли и игра автоматически (по-таймеру) перезапустится заново через 10 секунд. Код -> https://disk.yandex.ru/d/R3WRLFKl1YK3YA
Вновь вернёмся примеру из 4-ой статьи. Какие отличия (от Петухов) мы здесь видим? - Помимо самых основных Жизней и Урона, добавились Броня и SP (Спец Способность). Для реализации SP мы будем тупо вести подсчёт ходов. Спец Способности вводят в игру новые механики боя. Абаддон атакует дважды. Титан игнорирует броню цели. Некрофос выжигает аурой ХП. Футмен слаб, но имеет бафф брони. Если вам интересен сам принцип работы (и его реализация), поиграть и посмотреть код можно здесь -> https://apero.ru/Текстовые-игры/Arepo-Auto-Chess
Давайте, перед тем как идти дальше, устроим краткий ликбез. Что такое Массив? - Это в первую очередь переменная, содержащая в себе ещё одну переменную(, и более). Количество переменных в Массиве не ограничено. Из Массива можно как извлекать данные, так и записывать туда их. Код -> https://disk.yandex.ru/d/9dwwdhsHJQx6fw
ЦИКЛ это условие, (чаще) требующее многократного повторения до тех пор, пока не будет выполнено. \ЦИКЛ (икс<5) \СДЕЛАТЬ \(икс) [br] \(икс=икс+1) Пример самого примитивного цикла, где [br] это разрыв строки. Ответ: 1 2 3 4
Очередная реализация битвы (через таймер). Данный код уже по-сложнее. Для удобства разбил его на блоки. Код Игры -> https://disk.yandex.ru/d/fnGp8bJDlPrUZQ Начнём по-порядку:
Блок1 содержит только массивы Врагов и наших Героев. Каждый Массив содержит 4-5 переменных, которые включают -> Имя / Жизни / Броню / Урон / Умение.
Блок2 выводит Игроку сообщение для выбора героев.
Блок3 присваиваем значения из Массива -> Имя / Жизни / Броню / Урон / Умение, исходя из выбранного нами Героя. Кол-во героев не ограничено!
Блок4 каждый раз выставляет против нас нового Моба, если старый умирает.
Блок5 содержит способности наших Героев и проверяет, когда их можно активировать (на каком ходу) или если это баффы, то сколько они будут действовать.
Блок6 производит расчёты и выводит на экран сообщение о битве (с таймером в 3 сек)
Блок7 определяет, с какого блока начать - с 3-го (если жизни Моба близки к нулю) или с 4-го (если всё в порядке).
Добавление же новых Героев и Мобов осуществляется путём редактирования Блока1, Блока2 (для выбора) и Блока5 (для их умений). Код -> https://disk.yandex.ru/d/4fiZnUFnixUzxg Покажу на практике:
Если у тебя возникнут вопросы, то на сайте есть подробная документация (как надо работать с кодом) -> https://apero.ru/Документация . Новичкам всегда готовы помочь старожилы проекта. А именно:
1) Александр -> https://vk.com/san90
2) Михаил -> https://vk.com/stalkersleem
3) Дмитрий -> https://vk.com/drkcrwn
4) Михаил2 -> https://vk.com/id17130734
5) Пашка Какашка -> https://vk.com/glumpa