HAMHAM
offline
Опыт:
2,774Активность: |
Рандомный выбор
Вообщим цель такая
Карта на 5 человек по сети Начинается игра, каждому игроку дается по одноиу юниту (неважно какому, но обязательно одинаквому) Все способности у этих юнитов оденаковые, НО одному из 5 игроков попадается юнит у которого способности отличаются от остальных. Но кому попадется такой юнит неизвестно. тобишь рандомное попадание. Юнит который отличается от всех должен быть 1 тоесть не может быть так 2 юнита - одного типа, 3 юнита - другого типа. Должно быть 4 юнита - один тип, 1 юнит - другой тип. Ну думаю суть понтяна. Значит пишу тригер В событие - инициализация карты. В действиях- вставляю If / then / else (Если тогда иначе)
окошко настройки действий ( Если Condition то делать Action иначе Action ) настраиваю так Если ((случайное целое число в диапазоне 1 до 5) меньше 5) то делать (Группа игроков - Выбрать каждого игрока в (Все игроки) и произвести (Боевая единица - Создать 1 Пехотинец для (Случайный игрок из (Все игроки))иначе (Ничего не делать) Получается включаю проверку карты из 5 игроков рандомно выберается 1 и ему дается пехотинец Как сделать так чтобы всем остальным довался другой тип вйоск ? Вообщим я запутался целый день мучаюсь. Помогите разобраться Не прошу сделать за меня прошу подробных разъяснений |
14.08.2012, 22:41 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ДжекВоробей
Изучаю Jass ~ 1%
offline
Опыт:
8,302Активность: |
как вариант при инициализации ставить солдатов в переменую отряд потом давать при выборе и того кого дали выдивать из переменой и дальше другому другой юнит пойдет и тоже снимаем с переменый и так дальше ) понятно? |
15.08.2012, 00:11 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
HAMHAM
offline
Опыт:
2,774Активность: |
WarBagster:
Честно не очень ) у меня с переменными проблемы ( |
15.08.2012, 00:30 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Пикс
offline
Опыт:
2,405Активность: |
Переменная в любом случае понадобится (без них ты вообще ничего сносного в триггерах не сделаешь). Ну а способ есть и попроще: -Создай переменную целого типа и присвой ей случайное значение от 1 до 5 -Циклом пройди по всем игрокам и если номер игрока равен переменной то создать юнита типа 1, иначе создать юнита типа 2 |
15.08.2012, 09:05 | #4
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
BAG94
offline
Опыт:
49Активность: |
можно без переменной.
В действиях сначала создаешь четыре юнита и еще одного. Потом делаешь так: Unit - change ownership of (unit1) to (random player from (all players matching condition(((matching player) slot status) equal to is playing))) and change color Unit1 - твой юнит с другими способностями Теперь остальные От 2го до 4го.
Это нужно повторить для каждого юнита Unit - change ownership of (сюда от 2го до 4го) to (random player from (all players matching ((number of units in (units owned by (matching player)))equal to 0))) and change color После можно их подвинуть если нужно чтоб они стояли в разных местах |
15.08.2012, 09:44 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
HAMHAM
offline
Опыт:
2,774Активность: |
Пикс:
Смотри )
Я создаю переменную <i> затем в событиях (инициализация карты) затем в действиях (устанавливаю переменную <i> и присваеваю ей случайное целое между 1 и 5) получается следующая строчка:
Установить i = (Случайное целое число в диапазоне между 1 и 5) А как по всем игрокам пройтись циклом ? Я попробывал для каждого числа А делать действия и получилось что для каждого игрока создается по 5 юнитов оО |
15.08.2012, 12:09 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Пикс
offline
Опыт:
2,405Активность: |
HAMHAM, для числа от 1 до 5 делать: если (GetForLoopIntegerA()=i) то -создать юнит1 для игрок(номер(GetForLoopIntegerA())) иначе -создать юнит2 для игрок(номер(GetForLoopIntegerA())) |
15.08.2012, 12:26 | #7
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
HAMHAM
offline
Опыт:
2,774Активность: |
Пикс:
Получилось походу, протестил вроде работает. Только допустим в игру вошло не 5, а 3 игрока. Получается один игрок получает 1 тип юнита, а два других игрока 2 тип юнита. Остальные игроки не создаются так как их вообще нет в игре. Пробовал проверку слотов сделать (Если слот игрока = не используется) то делать (удалить игрока из игры) иначе ничего не делать. также и удалять юнита и пропускать действия но ни че не работает ( Отредактировано HAMHAM, 15.08.2012 в 13:34. |
15.08.2012, 12:58 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Пикс
offline
Опыт:
2,405Активность: |
от 1 до 12 если (Slot status(игрок(номер(GetForLoopIntegerA())))==играет and Controller(игрок(номер(GetForLoopIntegerA())))==Человек) то: если (GetForLoopIntegerA()=i and ) то -создать юнит1 для игрок(номер(GetForLoopIntegerA())) иначе -создать юнит2 для игрок(номер(GetForLoopIntegerA())) |
16.08.2012, 10:27 | #9
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
HAMHAM
offline
Опыт:
2,774Активность: |
Пикс:
Сделал только жаль протестить не на ком ( ну начинаю игру появляюсь я один хотя слот компьютера тоже присутствует, значит работает. спасибо тебе огромное, где тут лайки ставить ? ) |
16.08.2012, 12:21 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
SiT3D
offline
Опыт:
1,514Активность: |
Чёт или я не догоняю... но предложенный триг. Создаст всем играющим юнита 1 а не играющим юнита 2 так автор вроде хотел чтобы только 1 юнит был типа 1, остальные типа 2. Или это не весь код? |
16.08.2012, 16:17 | #11
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
HAMHAM
offline
Опыт:
2,774Активность: |
SiT3D:
Я сначало тож не въехал, но потом разобрался. Сначало идет условие где проверяется ( слот игрока = играет и контролирует = человек ), если это условие выполняется далее идет следующее условие только для игроков находящихся в игре "совпадает ли номер игрока с рандомным числом" тобишь ( номер игрока = рандомное число ), если условие выполняется для игрока с чьим номером совпало рандомное число создается юнит "типа 1" иначе (для всех остальных создается юнит "типа 2". Если же первоначальное условие со слотом и контролем не выполняется, ( слот пуст или контролирует его компьютер ) то для этих слотов никаких юнитов не создается. |
16.08.2012, 16:35 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
SiT3D
offline
Опыт:
1,514Активность: |
Вот тебе тогда проблема №1 рандомное число может и не совпасть не для 1 игрока. И тогда у тебя не будет уникального человечка. Потому что игроки могут занимать слоты 1 и 3 а число установится 2 |
16.08.2012, 16:42 | #13
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Пикс
offline
Опыт:
2,405Активность: |
вместо i=Random() сделай i=Номер случайного игрока, удовлетворяющего условиям (слот игрока = играет и контролирует = человек) |
16.08.2012, 16:50 | #14
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
HAMHAM
offline
Опыт:
2,774Активность: |
Пикс:
сделай i=Номер случайного игрока, удовлетворяющего условиям (слот игрока = играет и контролирует = человек) SiT3D:
Хм, сделал и получается если в игре всего один человек то он каждый раз будит уникальным так как его слот номер 1 и в игре его номер 1 или его слот 3 и в игре его номер 3 числа совпадают и ему дается всегда юнит "типа 1" правильно или я ошибаюсь ? |
16.08.2012, 17:22 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
SiT3D
offline
Опыт:
1,514Активность: |
Да=). Чтобы ничего не менять особо, сделай ещё одно условие, если игрок 1, то снова установить i = рандом 1из 2 если =1 удалить старого и дать обычного, если 2 то ничего не делать. Например так. Тогда если ты один играешь, то есть шанс 50% что тебе дадут обычного юнита. Вернее заменят на обычного. |
16.08.2012, 17:27 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
HAMHAM
offline
Опыт:
2,774Активность: |
SiT3D:
Ну рассказал бы какие решения ) Было б тоже неплохо узнать ) |
16.08.2012, 19:31 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
offline
Опыт:
39,812Активность: |
HAMHAM:
дать всем одинаковых юнитов без способностей...
» типа триггер
|
16.08.2012, 20:22 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
HAMHAM
offline
Опыт:
2,774Активность: |
Столкнулся с другой проблемой (
Для каждого числа А от 1 до 5 делать (действия)
Если (слот игрока А = играет и контролирует А = человек) то (i = номер случайного игрока из все игроки) иначе ничего не делать. Если (слот игрока А = играет и контролирует А = человек) то (если ("Число А" == "i") то (дать юнит "типа 1") иначе (дать юнит "типа 2") Получается что уникальных игроков может быть больше одного так как цикл повторяется 5 раз и каждый раз переменная <i> новое число.
Пробовал присваивать переменной случайного игрока в не цикла, но нельзя сделать проверку на слот и контроль так как в нем используется число А, которое еще как бы не задано.
---------------------------------------------------------------------------------------------------------
Я конкретно запутался так как не могу протестить нормально на людях ( поэтому точно немогу понять работает или не работает ( Отредактировано HAMHAM, 16.08.2012 в 22:18. |
16.08.2012, 21:56 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Fakov
Viva la Fa
offline
Опыт:
102,058Активность: |
есть же функция - pick random unit in unit group. Ставишь там пикание 1 юнита и все. |
16.08.2012, 22:39 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|