Как сделать random в проекте

andryvat

Пользователь
Регистрация
21.01.2016
Сообщения
38
Благодарностей
0
Баллы
6
Как сделать random в проекте, чтоб при каждом новом старте проекта менялась одна его часть. Будет несколько таких частей (групп экшенов), которые следут подменять. Но не по порядку а рэндом.
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Используйте Данные -> Random, далее через логический блок Switch, в зависимости от данных, ведите туда, куда нужно.
 
Последнее редактирование:

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
Каждую группу экшенов оформи в отдельный проект, собери их все в одном общем проекте с организацией рандомного выбора между ними, а потом этот проект уже используй в том месте, где тебе нужен рандомный кусок в твоём основном проекте.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
делаешь свич на все эти группы в зависимости от числа. А число рандомишь
 

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
делаешь свич на все эти группы в зависимости от числа. А число рандомишь
Используйте Данные -> Random, далее через логический блок Switch, в зависимости от данных, ведите туда, куда нужно.
Можно без Switch организовать:

Например, нам нужно зарандомить выбор между 10 отдельными группами экшенов, ставим их просто друг за другом, и в начале каждого ставим один и тот же блок рандомного выбора через спинтакс, в который помещаем 9 элементов, которые не используются в наборах экшенов, и в одном месте элемент, который используется. Зачем это нужно? Так мы получим вероятность 1 к 10, что выпадет именно текущий элемент. Если спинтакс выберет используемый в экшене элемент (например номер совпадения), то через переменную он подставится в нужное место, и текущая цепочка отработает, и основной шаблон пойдёт дальше. Если спинтакс выберет один из 9 неиспользуемых элементов, то через переменную подставится значение, которое приведёт к ошибке и к переходу к следующему набору экшенов. Если из 10 не разу не выпадет положительный вариант, то переход к началу и всё по новой (т.е. ошибка последнего модуля ведёт к началу).

Выражение спинтакса можно вынести в начальные настройки проекта для удобства и подставлять его через переменную в блоки спинтакса.

P.S. Думаю, разместить в начале каждого набора экшенов один и тот же элемент не сложнее, чем организовать гребёнку свича, так что как вариант (который можно доработать) вполне можно рассмотреть.
 

andryvat

Пользователь
Регистрация
21.01.2016
Сообщения
38
Благодарностей
0
Баллы
6
Спасибо, буду пробовать..
 

runlike

Client
Регистрация
22.09.2015
Сообщения
175
Благодарностей
51
Баллы
28
Можно без Switch организовать:

Например, нам нужно зарандомить выбор между 10 отдельными группами экшенов, ставим их просто друг за другом, и в начале каждого ставим один и тот же блок рандомного выбора через спинтакс, в который помещаем 9 элементов, которые не используются в наборах экшенов, и в одном месте элемент, который используется. Зачем это нужно? Так мы получим вероятность 1 к 10, что выпадет именно текущий элемент. Если спинтакс выберет используемый в экшене элемент (например номер совпадения), то через переменную он подставится в нужное место, и текущая цепочка отработает, и основной шаблон пойдёт дальше. Если спинтакс выберет один из 9 неиспользуемых элементов, то через переменную подставится значение, которое приведёт к ошибке и к переходу к следующему набору экшенов. Если из 10 не разу не выпадет положительный вариант, то переход к началу и всё по новой (т.е. ошибка последнего модуля ведёт к началу).

Выражение спинтакса можно вынести в начальные настройки проекта для удобства и подставлять его через переменную в блоки спинтакса.

P.S. Думаю, разместить в начале каждого набора экшенов один и тот же элемент не сложнее, чем организовать гребёнку свича, так что как вариант (который можно доработать) вполне можно рассмотреть.
Я лично запутался и ничего не понял) Думаю новичку все же легче сделать 2 элементарных действия - рандомное число и свич в зависимости от результата
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Можно без Switch организовать
Если нужна проверка "используется ли уже текущий рандом", то можно сделать проверку IF после блока рандома.
Спинтакс предназначен для другого. Использовать его в данной задаче - это все равно, что забивать гвозди сапогом.
 
Последнее редактирование:

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
Если нужна проверка "используется ли уже текущий рандом", то можно сделать проверку IF после блока рандома.
Спинтакс предназначен для другого, это все равно, что забивать гвозди сапогом.
Неправда, в проектах Зенно широко используется выход с действия по ошибке в качестве логического значения. Я просто подстроился под эту концепцию, используя существующие возможности.

Можно и с IF организовать, но так будет на одно действие больше. У меня проще вариант :-)

Спинтакс как раз для этого и предназначен. Я его использую, чтобы получить рандомное текстовое значение, а он для этого и нужен. Можно было бы пристроиться с рандомным выбором числа, но тогда кол-во возможных вариантов резко сократилось бы, а чем больше это число, тем проще нам подобрать что-то подходящее для подстановки в существующих экшенах.

Или вот ответь на вопрос:

Как сделать рандомный выбор числа из диапазона, при условии, что шаг между ними будет не 1? А если он вообще не фиксированный?
 
Последнее редактирование:

andryvat

