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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2012, 22:44   #1
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию Delphi. Вопрос с алгоритмом пакетирования.

День добрый.
Может кто ни будь может помочь(не написать код), просто подкинуть мысль по нижеизложенному поводу. Думаю 1,5 дня, но мыслей нет никаких. Собсно ломаю голову над эмулятором боя одной старой игры.

В нашем случае число пакетов равно 4.
У первого игрока число юнитов в пакете 2, у второго 1.
Случайным образом выбираем порядок в котором будут стрелять игроки (в нашем случае таких возможностей всего 2: сначала первый потом второй, и наоборот. В случае 3 игроков возможно 6 вариантов: 1-2-3, 1-3-2, 2-1-3, 2-3-1, 3-1-2, 3-2-1, и т.п.).

Итак, у нас получилось 4 пакета, причем у первого в пакете 2 юнита, а у второго - 1. Расписывая эту последовательность, получаем [A2 B1][A2 B1][A2 B1][A1 B1]. Последний пакет оказался неполным ( Xчисло, означает, что стреляет число юнитов стороны X).

Т.к. у нас порядок следования игроков в каждом пакете случаен, то возможны следующие варианты:

(A2 B1)(A2 B1)(A2 B1)(A1 B1)
(A2 B1)(A2 B1)(A2 B1)(B1 A1)
(A2 B1)(A2 B1)(B1 A2)(A1 B1)
(A2 B1)(A2 B1)(B1 A2)(B1 A1)

(A2 B1)(B1 A2)(A2 B1)(A1 B1)
(A2 B1)(B1 A2)(A2 B1)(B1 A1)
(A2 B1)(B1 A2)(B1 A2)(A1 B1)
(A2 B1)(B1 A2)(B1 A2)(B1 A1)

(B1 A2)(A2 B1)(A2 B1)(A1 B1)
(B1 A2)(A2 B1)(A2 B1)(B1 A1)
(B1 A2)(A2 B1)(B1 A2)(A1 B1)
(B1 A2)(A2 B1)(B1 A2)(B1 A1)

(B1 A2)(B1 A2)(A2 B1)(A1 B1)
(B1 A2)(B1 A2)(A2 B1)(B1 A1)
(B1 A2)(B1 A2)(B1 A2)(A1 B1)
(B1 A2)(B1 A2)(B1 A2)(B1 A1)

Не знаю как реализовать в массивах разбивку юнитов на 16 линий пакетов.
Готов принять любую помощь.
Artsiom вне форума Ответить с цитированием
Старый 05.08.2012, 23:09   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Что-то не могу понять, что у вас понимается под пакетом?
Базиля вне форума Ответить с цитированием
Старый 05.08.2012, 23:17   #3
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Грубо: пакет это, например А2(два юнита стороны А) стреляет в В1(один юнит с другой стороны). Может я чего логическое пропустил... полная версия на http://dc.cdelta.org/dc:articles:battle_manual в пункте пакетирование.
Artsiom вне форума Ответить с цитированием
Старый 06.08.2012, 00:30   #4
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Хорошо.
Сегодня я уже если честно не в состоянии соображать логически.
Завтра с утра обзятельно загляну в тему, если никто не поможет, постараюсь подкинуть идею
Базиля вне форума Ответить с цитированием
Старый 06.08.2012, 16:19   #5
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Прочитал про пакетирование, вроде как более - менее все проясняется.
Правильно ли я понимаю что в этой таблице:
Цитата:
(A2 B1)(A2 B1)(A2 B1)(A1 B1)
(A2 B1)(A2 B1)(A2 B1)(B1 A1)
(A2 B1)(A2 B1)(B1 A2)(A1 B1)
(A2 B1)(A2 B1)(B1 A2)(B1 A1)

(A2 B1)(B1 A2)(A2 B1)(A1 B1)
(A2 B1)(B1 A2)(A2 B1)(B1 A1)
(A2 B1)(B1 A2)(B1 A2)(A1 B1)
(A2 B1)(B1 A2)(B1 A2)(B1 A1)

(B1 A2)(A2 B1)(A2 B1)(A1 B1)
(B1 A2)(A2 B1)(A2 B1)(B1 A1)
(B1 A2)(A2 B1)(B1 A2)(A1 B1)
(B1 A2)(A2 B1)(B1 A2)(B1 A1)

(B1 A2)(B1 A2)(A2 B1)(A1 B1)
(B1 A2)(B1 A2)(A2 B1)(B1 A1)
(B1 A2)(B1 A2)(B1 A2)(A1 B1)
(B1 A2)(B1 A2)(B1 A2)(B1 A1)
Содержится ифнормация о том, кто в кого стреляет первым?
Т.е. например, берем первую строку:
Цитата:
(A2 B1)(A2 B1)(A2 B1)(A1 B1)
И видим что 2 юнита игрока А стреляют в 1 юнита игрока B и т.д. ?

