XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
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
ДжекВоробей
Изучаю Jass ~ 1%
offline
Опыт: 8,302
Активность:
как вариант при инициализации ставить солдатов в переменую отряд потом давать при выборе и того кого дали выдивать из переменой и дальше другому другой юнит пойдет и тоже снимаем с переменый и так дальше ) понятно?
Старый 15.08.2012, 00:11
HAMHAM

offline
Опыт: 2,774
Активность:
WarBagster:
как вариант при инициализации ставить солдатов в переменую отряд потом давать при выборе и того кого дали выдивать из переменой и дальше другому другой юнит пойдет и тоже снимаем с переменый и так дальше ) понятно?
Честно не очень ) у меня с переменными проблемы (
Старый 15.08.2012, 00:30
Пикс

offline
Опыт: 2,405
Активность:
Переменная в любом случае понадобится (без них ты вообще ничего сносного в триггерах не сделаешь). Ну а способ есть и попроще:
-Создай переменную целого типа и присвой ей случайное значение от 1 до 5
-Циклом пройди по всем игрокам и если номер игрока равен переменной то создать юнита типа 1, иначе создать юнита типа 2
Старый 15.08.2012, 09:05
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
HAMHAM

offline
Опыт: 2,774
Активность:
Пикс:
Переменная в любом случае понадобится (без них ты вообще ничего сносного в триггерах не сделаешь). Ну а способ есть и попроще:
-Создай переменную целого типа и присвой ей случайное значение от 1 до 5
-Циклом пройди по всем игрокам и если номер игрока равен переменной то создать юнита типа 1, иначе создать юнита типа 2
Смотри )
Я создаю переменную <i>
затем в событиях (инициализация карты)
затем в действиях (устанавливаю переменную <i> и присваеваю ей случайное целое между 1 и 5) получается следующая строчка:

Установить i = (Случайное целое число в диапазоне между 1 и 5)
А как по всем игрокам пройтись циклом ?
Я попробывал для каждого числа А делать действия и получилось что для каждого игрока создается по 5 юнитов оО
Старый 15.08.2012, 12:09
Пикс

offline
Опыт: 2,405
Активность:
HAMHAM, для числа от 1 до 5 делать:
если (GetForLoopIntegerA()=i) то
-создать юнит1 для игрок(номер(GetForLoopIntegerA()))
иначе
-создать юнит2 для игрок(номер(GetForLoopIntegerA()))
Старый 15.08.2012, 12:26
HAMHAM

