Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [PHP] Небольшая формула 
:(
    Опции темы
Baltazar5000
Дата 22.1.2010, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 6.12.2006

Репутация: нет
Всего: нет



Имеется такое распределение:

количество воинов / их очки / общая сумма очков

например:

Стрелки                     Ракетчики                      Итп
10/5/50                       10/10/100                  5/20/100

Общий урон составил 117 очков(2 очка в конце можно отбросить)
Надо высчитать кто рандомным образом погиб.
Т.е. в данном случае 5 Итп 3 Стрелка или 3 Итп 5 Ракетчиков 1 стрелок.

Как реализовать данный алгоритм? Мучаюсь вторые сутки. Можно сделать примитивно без рандома. Заранее благадарю.
PM MAIL   Вверх
bars80080
Дата 22.1.2010, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



по-моему, данная задача не имеет практической плоскости применения. то есть алгоритм составлен задом наперёд.
должно вначале определяться у кого какой урон, а затем суммироваться общее количество очков урона
PM MAIL WWW   Вверх
skyboy
Дата 22.1.2010, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



алгоритмическое предложение. я так понимаю, как раз с этим проблема, а не с арифметическими операциями "вычесть" и "разделить".
а у каждого типа нет своего показателя "защита"? тогда было бы не "рандомно погиб", а ущерб распространялся бы на группы войск обратнопропорционально мощности защиты. если же нет такого показателя, то следует определиться, какова конечная цель искомого алгоритма: минимальное количество погибших юнитов(сначала погибают самые живучие), "справедливость"(урон распределяется по всем группам пропорционально количеству юнитов), "полнота ущерба"(т.е. "израсходовать" все очки урона - так, чтоб минимизировать значение урона,"пропавшее впустую" - т.н. "задача о размене денег"), "сначала умирают самые слабые".
короче, мне кажется, что вариантов рассчета множество. впрочем, в РПГ я практически не играю. Возможно, там имеется некий "стандарт" рассчета урона.
PM MAIL   Вверх
Baltazar5000
Дата 23.1.2010, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 6.12.2006

Репутация: нет
Всего: нет



skyboy, Ты говоришь правильные вещи =)) Но что-то я не могу сообразить чтоделать со всеми этими характеристиками (защита, атака, скорость и т.д.) можешь предложить конкретную формулу?

bars80080,  Видно ты не совсем меня понял) Каждый юнит составляет нное количество очков. По куче юнитов нанесли определённый урон в очках. Нужно вычесть рандомом кто погиб.

Вообще, на данной стадии развития проекта мне бы подощёл вариант "сначала погибают самые живучие" или наоборот. Конечно рандом интереснее. Кто может предложить решение данной задачи?

PM MAIL   Вверх
skyboy
Дата 24.1.2010, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Baltazar5000 @  23.1.2010,  16:35 Найти цитируемый пост)
можешь предложить конкретную формулу?

нет, тебе нужна не формула. формула - это для рассчета чего-то. а последовательность действий: выбрать, вычесть, уменьшить общее количество - это уже алгоритм.
случайность будет бессмысленна, мне кажется. есть один танк и 10 лучников. урон таков, что танк не погибнет. разве это логично: бомбили клетку, выжили все лучники, только у танка здоровье немного уменьшилось? все же вариант с учетом "защиты" мне как-то логичнее кажется.
а насчет "предложить": что тут предлагать?
есть значение урона. есть набор элементов, разного здоровья и количества в каждой группе.
выберем стратегию "первыми погибают самые живучие". 
0. сортируем группы по значению здоровья одной единицы, чтоб проще было обрабатывать.
1. находим группу, с максимальным значением здоровья одной единицы, но так, чтоб это значение было меньше значения урона.
2. вычисляем количество "убитых" юнитов, уменьшаем значение урона и количество юнитов в соответствующей группе
3. если оставшееся значение урона меньше значения здоровья самой хилой единицы, прекращаем рассчет. если больше, повторяем с пункта 1.
недостаток - часть урона будет "пропадать". чтоб компенсировать этот недостаток(который не в алгоритме: такое будет при любой стратегии рассчета, если значенеи урона будет меньше количества здоровья самой слабой единицы) есть вариант, который лично я наблюдал в "героях меча и магии": у каждой армии есть кроме параметра "живучесть одной единицы" ещё параметр "здоровье недобитой единицы". типа, 10 танков по 100 единиц здоровья, но у 11 единицы как будто здоровья только 5 единиц осталось. Малейший урон - и из 11 танков остается 10.
в таком случае, урон не будет "пропадать впустую"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0786 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.