Цитата:
Не знаю как реализовать в массивах разбивку юнитов на 16 линий пакетов.
Что такое 16 линий пакетов? О подобных вещах в мануале ни слова.
Базиля вне форума Ответить с цитированием
Старый 06.08.2012, 16:51   #6
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Цитата:
Сообщение от Базиля Посмотреть сообщение
Прочитал про пакетирование, вроде как более - менее все проясняется.
Содержится ифнормация о том, кто в кого стреляет первым?
Т.е. например, берем первую строку:
(A2 B1)(A2 B1)(A2 B1)(A1 B1)
И видим что 2 юнита игрока А стреляют в 1 юнита игрока B и т.д. ?
Да, всё верно.
Цитата:
Сообщение от Базиля Посмотреть сообщение
Что такое 16 линий пакетов? О подобных вещах в мануале ни слова.
16 линий это 16 вариантов(извиняюсь, ошибся со словом) порядка стрельбы(т.е. кто в кого). И дальше там перечислены все 16 вариантов. Проблема в том как составить эти варианты.

Последний раз редактировалось Artsiom; 06.08.2012 в 16:52. Причина: поправил
Artsiom вне форума Ответить с цитированием
Старый 06.08.2012, 17:48   #7
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Artsiom
Получается 4 игрока уже участвовать в игре будут?
Базиля вне форума Ответить с цитированием
Старый 06.08.2012, 17:49   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
И видим что 2 юнита игрока А стреляют в 1 юнита игрока B и т.д. ?
Цитата:
Да, всё верно
Нет. не совсем так.
(A2 B1)
A2 -- 2 юнита A стреляют по противнику
затем
B1 -- 1 юнит B стреляет по противнику.

() затем идет следующий блок. и так до исчерпания варианта (до исчерпания юнитов у А и B).

A и B кто начинает первым, кто вторым. цифры сколько юнитов будет задействовано.

пакет означает что не все юниты одной стороны сразу вступают в бой. а противник тупо ждет окончания огня, и только потом отвечает.
А огонь ведется порциями (пакетами) и при этом со случайным выбором очередности огня.
(A..B..) (A..B..) (A..B..) ... это один вариант развития событий(очередности огня)
(A..B..) (B..A..) ..... а это другой.
Цифры особой роли не играют (они постоянны, за исключением последнего (неполного) блока в каждой строке.). А их сумма есть общее число юнитов у какой-либо стороны.

число порций (скобок) в пакете (строке) не постоянно и равно числу юнитов у противника с наименьшим числом юнитов.

каждая порция есть либо Ax By либо By Ax

примерная гененрация ОДНОГО случайного пакета.
Код:
qA:=<число юнитов A>;
qB:=<число юнитов B>;
r:=min(qA, qB); //число порций
mA:=qA div r; // мощность порции A
mB:=qB div r; // мощность порции B

for j:=1 to r-1 do begin //полные порции
  case random(2) of
  0: s:=format('A%d B%d',[mA, mB]);
  1: s:=format('B%d A%d',[mB, mA]);
  end;
end;

//последний возможно неполный блок
  case random(2) of
  0: s:=format('A%d B%d',[qA-mA*(r-1), qB-mB*(r-1)]);
  1: s:=format('B%d A%d',[qB-mB*(r-1), qA-mA*(r-1)]);
  end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.08.2012, 18:10   #9
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Нет. не совсем так.
Да, сам не разобравшись полез что то делать.
Не обратил внимание на фразу "Выбранные юниты стреляют, учитывая приоритеты и т.п. и т.д."
Цитата:
Сообщение от evg_m Посмотреть сообщение
примерная гененрация ОДНОГО случайного пакета.
Возможно что тут не верно.
Ведь с начала составляются(а не генерируются случайно пакеты) все возможные варианты (А2 В1) и далее. и так пока не кончатся юниты у двух сторон, а потом из них выбирается рандомно один вариант по которому они и стреляют.
Artsiom вне форума Ответить с цитированием
Старый 06.08.2012, 19:39   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Ведь с начала составляются(а не генерируются случайно пакеты) все возможные варианты (А2 В1) и далее. и так пока не кончатся юниты у двух сторон, а потом из них выбирается рандомно один вариант по которому они и стреляют.
а какая разница
случайно выбрать ОДИН из полного списка.
или
случайным образом составить ОДИН.

При условии что вероятности выпадения(выбора/генерации), будут одинаковы.

Можно вообще отказаться от пакетов.
1. Все юниты (всех противников) имеющие право действия выстраиваются в очередь
2. затем данная очередь перемешивается случайным образом
3. и действия юнитов выполняются в порядке случайной очереди.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.08.2012 в 19:53.
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