offline
Опыт: 2,774
Активность:
Пикс:
HAMHAM, для числа от 1 до 5 делать:
если (GetForLoopIntegerA()=i) то
-создать юнит1 для игрок(номер(GetForLoopIntegerA()))
иначе
-создать юнит2 для игрок(номер(GetForLoopIntegerA()))
Получилось походу, протестил вроде работает.
Только допустим в игру вошло не 5, а 3 игрока. Получается один игрок получает 1 тип юнита, а два других игрока 2 тип юнита. Остальные игроки не создаются так как их вообще нет в игре.
Пробовал проверку слотов сделать (Если слот игрока = не используется) то делать (удалить игрока из игры) иначе ничего не делать.
также и удалять юнита и пропускать действия но ни че не работает (

Отредактировано HAMHAM, 15.08.2012 в 13:34.
Старый 15.08.2012, 12:58
Пикс

offline
Опыт: 2,405
Активность:
от 1 до 12
если (Slot status(игрок(номер(GetForLoopIntegerA())))==играет and Controller(игрок(номер(GetForLoopIntegerA())))==Человек) то:
если (GetForLoopIntegerA()=i and ) то
-создать юнит1 для игрок(номер(GetForLoopIntegerA()))
иначе
-создать юнит2 для игрок(номер(GetForLoopIntegerA()))
Старый 16.08.2012, 10:27
HAMHAM

offline
Опыт: 2,774
Активность:
Пикс:
от 1 до 12
если (Slot status(игрок(номер(GetForLoopIntegerA())))==играет and Controller(игрок(номер(GetForLoopIntegerA())))==Человек) то:
если (GetForLoopIntegerA()=i and ) то
-создать юнит1 для игрок(номер(GetForLoopIntegerA()))
иначе
-создать юнит2 для игрок(номер(GetForLoopIntegerA()))
Сделал только жаль протестить не на ком ( ну начинаю игру появляюсь я один хотя слот компьютера тоже присутствует, значит работает. спасибо тебе огромное, где тут лайки ставить ? )
Старый 16.08.2012, 12:21
SiT3D

offline
Опыт: 1,514
Активность:
Чёт или я не догоняю... но предложенный триг. Создаст всем играющим юнита 1 а не играющим юнита 2 так автор вроде хотел чтобы только 1 юнит был типа 1, остальные типа 2. Или это не весь код?
Старый 16.08.2012, 16:17
HAMHAM

offline
Опыт: 2,774
Активность:
SiT3D:
Чёт или я не догоняю... но предложенный триг. Создаст всем играющим юнита 1 а не играющим юнита 2 так автор вроде хотел чтобы только 1 юнит был типа 1, остальные типа 2. Или это не весь код?
Я сначало тож не въехал, но потом разобрался.
Сначало идет условие где проверяется ( слот игрока = играет и контролирует = человек ), если это условие выполняется далее идет следующее условие только для игроков находящихся в игре "совпадает ли номер игрока с рандомным числом" тобишь ( номер игрока = рандомное число ), если условие выполняется для игрока с чьим номером совпало рандомное число создается юнит "типа 1" иначе (для всех остальных создается юнит "типа 2". Если же первоначальное условие со слотом и контролем не выполняется, ( слот пуст или контролирует его компьютер ) то для этих слотов никаких юнитов не создается.
Старый 16.08.2012, 16:35
SiT3D

offline
Опыт: 1,514
Активность:
Вот тебе тогда проблема №1 рандомное число может и не совпасть не для 1 игрока. И тогда у тебя не будет уникального человечка. Потому что игроки могут занимать слоты 1 и 3 а число установится 2
Старый 16.08.2012, 16:42
Пикс

offline
Опыт: 2,405
Активность:
вместо i=Random()
сделай i=Номер случайного игрока, удовлетворяющего условиям (слот игрока = играет и контролирует = человек)
Старый 16.08.2012, 16:50
HAMHAM

offline
Опыт: 2,774
Активность:
Пикс:
вместо i=Random()
сделай i=Номер случайного игрока, удовлетворяющего условиям (слот игрока = играет и контролирует = человек)
SiT3D:
Вот тебе тогда проблема №1 рандомное число может и не совпасть не для 1 игрока. И тогда у тебя не будет уникального человечка. Потому что игроки могут занимать слоты 1 и 3 а число установится 2
Хм, сделал и получается если в игре всего один человек то он каждый раз будит уникальным так как его слот номер 1 и в игре его номер 1 или его слот 3 и в игре его номер 3 числа совпадают и ему дается всегда юнит "типа 1" правильно или я ошибаюсь ?
Старый 16.08.2012, 17:22
SiT3D

offline
Опыт: 1,514
Активность:
Да=). Чтобы ничего не менять особо, сделай ещё одно условие, если игрок 1, то снова установить i = рандом 1из 2 если =1 удалить старого и дать обычного, если 2 то ничего не делать. Например так. Тогда если ты один играешь, то есть шанс 50% что тебе дадут обычного юнита. Вернее заменят на обычного.
Старый 16.08.2012, 17:27
HAMHAM

offline
Опыт: 2,774
Активность:
SiT3D:
Я тоже когда то ломал голову над этим. Но мне на ум тогда совсем другие решения пришли. =0) а вообще не люблю алгоритм рандома ))
Ну рассказал бы какие решения )
Было б тоже неплохо узнать )
Старый 16.08.2012, 19:31
Extremator

offline
Опыт: 39,812
Активность:
HAMHAM:
Начинается игра, каждому игроку дается по одноиу юниту (неважно какому, но обязательно одинаквому)
Все способности у этих юнитов оденаковые, НО одному из 5 игроков попадается юнит у которого способности отличаются от остальных.
дать всем одинаковых юнитов без способностей...
» типа триггер
set I = random number ( от 1 до 5 )
Цикл А от 1 до 5
Если:
А = I
ТО:
дать спелл "ОСОБЫЙ"
Иначе:
дать спелл "ОБЫЧНЫЙ"
Старый 16.08.2012, 20:22
HAMHAM

offline
Опыт: 2,774
Активность:
Столкнулся с другой проблемой (
Для каждого числа А от 1 до 5 делать (действия)
Если (слот игрока А = играет и контролирует А = человек) то (i = номер случайного игрока из все игроки) иначе ничего не делать.
Если (слот игрока А = играет и контролирует А = человек) то (если ("Число А" == "i") то (дать юнит "типа 1") иначе (дать юнит "типа 2")
Получается что уникальных игроков может быть больше одного так как цикл повторяется 5 раз и каждый раз переменная <i> новое число.
Пробовал присваивать переменной случайного игрока в не цикла, но нельзя сделать проверку на слот и контроль так как в нем используется число А, которое еще как бы не задано.
----------------------------------------------------------------------------------------------------​-----
Я конкретно запутался так как не могу протестить нормально на людях (
поэтому точно немогу понять работает или не работает (

Отредактировано HAMHAM, 16.08.2012 в 22:18.
Старый 16.08.2012, 21:56
Fakov
Viva la Fa
offline
Опыт: 102,058
Активность:
есть же функция - pick random unit in unit group. Ставишь там пикание 1 юнита и все.
Старый 16.08.2012, 22:39
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:19.