XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
karakym
СССР
offline
Опыт: 1,196
Активность:
Помогите продумать систему
Суть таоква:
есть переменная MaxPlayers
при инициализации карты эта переменная приобретает целое значение играющих игроков (от 1 до 12)
Теперь эту переменную нужно разделить на 3 ровных частей (Если игроков будет 12 или 9 или 6 или 3, то это будет легко сделать...)
то есть создаем еще одну переменную "RandomSelect" всего с тремя массивами.
Дальше нужно случайным но равномерным образом заполнить эти 3 массива с помощью MaxPlayers
Можно было бы сделать RandomSelect = MaxPlayers/3 , но имеем дело с целыми числами.
А вот например если значение MaxPlayers будет не делимое на 3, как же быть?
Ну тут нужно подобрать меньшее делимое число (например MaxPlayers у нас 8, на три не поделим, но можем поделить либо 6 либо 9, в этом случае меньшее делимое будет 6)
после чего остаток добавить случайным образом в один из трех массивов. (на примере, из 8 остатком будет 2 так вот возьмем каждого и раскинем по массивам, естественно что бы все в один не полезли)
Ну эт я так прикинул, как можно сделать, может есть легче путь?
Приоритетно (желательно) сделать на GUI
Старый 30.12.2014, 03:16
DioD

offline
Опыт: 45,184
Активность:
на бумажке "нарисуйте" алгоритм, сфотайте на телефон и прикрепите в тему, обсудим где именно и что именно у вас не так как должно быть.
можете в пейнте нарисовать.
Старый 30.12.2014, 08:58
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
Прежде всего ты бы в общем виде пояснил, чего хочешь.
А функция остатка есть в математических - modulo. 13 mod 3 = 1
Старый 30.12.2014, 09:29
ScorpioT1000
Работаем
online
Опыт: отключен
если int 8 делить на int 3, будет int 2
Старый 30.12.2014, 10:08
karakym
СССР
offline
Опыт: 1,196
Активность:
ScorpioT1000, я подозревал, но не знаю что помешало мне попробовать.
Вообщем есть 3 области (3 разные арены)
нужно распределить максимальное количество игроков (MaxPlayers) по этим трем "кучкам", для дальнейшего их "двигать (мгновенно)" каждую "кучку" в свою зону.
Двигать будем событием (либо истечением таймера либо по команде из строки), главное каждому играющему установить свою "игровую зону".
Старый 30.12.2014, 12:12
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
а что делать с лишними игроками?
Старый 30.12.2014, 12:16
karakym
СССР
offline
Опыт: 1,196
Активность:
Melissa, случайным образом раскидать по кучкам!
Минимально остаться игроков может 1, максимально же 2, по этому 2 лишних не должны попасть в одну и ту же "кучку"
Старый 30.12.2014, 12:34
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
Короче. вот так я в у себя в цемках разбиваю игроков на команды по введёному числу. Правда лишних я отправляю в 1 тиму, а не распределяю, ну думаю. сам додумаешься.
Миниатюры
Кликните на картинку для увеличения
Название:  1.jpg
Просмотров: 22
Размер:  119.7 Кбайт  
Старый 30.12.2014, 12:54
ScorpioT1000
Работаем
online
Опыт: отключен
Страшно)
Старый 30.12.2014, 12:55
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
Если конечно въедешь в этот страшный тройной цикл.
Melissa добавил:
ы
Старый 30.12.2014, 12:59
Extremator

offline
Опыт: 40,284
Активность:
set NUM = 0
Цикл А от 1 до (MaxPlayer)
   set NUM = NUM + 1
   if NUM > 3 then
      set NUM = NUM - 3
   set PLAYER = Случайный игрок из группы (FORCE_ALL)
   Удалить игрока PLAYER из группы FORCE_ALL
   Добавить игрока PLAYER в группу FORCE_TEAM[NUM]
Extremator добавил:
ну это если абстрактно...
Старый 01.01.2015, 11:58
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 21:05.