| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > [PHP] Небольшая формула |
| Автор: Baltazar5000 22.1.2010, 19:41 |
| Имеется такое распределение: количество воинов / их очки / общая сумма очков например: Стрелки Ракетчики Итп 10/5/50 10/10/100 5/20/100 Общий урон составил 117 очков(2 очка в конце можно отбросить) Надо высчитать кто рандомным образом погиб. Т.е. в данном случае 5 Итп 3 Стрелка или 3 Итп 5 Ракетчиков 1 стрелок. Как реализовать данный алгоритм? Мучаюсь вторые сутки. Можно сделать примитивно без рандома. Заранее благадарю. |
| Автор: bars80080 22.1.2010, 19:59 |
| по-моему, данная задача не имеет практической плоскости применения. то есть алгоритм составлен задом наперёд. должно вначале определяться у кого какой урон, а затем суммироваться общее количество очков урона |
| Автор: skyboy 22.1.2010, 20:03 |
| алгоритмическое предложение. я так понимаю, как раз с этим проблема, а не с арифметическими операциями "вычесть" и "разделить". а у каждого типа нет своего показателя "защита"? тогда было бы не "рандомно погиб", а ущерб распространялся бы на группы войск обратнопропорционально мощности защиты. если же нет такого показателя, то следует определиться, какова конечная цель искомого алгоритма: минимальное количество погибших юнитов(сначала погибают самые живучие), "справедливость"(урон распределяется по всем группам пропорционально количеству юнитов), "полнота ущерба"(т.е. "израсходовать" все очки урона - так, чтоб минимизировать значение урона,"пропавшее впустую" - т.н. "задача о размене денег"), "сначала умирают самые слабые". короче, мне кажется, что вариантов рассчета множество. впрочем, в РПГ я практически не играю. Возможно, там имеется некий "стандарт" рассчета урона. |
| Автор: Baltazar5000 23.1.2010, 17:35 |
| skyboy, Ты говоришь правильные вещи =)) Но что-то я не могу сообразить чтоделать со всеми этими характеристиками (защита, атака, скорость и т.д.) можешь предложить конкретную формулу? bars80080, Видно ты не совсем меня понял) Каждый юнит составляет нное количество очков. По куче юнитов нанесли определённый урон в очках. Нужно вычесть рандомом кто погиб. Вообще, на данной стадии развития проекта мне бы подощёл вариант "сначала погибают самые живучие" или наоборот. Конечно рандом интереснее. Кто может предложить решение данной задачи? |
| Автор: skyboy 24.1.2010, 00:09 |
нет, тебе нужна не формула. формула - это для рассчета чего-то. а последовательность действий: выбрать, вычесть, уменьшить общее количество - это уже алгоритм. случайность будет бессмысленна, мне кажется. есть один танк и 10 лучников. урон таков, что танк не погибнет. разве это логично: бомбили клетку, выжили все лучники, только у танка здоровье немного уменьшилось? все же вариант с учетом "защиты" мне как-то логичнее кажется. а насчет "предложить": что тут предлагать? есть значение урона. есть набор элементов, разного здоровья и количества в каждой группе. выберем стратегию "первыми погибают самые живучие". 0. сортируем группы по значению здоровья одной единицы, чтоб проще было обрабатывать. 1. находим группу, с максимальным значением здоровья одной единицы, но так, чтоб это значение было меньше значения урона. 2. вычисляем количество "убитых" юнитов, уменьшаем значение урона и количество юнитов в соответствующей группе 3. если оставшееся значение урона меньше значения здоровья самой хилой единицы, прекращаем рассчет. если больше, повторяем с пункта 1. недостаток - часть урона будет "пропадать". чтоб компенсировать этот недостаток(который не в алгоритме: такое будет при любой стратегии рассчета, если значенеи урона будет меньше количества здоровья самой слабой единицы) есть вариант, который лично я наблюдал в "героях меча и магии": у каждой армии есть кроме параметра "живучесть одной единицы" ещё параметр "здоровье недобитой единицы". типа, 10 танков по 100 единиц здоровья, но у 11 единицы как будто здоровья только 5 единиц осталось. Малейший урон - и из 11 танков остается 10. в таком случае, урон не будет "пропадать впустую" |