Случайный юнит из группы.
|
|
Hexing | Дата: Четверг, 11 Августа 2011, 17:45:28 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Помогите, не могу написать функция возвращающую случайного юнита из группы. Всё что вышло - какаята каша из bj_ переменных и прочей фигни с ForGroup. Есть ли native-ка делающая это? Если нет, то как оптимально решить эту задачу?
|
|
|
|
Igni2012 | Дата: Четверг, 11 Августа 2011, 18:31:16 | Сообщение # 2 |
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 3
Блокировки:
| Убивает случайного юнита из ранее созданной группы юнитов. call KillUnit( GroupPickRandomUnit(GetLastCreatedGroup()) )
|
|
|
|
Hexing | Дата: Четверг, 11 Августа 2011, 18:39:13 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| GroupPickRandomUnit - бужажешечка с кучай лишнего хлама... Вот мой предел:
|
|
|
|
[DS] | Дата: Четверг, 11 Августа 2011, 21:36:38 | Сообщение # 4 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| мб лупом?
|
|
|
|
Faion | Дата: Четверг, 11 Августа 2011, 22:11:27 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Вот:
Code library GetRndUnit { private unit array unit_array private int index = 0
private void rnd() { unit_array[index] = GetEnumUnit() index++ }
unit GetRndUnit(group g) { index = 0 ForGroup(g, function rnd) return unit_array[GetRandomInt(0,index)] } }
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
lawson | Дата: Четверг, 11 Августа 2011, 22:43:06 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| А что так нельзя set unit = FristOfGroup(group)
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
[DS] | Дата: Четверг, 11 Августа 2011, 22:45:53 | Сообщение # 7 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| "А что так нельзя set unit = FristOfGroup(group)" он берет первого юнита из группы, а не рандомно
|
|
|
|
lawson | Дата: Четверг, 11 Августа 2011, 22:51:54 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (|DS|) он берет первого юнита из группы А ты знаешь кто будет первый?
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
[DS] | Дата: Четверг, 11 Августа 2011, 22:53:25 | Сообщение # 9 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| первый попавщыйся
|
|
|
|
lawson | Дата: Четверг, 11 Августа 2011, 22:56:21 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (|DS|) первый попавщыйся А это не рандом?
Добавлено (11-08-2011, 22:56) --------------------------------------------- Можешь проверить: поставь в линию 10 юнитов выдели их в группу и убей первого попавщегося из нее с помощью KillUnit(FristOfGroup(group))
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Четверг, 11 Августа 2011, 22:59:45 |
|
|
|
[DS] | Дата: Четверг, 11 Августа 2011, 23:01:56 | Сообщение # 11 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| незнаю, но думаю будут умерать по очереди, хотя это догадки, у мя ве нет под рукой
|
|
|
|
lawson | Дата: Четверг, 11 Августа 2011, 23:04:32 | Сообщение # 12 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| [DS], Ты прав эта функция не подходит для рандомного выбора, она по каким то критериям выбирает юнита.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 12 Августа 2011, 00:14:56 |
|
|
|
[DS] | Дата: Четверг, 11 Августа 2011, 23:08:58 | Сообщение # 13 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| ну дык, точно, просто выбирает юнита из группы, потом делается действия, и удаляет этого юнита из группы, потом переходит к другому юниту
|
|
|
|
lawson | Дата: Четверг, 11 Августа 2011, 23:19:56 | Сообщение # 14 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| [DS], Кароче сейчас тест проведу сделаю скрины. Хочу узнать как выбирает эта функция юнита из группы.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Faion | Дата: Четверг, 11 Августа 2011, 23:31:57 | Сообщение # 15 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Quote (lawson) FristOfGroup()
Нет. Группа == нативный массив юнитов. Пик юнитов начинается от координат 0.0, и первыми идут герои, потом все остальное.
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
[DS] | Дата: Четверг, 11 Августа 2011, 23:44:30 | Сообщение # 16 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| По уровню юнита?
|
|
|
|
Faion | Дата: Четверг, 11 Августа 2011, 23:49:50 | Сообщение # 17 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| мб, прост факт есть факт, там рандомизацией и не пахнет.
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
[DS] | Дата: Четверг, 11 Августа 2011, 23:51:02 | Сообщение # 18 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| ну, я о чем
|
|
|
|
Hexing | Дата: Пятница, 12 Августа 2011, 09:54:20 | Сообщение # 19 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Faion) Вот:
Code library GetRndUnit { private unit array unit_array private int index = 0
private void rnd() { unit_array[index] = GetEnumUnit() index++ }
unit GetRndUnit(group g) { index = 0 ForGroup(g, function rnd) return unit_array[GetRandomInt(0,index)] } } Вауууу cJass спс
|
|
|
|
Igni2012 | Дата: Воскресенье, 14 Августа 2011, 00:13:17 | Сообщение # 20 |
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 3
Блокировки:
| Quote (Faion) library GetRndUnit { private unit array unit_array private int index = 0
private void rnd() { unit_array[index] = GetEnumUnit() index++ }
unit GetRndUnit(group g) { index = 0 ForGroup(g, function rnd) return unit_array[GetRandomInt(0,index)] } } Прошу перевести на простой JASS
|
|
|
|
lawson | Дата: Воскресенье, 14 Августа 2011, 00:32:52 | Сообщение # 21 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Igni2012) Прошу перевести на простой JASS Словами можно, берешь всех юнитов в группу потом перещелкиваешь по одному и каждого записываешь в перменную с индексом(номером юнита), и далее просто выбираешь методом тыка.
Добавлено (14-08-2011, 00:32) --------------------------------------------- Faion, А мне нравится как выглядит cJASS, напоминает AS, но уже привык к обычному жассу.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 14 Августа 2011, 00:33:09 |
|
|
|
Igni2012 | Дата: Воскресенье, 14 Августа 2011, 06:08:42 | Сообщение # 22 |
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 3
Блокировки:
| Quote (lawson) Словами можно, берешь всех юнитов в группу потом перещелкиваешь по одному и каждого записываешь в перменную с индексом(номером юнита), и далее просто выбираешь методом тыка.
Саму суть кода я понял, но не могу сделать в обычном JASS что бы переменные были только для Library... могу сделать только с глобальными...
|
|
|
|
FkoFF | Дата: Воскресенье, 14 Августа 2011, 07:36:08 | Сообщение # 23 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (Igni2012) Саму суть кода я понял, но не могу сделать в обычном JASS что бы переменные были только для Library... могу сделать только с глобальными... эээ
function GetRandUnit takes group g returns unit local unit array u local integer i=1 local group f=udg_Temp_Group
call GroupAddGroup(g,f)
loop set u[i]=FirstOfGroup(g) exitwhen u[i]==null set i=i+1 call GroupRemoveUnit(u[i],f) endloop
set bj_groupRandomCurrentPick=u[GetRandomInt(1,i)] loop exitwhen i==0 set u[i]==null endloop set f=null return bj_groupRandomCurrentPick endfunction
|
|
|
|