Добрый день!
Совсем недавно начал изучать редактор и столкнулся трудностью в реализации следующей задачи:
Есть 4 игрока и 4 расы.
При инициализации карты каждый игрок должен получить одну из этих 4х расс и построить главное здание этой рассы в центре своего региона.
Рассы не должны повторяться.
Реализовать пытался на GUI через рандомное число от 1 до 4.
А чтобы исключить повторы я ввёл проверку по наличию здания на карте.
К примеру игрок 1 зарандомил эльфов и построил древо жизни.
Игрок 2 тоже зарандомил эльфов но т.к. древо жизни уже есть на карте, то рандом +1 и повторная проверка.
В общем иногда всё даже работает как нужно, но чаще всего возникают такие ошибки:
  1. 1 игрок может получить сразу несколько расс.
  2. Может заспавниться всего 2 или 3 здания, а остальные игроки остаются без них.
  3. Могут заспавниться все здания но принадлежать они будут одному игроку.
и т.д.
Заранее извиняюсь, что объясняю своими словами и не шарю в терминах.

Принятый ответ

МассивРас - массив рас.
ВерхРас - целочисленная, означающая самую последнюю занятую ячейку в МассивРас. Изначально 4.
РасаИгрока - массив расы игрока, id игрока есть номер ячейки.
Для А = 1 до 4 делать
    Число = Случайное число от 1 до ВерхРас
    РасаИгрока[A] = МассивРас[Число]

    Если МассивРас[Число] не равно МассивРас[ВерхРас], то
        МассивРас[Число] = МассивРас[ВерхРас]
    ВерхРас = ВерхРас - 1
Если у игроков id не 1, 2, 3 и 4, то нужно добавить массив IdИгрока, где в ячейках 1, 2, 3 и 4 будут записаны настоящие id игроков.
Для А = 1 до 4 делать
    Число = Случайное число от 1 до ВерхРас
    РасаИгрока[IdИгрока[A]] = МассивРас[Число]

    Если МассивРас[Число] не равно МассивРас[ВерхРас], то
        МассивРас[Число] = МассивРас[ВерхРас]
    ВерхРас = ВерхРас - 1
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
26
4 года назад
0
А в свойствах клана убрал обе галки? Если тестируешь через кнопку проверки карты в редакторе, то будут только красный и синий игроки, а сине-зелёный и фиолетовый всегда будут на фиксированных местах, потому можешь столкнуться с большим количеством совпадений, которые приведут к выводу, что случайная позиция игрока не работает. Если всё-таки не получится, то это ерунда какая-то, так не должно быть) Но если произойдёт, то надо будет вручную случайную позицию игрокам делать, для этого поставь в каждой из четырёх стартовых позиций здание, которые объедини в Отряд, нужна будет переменная для юнита, чтобы запоминать случайное здание из отряда, после выбора случайного игрока выбирай случайное здание, которое тоже удаляй из отряда, позиция этого здания и будет стартовой позицией игрока, для этого не создавай дом на его месте, а делай Replace здания на дом расы.

Вот только минусом всего этого будет интерфейс. Например, игрой была определена Нежить, а по триггеру выпал Альянс. Интерфейс, указатель мыши, иконка свободного работника и музыка не будут соответствовать расе, что некрасиво. Но можно в крайнем случае сделать нейтральный кастомный интерфейс для всех рас, нейтральную иконку работника и заменить музыку, очистив текущий и создав новый список воспроизведения.
2
6
4 года назад
2
Загруженные файлы
0
26
4 года назад
0
Гигамон, ты хоть проверял свой триггер? Где в нём гарантия, что не выпадет две Ратуши, например?
1
30
4 года назад
1
Несколько оффтоп, но "раса" пишется с одной "с". Название темы поправил.
2
6
4 года назад
2
8gabriel8, работает. Карту кидать не стал, потому что не знаю, какую сейчас версию варика используют. Если интересно, вот:
Загруженные файлы
2
29
4 года назад
2
Где в нём гарантия, что не выпадет две Ратуши, например?
Вот же она. Тут случайный элемент меняется местами с последним и сокращается массив.
Загруженные файлы
0
26
4 года назад
0
Господа, извините, меня утром переглючило и думал, что (Integer A) и Number одно и тоже, а цикл перебирается не от 1 до 4, а от 4 до 1)
Конечно, это рабочий вариант! Но автор уже решает проблему со случайным расположением самих игроков, может оставите свои рекомендации?
0
12
4 года назад
0
8gabriel8:
Господа, извините, меня утром переглючило и думал, что (Integer A) и Number одно и тоже, а цикл перебирается не от 1 до 4, а от 4 до 1)
Конечно, это рабочий вариант! Но автор уже решает проблему со случайным расположением самих игроков, может оставите свои рекомендации?
А что там рекомендовать. Тоже самое, только с перебором случайных точек/регионов. Алгоритм можно найти в карте от близзов Монолит.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.