Следующий шаг по развитию нашей уже весьма солидной игры - это ввод в нее кого элемента, торговли. Предметов на карте можно найти уже достаточно много. В недалеком будущем мы введем очень популярный в ролевых играх прием, когда из монстра выпадают полезные предметы и деньги (почему это делается позже, а не сейчас станет понятно из дальнейшего текста), но копить их не имеет смысла, так как со всем рапорядиться не удастся. Так, магу не нужен меч, а воину - магические заклятья, Игроку накопленные предметы желательно продавать, а на вырученные деньги покупать что-то более подходящее по классу.
При разработке более менее больших и сложных игр, каждый из разработчиков вынужден сталкиваться с ошибками в программном коде. Порой эти ошибки допущены но невнимательности разработчика или его усталости.
Научим персонажа-мага владеть магическими предметами. Для большего интереса магия для использования будет доступна только классу магов. Предметы будут для существующих заклинаний, только для их использования не потребуегся манны. Пусть также некоторые предметы будут представлять собой магические жезлы, отличающиеся "многозарядностью" - возможностью неоднократного использования заклинаний.
Для начала определимся с тем, что мы подразумеваем под словом «Квест». Квест – это игровое задание. То есть игроку дается задание, которое он должен выполнить и получить за его выполнение определенный бонус или возможность перехода на следующий уровень. Благодаря квестам, собственно, и создается сценарий (сюжет) и ветки его развития, окончания и прохождения игры.
В общем то существует много разных способов это сделать. Можно воспользоваться специально предназначенными для этого компонентами, расположенными на панели инструментов в Delphi, а можно загружать картинки в оперативную память, используя для этого графические переменные или или графические массивы (набор графических компонентов). Возникает вопрос, а как же лучше всего загружать картинки в игру? И какой метод наилучший? Наилучшего метода просто нет. В том или ином случае можно использовать любой из методов, но нужно учитывать ограничения каждого из них, дабы не сталкиваться с проблемами в дальнейшем при их использовании.
В связи с поступившим вопросом на форуме нашего сайта я решил осветить такую тему как реализация ловкости и точности ударов игровыми персонажами. И поскольку при написании ответа получался довольно обширный текст - я решил оформить его в виде статьи. В общем я уже писал статью, в которой рассказывал как создавать персонажей, как ими управлять, добавлять им различные навыки и т.д. Но, видимо этого было недостаточно. Поэтому еще раз повторим предыдущую тему но с уклоном именно на данные два навыка.
Для демонстрации возможностей магической системы создадим два заклинания. Первое, назовем его "Огненный шторм", будет наносить повреждения от 1 до 4 единиц каждому находящемуся на любой соседней с героем клеток, а второе - "Самоисцеление", которое быстро сможет восстановить собственное здоровье. За счет маны, конечно.
Последний из нереализованных нами классов, и важная область игры - магия. На первый взгляд может показаться, что ее реализация потребует большого объема работы, однако мы уже хорошо продумали и отладили механизмы расширения навыков героя, и введение новых навыков и умений не потребует каких-либо кардинальных переделок и улучшений. Под магией мы будем понимать способность игрока к выполнению так называемых заклинаний - магических действий, а также к использованию магических предметов.
Начнем с «верха» с интерфейса ведения стрельбы. Пусть герой можег поражать только врагов, которые находятся только на одной прямой линии с ним - либо по вертикали. Для выстрела по одному из этих четырех направлений удобнее всего использовать клавиши-стрелки, но они уже используются для перемещения персонажа, поэтому за стрельбу по четырем направлениям будут отвечать клавиши a, d, w и z. Процедурой MoveHero будем вызывать новую процедуру HeroShot, которой в ряде параметров зададим единичный вектор направления стрельбы.
Перед выводом статистики немного улучшим существующий код. Пока у нас не реализован момент роста уровня героя при увеличении опыта (процедура IncXP в модуле Него). Вот как мы его запрограммируем: