В общем такого характера проблемка. Все условно, не важно что это будет - юнит, integer, real, то есть от этого можно целиком абстрагироваться. Суть такая - есть 3 (4.5.6.7.8) условных боевых единиц и у каждой есть копия. Нужно чтобы копии пошли атаковать основных героев, но так, чтобы условная копия под номером 6 не пошла атаковать основного героя под номером 6 ни в коем случае. Для примера попытался изобразить на картинке.
У кого какие мысли?
Принятый ответ
respect_gg, можно вобще вот так
- записываем в массив номера от 0 до N, где N это число игроков минус один, в ячейки с соответствующими номерами
- проходим циклом от N до 0, пусть номер итерации будет i
- на каждой итерации получаем случайное число R от 0 до N, Если оно совпало с i, то берем R= i+1 или R=i-1, с учетом границ
- меняем местами ячейки R и i
- если в ячейку i в результате обмена опять попало число с номером этой ячейки, делаем еще один случайный обмен (тут можно не делать дополнительную проверку на коллизию т.к. коллизия не может на этом этапе возникнуть повторно для этой ячейки)
Если я ничего не напутал - получаем на выходе массив чисел в котором числа не повторяются и не находятся в ячейках совпадающих со своим номером.
Использовать это потом - номер ячейки это один игрок, число в ячейке - другой.
Если нужен учет того что игроки могут иметь номера не идущие подряд (ливеры, компьютеры, просто игроки не использующиеся в этой системе) - нам понадобится дополнительный массив с номерами игроков, чтобы превратить номер ячейки и число в ячейке в реальный номер игрока.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ScorpioT1000