Последнее, чего пока не хватает магазину - это возможности героя продавать в нем свой забранный на поле брани товар. Для этого нам сначала надо узнать, сколько каждый из предметов стоит. Пока мы такую информацию не выводили, поэтому дополним функцию GetItemName сведениями о цене предмета:
Сегодня - продолжаем разработку ролевой игры. Последний выпуск на эту тему - N 91. Массив товаров у нас сформирован. Правда, пока в товарах не хватает главного параметра -цены. Поэтому добавим его в массив ItemTypes, для каждого из восьми типов. Отметим, что цену надо будет уточнять для магических предметов, у которых существует деление на подтипы. Можно цену хранить во вспомогательном массиве Ints, а можно выделить в типе TGameltem специальное поле, предназначенное для хранения цены. Давайте так и поступим:
Теперь, когда мы полиостью определились с перечнем и структурой типов предметов в игре, реализуем упомянутый режим, когда из убитого монстра выпадает некий предмет. Для этого нам потребуется нечто, схожее с кодом процедуры расстановки предметов на генерируемой карте. Ведь в этом коде предметы формируются случайно, и было бы неплохо этим кодом воспользоваться и в текущем случае. Для этого давайте выделим соответствующую часть процедуры MapGeneration в отдельную процедуру GenerateRandomltem (в модуле Gameltcm), которая будет выдавать случайно созданный предмет. Правильнее оформить ее в виде функции, но к сожалению версия Borland Pascal еще не умела поддерживать функции, которые возвращают значения сложных типов данных. В число параметров также добавим начальные координаты предмета на земле и текущий уровень генерации карты (MapLevel) - он нужен нам для подсчета случайно разбрасываемой суммы.
Добрый день, уважаемые посетители сайта. В этом году по Вашим просьбам я начал записывать цикл видео уроков, который посвящен созданию игр на делфи. Этот видео курс рассчитан на полных новичков в делфи и программировании, как таковом. Поэтому я буду учить программировать игры в среде Delphi с полного нуля и пользоваться интерфейсом самого делфи.
Следующий шаг по развитию нашей уже весьма солидной игры - это ввод в нее кого элемента, торговли. Предметов на карте можно найти уже достаточно много. В недалеком будущем мы введем очень популярный в ролевых играх прием, когда из монстра выпадают полезные предметы и деньги (почему это делается позже, а не сейчас станет понятно из дальнейшего текста), но копить их не имеет смысла, так как со всем рапорядиться не удастся. Так, магу не нужен меч, а воину - магические заклятья, Игроку накопленные предметы желательно продавать, а на вырученные деньги покупать что-то более подходящее по классу.
Научим персонажа-мага владеть магическими предметами. Для большего интереса магия для использования будет доступна только классу магов. Предметы будут для существующих заклинаний, только для их использования не потребуегся манны. Пусть также некоторые предметы будут представлять собой магические жезлы, отличающиеся "многозарядностью" - возможностью неоднократного использования заклинаний.
Для демонстрации возможностей магической системы создадим два заклинания. Первое, назовем его "Огненный шторм", будет наносить повреждения от 1 до 4 единиц каждому находящемуся на любой соседней с героем клеток, а второе - "Самоисцеление", которое быстро сможет восстановить собственное здоровье. За счет маны, конечно.
Последний из нереализованных нами классов, и важная область игры - магия. На первый взгляд может показаться, что ее реализация потребует большого объема работы, однако мы уже хорошо продумали и отладили механизмы расширения навыков героя, и введение новых навыков и умений не потребует каких-либо кардинальных переделок и улучшений. Под магией мы будем понимать способность игрока к выполнению так называемых заклинаний - магических действий, а также к использованию магических предметов.
Начнем с «верха» с интерфейса ведения стрельбы. Пусть герой можег поражать только врагов, которые находятся только на одной прямой линии с ним - либо по вертикали. Для выстрела по одному из этих четырех направлений удобнее всего использовать клавиши-стрелки, но они уже используются для перемещения персонажа, поэтому за стрельбу по четырем направлениям будут отвечать клавиши a, d, w и z. Процедурой MoveHero будем вызывать новую процедуру HeroShot, которой в ряде параметров зададим единичный вектор направления стрельбы.
Перед выводом статистики немного улучшим существующий код. Пока у нас не реализован момент роста уровня героя при увеличении опыта (процедура IncXP в модуле Него). Вот как мы его запрограммируем: