Добавлен MaxSnoK
Добрый день!
Совсем недавно начал изучать редактор и столкнулся трудностью в реализации следующей задачи:
Совсем недавно начал изучать редактор и столкнулся трудностью в реализации следующей задачи:
Есть 4 игрока и 4 расы.
При инициализации карты каждый игрок должен получить одну из этих 4х расс и построить главное здание этой рассы в центре своего региона.
Рассы не должны повторяться.
При инициализации карты каждый игрок должен получить одну из этих 4х расс и построить главное здание этой рассы в центре своего региона.
Рассы не должны повторяться.
Реализовать пытался на GUI через рандомное число от 1 до 4.
А чтобы исключить повторы я ввёл проверку по наличию здания на карте.
К примеру игрок 1 зарандомил эльфов и построил древо жизни.
Игрок 2 тоже зарандомил эльфов но т.к. древо жизни уже есть на карте, то рандом +1 и повторная проверка.
А чтобы исключить повторы я ввёл проверку по наличию здания на карте.
К примеру игрок 1 зарандомил эльфов и построил древо жизни.
Игрок 2 тоже зарандомил эльфов но т.к. древо жизни уже есть на карте, то рандом +1 и повторная проверка.
В общем иногда всё даже работает как нужно, но чаще всего возникают такие ошибки:
- 1 игрок может получить сразу несколько расс.
- Может заспавниться всего 2 или 3 здания, а остальные игроки остаются без них.
- Могут заспавниться все здания но принадлежать они будут одному игроку.
Заранее извиняюсь, что объясняю своими словами и не шарю в терминах.
Принятый ответ
МассивРас - массив рас.
ВерхРас - целочисленная, означающая самую последнюю занятую ячейку в МассивРас. Изначально 4.
РасаИгрока - массив расы игрока, id игрока есть номер ячейки.
ВерхРас - целочисленная, означающая самую последнюю занятую ячейку в МассивРас. Изначально 4.
РасаИгрока - массив расы игрока, id игрока есть номер ячейки.
Для А = 1 до 4 делать
Число = Случайное число от 1 до ВерхРас
РасаИгрока[A] = МассивРас[Число]
Если МассивРас[Число] не равно МассивРас[ВерхРас], то
МассивРас[Число] = МассивРас[ВерхРас]
ВерхРас = ВерхРас - 1
Если у игроков id не 1, 2, 3 и 4, то нужно добавить массив IdИгрока, где в ячейках 1, 2, 3 и 4 будут записаны настоящие id игроков.
Для А = 1 до 4 делать
Число = Случайное число от 1 до ВерхРас
РасаИгрока[IdИгрока[A]] = МассивРас[Число]
Если МассивРас[Число] не равно МассивРас[ВерхРас], то
МассивРас[Число] = МассивРас[ВерхРас]
ВерхРас = ВерхРас - 1
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Можете пож-та объяснить, почему мы назначаем переменной значение Random player from PlayerGroup , потом сразу удаляем этого игрока из группы и только после этого спавним юнита.
Я думал, что нужно сперва назначить значение Random player from PlayerGroup, потом заспавнить юнита, а уже после этого удалить игрока из группы и назначить нового.
Ред. PT153
Хотя в некоторых случаях проще рандомных пулов сделать несколько без повторений и ролять сначала пул, а потом расу внутри нее.
На данный момент у меня спавн выглядит следующим образом:
Ииии на самом деле это тоже проблема.
В идеале у меня и игроки должны ресаться на рандомных точках и рассы у них должны быть рандомные.
На данный момент я в поисках решения данной проблемы.
В Свойствах игрока убери галку Фикс. позиция и в Событии триггера поставь не Map Initalization, а Time - Elapsed game time 0.1 sec. Возможно, что и в Свойствах клана надо будет галки убрать.