DioD
offline
Опыт:
45,134Активность: |
Рандом
Значит так, есть некий массив регионов 32*32 (это самая маленькая ячейка)
Коих у меня 8192, не спрашивайте как я их забивал в массив, это не понять. Суть вопроса в том, что если используя рандом интегер
(0,8192) один и тот-же регион не попадал дважды, у меня было предположение каждый раз перезаписывать данные массива в другой массив и уменьшать рандом сид на 1, а полученый регион из массива удалять. Но увы не прокатило, есть идеи? |
18.06.2006, 03:17 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bugmaker
invulnerable
offline
Опыт:
2,282Активность: |
А может вот так сматри:
значит рандом(0,8192) глобалки: Код:
собсна действие: Код:
Я еще не проверял ругается ли редактор, ибо написал его на лету, но я проверю *) кароч идея в том что в глобалке udg_frenum хранится число уже выпаденных чисел а в массиве udg_fre само число (индексом у него служит udg_frenum для того чтобы записать следующее...) При проверке массив обходется циклом (udg_frenum будет числом интераций цикла) и если в массиве обнаруживается тока что выпавшее число возвр ноль, я ща попробую сделать код поумней, погади ка... в общем проверь... =====================[i]bugmaker добавил:============================ Забудь про то что я тебе в предыдущем посте выложил, эта лучше :D значи так... udg_array - логическая - массив Код:
Я не знаю будет ли тормазить когда будет обходить цикл с 8192 интерациями, но помоему это лучше чем прошлый... ди и я его проверил в ВЕ, работает... Отредактировано bugmaker, 18.06.2006 в 16:01. |
18.06.2006, 15:26 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Значит так, я решил проблему, причём сам, даже удивился простоте решения.
Нам потребуется 3 переменные или РБ КЕШ (ну это для извращенцев)
1 массив юнитов или регионов или чисел, заполненый 2 значение МАКС, последнее число массива будь то 100 или 1000 3 РАНДОМ СИД переменная сюда будет записано рандом число между 0 и МАКС после мы переносим последнюю запись на место выпавшей (будет выкидышь если выпадет последнее число, хотя для этого надо просто сравнить МАКС и СИД если совпадает просто понизить МАКС на 1) Ну и после переноси уменьшаем макс на 1 и очищаем переменную |
18.06.2006, 16:25 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bugmaker
invulnerable
offline
Опыт:
2,282Активность: |
интересно... Оказалось решение проблеммы такое простое(как говарица чем проще тем лучше (или краткость моя сестра :P))...молодца... Ща попробцю реализовать (от нефик делать) |
18.06.2006, 16:33 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Я всё уже проверил, не выкидывает и не глючит, шанс медленно повышается для массива в 8000 юнитов не лагает, работает превосходно, реализовано лучше чем в доте, я открыл код и удивился. |
18.06.2006, 16:36 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|