Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2010, 21:47   #1
lowercase
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 88
Лампочка шанс сумирования числа

Доброго времени суток! я уже не первый день (а может и месяц) задаюсь этим вопросом..Наверное большенство из вас играли или слышали о такой игре как World of Warcraft.. там реализирована такая штука или метод или функицыя.. незнаю как еще можно это назвать.. как критический эфект от заклинания которое произносит персонаж.. или от его удара мечом)).. а основа этого всего это шанс нанести этот же дополнительный критический урон, который наносится относительно процентного значения.. то есть, если шанс нанести дополнительный критечекий урон равен 0% то я никогда не сделаю критический удар, если 100% я буду делать его постоянно. 50% - половина моих ударов - критичны (ну я думаю смысл ясен 3%, 16% - тоже возможный шанс)..

тут все удары это функция random
например random(16)+30 (я могу нанести урон от 30 до 45 единиц)
и критический эффект это тоже рандом, ну например random(81)+20
и есть шанс того что я нанесу критический удар (любой шанс от 0% до 100%)
и того результат = random(16)+30 + шанс в N процентов на добаление еще random(81)+20..

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

Последний раз редактировалось lowercase; 22.08.2010 в 22:02.
lowercase вне форума Ответить с цитированием
Старый 22.08.2010, 22:15   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
N := random(100);
Case N Of
0..98 : NormalBoom;
99     : CriticalBoom;
End;

...

Function CriticalBoom: Integer;
Begin
 DAMAGE := Random(MAXDAMAGE) * 2;
End;

Function NormalBoom: Integer;
Begin
 DAMAGE := Random(MAXDAMAGE);
End;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 23.08.2010, 11:04   #3
lowercase
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 88
По умолчанию

нет это не совсем то...
дело в том что шанс дополниетльного сумирования может быть не целым числом например
15,78%,81,13%, 55,02% и тд...
и сколько будет произведено таких фунций тоже не известно.. то есть:
если я сделаю 4 удара при шансе 50% то это не значит что 2 из них обязательно будут критическими... а может критическим бует 3 удара а 1 некрит.. и следуших 2 некритическими...

прсто должно быть как в реальности.. допустим обычно человек кидает камень в среднем на 40-50 метров
и шанс того что он кинет на 55-65 у него может быть равен 18%.. но наперед не извесно сколько раз он будет кидать камень
и формула типа:
<кол-во критических бросков> = <общее кол-во бросков> * 18 / 100 не прокатит..(но она точно будет работать при извесном колличестве бросков)..
и в вашем примере китический удар будет только в том случае если шанс равен 100%.. эта задача как по мне не столь легкая как кажится на первый взгляд

Последний раз редактировалось lowercase; 23.08.2010 в 11:12.
lowercase вне форума Ответить с цитированием
Старый 23.08.2010, 13:52   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
function IsSuper(sper: integer): boolean;
//suer вероятность сууперудара выраженная в ЦЕЛЫХ процентах
// result= true с вероятностью super процентов
begin
  result:=random(100)<=super;
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 23.08.2010 в 14:18.
evg_m вне форума Ответить с цитированием
Старый 23.08.2010, 16:09   #5
lowercase
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 88
По умолчанию

чесно говоря я бы врядли когода нибудть додумался до такого..
я знал что задачу можно решить просто.. но уж не думал что настолько))

спасибо большое evg_m! вроде и мелоч задача но интересно увидить решение)
еще раз спасибо большое!
lowercase вне форума Ответить с цитированием
Старый 23.08.2010, 16:13   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

А можно и так:
Код:
N := random(101);
Case N Of
0..SUPERCHANCE : NormalBoom;
SUPERCHANCE+1..100     : CriticalBoom;
End;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 23.08.2010, 16:25   #7
lowercase
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 88
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
А можно и так:
Код:
N := random(101);
Case N Of
0..SUPERCHANCE : NormalBoom;
SUPERCHANCE+1..100     : CriticalBoom;
End;
в прицыпе я согласен, такой пример тоже будет работать))(я не проверял но на вид вроде все правильно)
спасибо!)
lowercase вне форума Ответить с цитированием
Старый 23.08.2010, 17:11   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Код:
N := random(101);
Case N Of
0..SUPERCHANCE : NormalBoom;
SUPERCHANCE+1..100     : CriticalBoom;
End;
вот только SUPERCHANCE фиксирована и невозможно изменить в процессе работы программы
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить:у=а*(в*в*в)*с,где а,в,с-двоичные числа.Для хранения числа использ.массив! Таняпервокурсница Помощь студентам 4 04.06.2010 12:08
Даны натуральные числа m,n. Посчитать сумму m последнего числа n. лялька Паскаль, Turbo Pascal, PascalABC.NET 6 25.12.2008 15:22
Шанс "дропа" в % Zeraim Общие вопросы Delphi 9 06.12.2008 15:58
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 21:49