Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода.
Доброе утро, Пикабу! Доброе утро, Лига разработчиков видеоигр!
Прошла ещё неделя после моего последнего поста, большую часть времени я провёл редактируя лист событий, но всё же игра стала уже хоть немного играбельной. Итак...
Для начала продолжения я дописал также строки на действия и других свойств карт, помимо вычета стоимости энергии.
Однако при всём при этом я пропустил строку нанесения урона противнику. Там есть строки на нанесение урона конкретно щиту противника и конкретно противнику, однако простой урон может наносится как щиту, так и самому противнику, если щит разрушен.
Так что тут я добавил пару условий: в случае если здоровье щита больше входящего урона, то он просто уменьшается на размер урона; однако, если здоровье щита меньше, урон по прежнему... добавляем отрицательное... в общем, на скрине видно.
И при проверке данное условие и порядок действий вполне себе работает.
Также может случится ситуация, когда энергии может просто не хватать на использование какой-либо карты.
Поэтому я добавил кнопку сброса карты.
Ей, так же, как и картам, добавил локальную переменную позиции.
Для того, чтобы визуально было видно, что карта сброшена, а не сыграна, я дорисовал полупрозрачную карту и дал ей поведение кнопки.
В случае если будет нажата кнопка сброса карты, то карта сброса будет моментально перемещаться и прикалываться к той карте, у которой совпадает переменная позиции с аналогичной переменной кнопки. Карта проследует по своему привычному пути, а когда вернётся в колоду, карта сброса просто открепляется и ждёт своей дальнейшей участи.
После этого я занялся дорисовкой новых карт, заодно изменил дизайн, ибо мне не нравилось, что символ стихии такой большой, а описание слишком мало.
Теперь мне не осталось ничего другого как настроить очерёдность хода.
Начал я с того, что добавил ещё одну карту, которая будет отображать выбранную карту заклинания компа.
Также я вставил ещё один одномерный массив, отображающий последовательность карт в колоде противника. А также скопировал события и действия для перетасовки карт, заменив объекты.
Следующие несколько дней я пробовал добавить действия для хода противника, действуя через отдельные функции со своими условиями, вводя и удаляя новые группы, но в любом случае наступал хаос: то карты действовали неправильно, убавляя энергию другой стихии и атакуя не ту цель, то атака вообще не проходила... В общем, после очередного перерыва на работу я нашёл верное решение, добавив пару функций.
Собственно, я также ввёл несколько глобальных переменных и изменил алгоритм хода. При нажатии на выбранную карту вместо проверки на её возможность использования в первую очередь идёт проверка на НЕвозможность. В противном случае вызывается функция своего хода. Одна из новых глобальных переменных нужна как раз, что бы функция узнавала, на какую карту нажал игрок.
Далее следуют действия выбора карт компом и вызывается функция.
Собственно, функция как раз применяет эффекты карты заклинаний со всеми подусловиями (поскольку подусловия выполняются уже после того, как основные действия закончатся из-за чего невозможно вставить условия в событие нажатия).
Кроме того, если у компа не хватает энергии на использование карты, то происходит процесс сброса карты с прикреплением всё той же полупрозрачной карты.
Я ещё при тесте забыл учесть нажатие на кнопку сброса. Так что когда я сбрасывал карту ход компу не передавался. Копируем действия!
Энергия не может длится вечно, рано или поздно она закончится. Так что я добавил по 4 источника каждому волшебнику в виде локальных переменных.
А также каждому источнику свой индикатор!
Механизм восполнения энергии крайне прост: в начале хода из каждого источника капает одна энергия. Т.е. если есть пара источников воды, то в начале каждого хода будет капать 2 энергии воды.
Немного переназначил стартовые условия в виде количества энергии и здоровья, и игрулька стала вполне играбельной. Основная механика закончена, осталось немного.
Ещё раз спасибо каждому, кто дочитал, спасибо тем 5-ти людям, которые на меня подписаны, и увидимся в следующем посте!