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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2012, 20:38   #11
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Можно вообще отказаться от пакетов.
1. Все юниты (всех противников) имеющие право действия выстраиваются в очередь
2. затем данная очередь перемешивается случайным образом
3. и действия юнитов выполняются в порядке случайной очереди.
От пакетов не откажешься. Там ещё есть один фактор распределения: юниты распределяются в пакеты согласно их весу. Более лёгкие стреляют первые.
И в пакеты распределяется не просто, а
Находим число юнитов в пакете у каждого игрока. Для этого число юнитов у каждого игрока делиться на число пакетов и округляется с избытком (в случае, если получившееся число больше числа неотстрелявшихся юнитов у игрока, размер пакета устанавливается равным числу оставшихся неотстрелявшихся юнитов). В нашем случае 7/4→2 у первого игрока и 4/4→1 у второго. Внимание: округление осуществляется до ближайшего большего целого. Т.е. 5/4→2.
Цитата:
Сообщение от evg_m Посмотреть сообщение
а какая разница
случайно выбрать ОДИН из полного списка.
или
случайным образом составить ОДИН.

При условии что вероятности выпадения(выбора/генерации), будут одинаковы.
Наверное я не понимаю.
Варианты ведь составляются в зависимости от количества юнитов, изменяется как длинна варианта пакетов, так и количество этих вариантов. Под вариантом подразумеваю:
последний вариант (B1 A2)(B1 A2)(B1 A2)(B1 A1)
первый (A2 B1)(A2 B1)(A2 B1)(A1 B1) и тд.
Наверное разницы нет или случайно выбрать или случайно составить, но тогда надо сделать так что бы одинаковые пакеты не повторялись больше определённого количества раз...

Мне тут сказали что надо юзать базы данных, но больше ничего от неё не добился. Вопрос появился. Она врёт или с БД это можно легче сделать?
БД предназначена же для хранения данных и всё.
Artsiom вне форума Ответить с цитированием
Старый 06.08.2012, 21:35   #12
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,544
По умолчанию

Цитата:
Наверное разницы нет или случайно выбрать или случайно составить, но тогда надо сделать так что бы одинаковые пакеты не повторялись больше определённого количества раз...
Цитата:
Варианты ведь составляются в зависимости от количества юнитов, изменяется как длинна варианта пакетов, так и количество этих вариантов.
Код:
qB:=<число юнитов B>;
r:=min(qA, qB); //число порций (число пакетов) 
r:=min(qA,QB,qC); // как-то так для трех игороков
Цитата:
Находим игрока у которого наименьшее ненулевое число неотстрелявшихся юнитов. Сколько у него юнитов - столько будет пакетов (в нашем случае число пакетов равно 4)
Код:
mA:=qA div r; // мощность порции A (число юнитов А в одном блоке пакета)
Цитата:
Находим число юнитов в пакете у каждого игрока. Для этого число юнитов у каждого игрока делиться на число пакетов и округляется с избытком (в случае, если получившееся число больше числа неотстрелявшихся юнитов у игрока, размер пакета (последнего неполного) устанавливается равным числу оставшихся неотстрелявшихся юнитов). В нашем случае 7/4→2 у первого игрока и 4/4→1 у второго.
Цитата:
Внимание: округление осуществляется до ближайшего большего целого. Т.е. 5/4→2.
судя по этому немного не так как написано выше, а
Код:
ma:=qA div r;
if qA mod r >0 then mA:=mA+1; // округление в большую сторону
Код:
case random(2) of
  0: s:=format('A%d B%d',[mA, mB]);
  1: s:=format('B%d A%d',[mB, mA]);
  end;
Цитата:
Случайным образом выбираем порядок в котором будут стрелять игроки (в нашем случае таких возможностей всего 2: сначала первый потом второй, и наоборот. В случае 3 игроков возможно 6 вариантов: 1-2-3, 1-3-2, 2-1-3, 2-3-1, 3-1-2, 3-2-1, и т.
Код:
case ramdom(6) of
 0: A B С // s:=format('A%d B%d C5d',[mA, mB, mC]);
 1: A C B
 2: B A C
 3: B C A
 4: C A B
 5: C B A
 end;
Цитата:
но тогда надо сделать так что бы одинаковые пакеты не повторялись больше определённого количества раз...
Вот этого как раз делать НЕ НАДО. Все пакеты должны быть независмы и равновроятны.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.08.2012 в 21:54.
evg_m на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL Delphi алгоритмом RikkiTan Помощь студентам 0 14.04.2012 15:11
Проблема с алгоритмом VKorablev Общие вопросы C/C++ 4 22.12.2011 20:20
Проблема с алгоритмом... Petrum Общие вопросы C/C++ 4 23.11.2011 22:14
Помогите с алгоритмом Xelpher Помощь студентам 7 02.11.2009 19:03
Помогите с алгоритмом xxxNeXxxx Помощь студентам 3 18.10.2009 19:58