Меню сайта
Форма входа

Категории раздела
Уроки по созданию игр [38]
Программирование игр разной сложности
Игровые алгоритмы [24]
Алгоритмы, которые уже реализованы для разных жанров игр
Графика [5]
Учимся работать с графикой в Делфи
Мультимедиа [3]
Работа с мультимедийными возможностями Делфи
Другие статьи [18]
Статьи не вошедшие не в один из разделов
Ошибки [4]
Всевозможные ошибки и пути их решения
Среда, 15.05.2024, 03:13
Приветствую Вас Гость

Статьи по программированию

Главная » Статьи » Игровые алгоритмы

Ловкость, точность и нанесение урона врагу.

Ловкость, точность и нанесение урона врагу.

 

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

 

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

 

Чтобы добавить характеристику ловкость, нужно вего лишь добавить такую переменную или в раздел var или в созданную специально запись (record). Мы рассмотрим вариант, когда к примеру у нас есть такие переменные:

 

PPow - сила персонажа

PHp - здоровье персонажа

Plovk - ловкость персонажа

MPow - сила монстра

MHp - здоровье монстра

Mlovk - ловкость монстра

 

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

 

PPow:=10;

PHp:=100;

Plovk:=2;

MPow:=5;

MHp:=50;

Mlovk:=3;

 

Если же алгоритм описать словами, то выглядеть он будет следующим образом. Сначала мы случайно генерируем цифру, которая будет означать увернулся ли тот, по кому наносят удар или нет. Допустим максимальное значение, которое может быть у ловкости мы приймем равное 100 (а точнее 99, чтобы вероятность попадания была всегда). Тогда и цифра, которую мы будем генерировать также будет равна этой же цифре = 100. Ну и как же нам глядя на эту цифру понять увернулась жертва от удара или нет?

Все очень просто. Мы проверяем сгенерированную цифру - если она меньше или равна значению ловкости жертвы, то жертва уклонилась от удара. А если цифра больше значения ловкости жертвы, то удар по жертве был нанесен в полной мере. В этом случае у жертвы из здоровья отнимается значение силы персонажа. Как же будет наносить удар персонаж по монстру? В коде это будет выглядеть так:

 

Randomize; //запуск случайного генератора чисел

if random(100)+1<=Mlovk then

form1.caption:='Монстр уклонился от удара';

 

if random(100)+1>=Mlovk then

MHp:=MHp-Ppow;

 

Аналогичным образом будет наносить удары и монстр по персонажу:

 

Randomize; //запуск случайного генератора чисел

if random(100)+1<=Plovk then

form1.caption:='Персонаж уклонился от удара';

 

if random(100)+1>=Plovk then

PHp:=PHp-Mpow;

 

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

 

MToch - точность монстра

PToch - точность персонажа

 

Также присваиваем им начальные значения:

 

MToch:=40;

PToch:=60;

 

Добавляем изменения в наш алгоритм нанесения ударов.

 

Randomize; //запуск случайного генератора чисел

if random(100)+1<=Ptoch then

//если персонаж попал точно в цель тогда и проверяем

//уклонится ли враг от удара или нет

begin

if random(100)+1<=Mlovk then

form1.caption:='Монстр уклонился от удара';

 

if random(100)+1>=Mlovk then

MHp:=MHp-Ppow;

end;

 

Аналогично делаем для нанесения удара монстром по персонажу:

 

Randomize; //запуск случайного генератора чисел

if random(100)+1<=Mtoch then

begin

if random(100)+1<=Plovk then

form1.caption:='Персонаж уклонился от удара';

 

if random(100)+1>=Plovk then

PHp:=PHp-Mpow;

end;

 

Так с реализацией ударов, попаданий и уклонов мы разобрались. Теперь многим будет интересно понять а как же увидеть все то, что мы реализовали? У нас программа выполняет действия, которые не видны на екране нашего монитора. Чтобы мы что-то заметили нужно, например, нарисовать шкалу здоровья монстра и персонажа или просто отображать значения (цифры) здоровья враждебно настроенных персонажей.

 

Но это уже тема для других статей. Поэтому на этом все. Пишите интересующие Вас вопросы на нашем форуме. И удачи всем в создании игр.

 

Источник: delgame.at.ua

Категория: Игровые алгоритмы | Добавил: Armageddets (09.03.2014) | Автор: Ловкость, точность и нанесение урон
Просмотров: 2126 | Рейтинг: 5.0/2
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Оцените мой сайт
Всего ответов: 103
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0