Пользователь
Регистрация
21.01.2016
Сообщения
38
Благодарностей
0
Баллы
6
Сделал рандом чисел от 1 до 3. Свитч и три перехода. Почему то выпадает только 1 и 2.
И возникла мысль, как сделать чтоб в итоге все цифры выпали примерно одинаковое количество раз?
 

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
Сделал рандом чисел от 1 до 3. Свитч и три перехода. Почему то выпадает только 1 и 2.
И возникла мысль, как сделать чтоб в итоге все цифры выпали примерно одинаковое количество раз?
В Зенно отсчёт от 0. От 0 до 3-х как раз выпадает 3 значения: 0, 1 и 2. Если начинаешь отсчёт от 1, то плюсуй к верхнему значению.
 

andryvat

Пользователь
Регистрация
21.01.2016
Сообщения
38
Благодарностей
0
Баллы
6
Добавил 4. Теперь от 1 до 3 выпадает, 4 нет.. ))
 

andryvat

Пользователь
Регистрация
21.01.2016
Сообщения
38
Благодарностей
0
Баллы
6

andryvat

Пользователь
Регистрация
21.01.2016
Сообщения
38
Благодарностей
0
Баллы
6
.
 
Последнее редактирование:

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
поставил от 0 до 3. все равно 3 не выпадает.. тоесть от 0 до 3 не включает 3 в выбор, а только 0 1 2 так?
Как я понимаю, верхняя 3 означает число вариантов при отсчёте от 0. Т.е. она не включается в диапазон выбора. Это такая особенность у языков программирования, за исключением некоторых:

https://ru.wikipedia.org/wiki/Ошибка_на_единицу

Ошибки, связанные с массивами, могут также являться результатом различия в языках программирования. Отсчёт с нуля традиционен, но некоторые языки ведут отчет с 1. В языке Паскаль можно определять индексы[1]. Это позволяет настроить модель массива на предметную область.
И Зенно, видимо, придерживается традиций.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Можно без Switch организовать:

Например, нам нужно зарандомить выбор между 10 отдельными группами экшенов, ставим их просто друг за другом, и в начале каждого ставим один и тот же блок рандомного выбора через спинтакс, в который помещаем 9 элементов, которые не используются в наборах экшенов, и в одном месте элемент, который используется. Зачем это нужно? Так мы получим вероятность 1 к 10, что выпадет именно текущий элемент. Если спинтакс выберет используемый в экшене элемент (например номер совпадения), то через переменную он подставится в нужное место, и текущая цепочка отработает, и основной шаблон пойдёт дальше. Если спинтакс выберет один из 9 неиспользуемых элементов, то через переменную подставится значение, которое приведёт к ошибке и к переходу к следующему набору экшенов. Если из 10 не разу не выпадет положительный вариант, то переход к началу и всё по новой (т.е. ошибка последнего модуля ведёт к началу).

Выражение спинтакса можно вынести в начальные настройки проекта для удобства и подставлять его через переменную в блоки спинтакса.

P.S. Думаю, разместить в начале каждого набора экшенов один и тот же элемент не сложнее, чем организовать гребёнку свича, так что как вариант (который можно доработать) вполне можно рассмотреть.
я правильно понимаю, ты предлагаешь блок рандома и блок свича заменить на 10 блоков спинтакс?)
 

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
я правильно понимаю, ты предлагаешь блок рандома и блок свича заменить на 10 блоков спинтакс?)
Я предлагаю этот вариант взять на заметку, возможно такой подход где-то будет оправдан, не обязательно здесь.

Плюс ты пишешь так, как-будто это более трудоёмко, но подумай, ведь все блоки абсолютно одинаковые и скопировать их не составляет труда.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Я предлагаю этот вариант взять на заметку, возможно такой подход где-то будет оправдан, не обязательно здесь.

Плюс ты пишешь так, как-будто это более трудоёмко, но подумай, ведь все блоки абсолютно одинаковые и скопировать их не составляет труда.
копировать не труоемко. но зачем множить
 

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
копировать не труоемко. но зачем множить
В гребёнке тоже размножение идёт, так что это не очень критичный довод. Или ты имел в виду организацию цикла с подстановкой разных наборов экшенов к одному спинтаксу?
 

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
Как сделать random в проекте, чтоб при каждом новом старте проекта менялась одна его часть. Будет несколько таких частей (групп экшенов), которые следут подменять. Но не по порядку а рэндом.
Используйте Данные -> Random, далее через логический блок Switch, в зависимости от данных, ведите туда, куда нужно.
делаешь свич на все эти группы в зависимости от числа. А число рандомишь
Я придумал, как без Свича и проще сделать:


  1. Те части проекта, которые нужно рандомизировать оформляем как отдельные проекты и складываем в одну папку.
  2. Получаем список файлов в этой папке
  3. Берём случайную строку из этого списка
  4. Используем эту строку при подключении проекта в проекте
  5. Всё
Так нормально?
 

andryvat

Пользователь
Регистрация
21.01.2016
Сообщения
38
Благодарностей
0
Баллы
6
Пользуюсь свитчем. Пока устаривает. Спасибо.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)