SergOz, твоя задача решается следующим образом:
1) Тебе нужен массив на 9 чисел. По умолчанию в них будут значения 1, 2, 3, 4, 5, 6, 7, 8, 9.
2) Тебе нужна переменная, которая будет хранить длину массива.
Для генерации случайного числа выполняем следующее:
1) Генерируем случайный индекс от 0 до РазмерМассива - 1.
2) Смотрим элемент в массиве под данным индексом и запоминаем его в результат.
3) Копируем последний элемент массива в тот, что выпал случайно.
4) Уменьшаем размер массива на один.
Привожу пример.
Массив: 1 2 3 4 5 6 7 8 9
Размер массива: 9
Генерируем случайный индекс от 0 до (9 - 1) = 4.
Под индексом 4 у нас значение 5. 5 → первый результат. Копируем в этот элемент значение последнего (9) и уменьшаем длину массива на один.
Массив: 1 2 3 4 9 6 7 8
Размер массива: 8.
Как видишь, после указанной операции у нас массив чисел, в котором уже гарантированно нет ранее сгенерированного числа.
Повторяем процедуру. Случайный индекс от 0 до (8 - 1) = 2.
В результат помещаем ещё одно число (3), которое заменяем на 8 в массиве.
Массив: 1 2 8 4 9 6 7
Размер массива: 7.
Случайный индекс: 6. В результат помещаем 7, заменяем 7 на 7 и уменьшаем размер массива на один.
Массив: 1 2 8 4 9 6
Размер массива: 6.
На ЕРМ тебе понадобятся:
!#VA(uniqueNumbers[9]:y); Массив, в котором хранятся уникальные числа
!!VR(uniqueNumbers):C1/2/3/4/5/6/7/8/9; сразу же его заполни
!!VR(sampleSize:y):S9; начальный размер массива
Сгенерировать случайный индекс можно командой R0/мин/макс.
Если нужно сгенерировать число от 0 до 9 - 1, можно сгенерировать от 1 до 9, а затем вычесть 1.
!!VR(randomInd:y):R0/1/(sampleSize) -1; получили случайный индекс.
!!VR(randomItemPtr:y):S(@uniqueNumbers) +(randomInd); Random item pointer — указатель на случайный элемент в переводе
Вычисляется как индекс начала массива + смещение в массиве. Если у тебя массив y50..y58, то 50 — его начальный индекс.
@uniqueNumbers и компилируется в начальный индекс массива
само значение по указателю можно получить так: y(randomItemPtr)
Попробуй поэкспериментировать. Если не выйдет, приведу полный код.
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|