Задача такая: имеется целочисленная переменная, допустим диапазон чисел будет от 1 до 10.
Каждые 2 сек. нужно выдавать рандомное значение этой переменной от 1 до 10, при этом чтобы значения не повторялись пока все значения не будут выданы, только gui

Принятый ответ

easypeasy, что не понятно?
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
7
4 года назад
Отредактирован deleted_108535
2
globals
	integer array A
	integer max=10
endglobals
function Init takes nothing returns nothing
	local integer i=1
	loop
		set A[i]=i
		exitwhen i==max
	set i=i+1
	endloop
endfunction

function GetRandomInteger takes nothing returns integer
	local integer i
	local integer a
	if (max==0) then
		return 0
	endif
	set i=GetRandomInt(1,max)
	set a=A[i]
	set A[i]=A[max]
	set max=max-1
	return a
endfunction
0
13
4 года назад
0
TheMilka, а обычными триггерами это можно запилить?
2
7
4 года назад
2
easypeasy:
TheMilka, а обычными триггерами это можно запилить?
да, конечно
0
13
4 года назад
0
TheMilka, не подскажешь, пожалуйста, как?
2
7
4 года назад
2
easypeasy:
TheMilka, не подскажешь, пожалуйста, как?
cейчас. нужно время. на гуи работать дольше.

создаешь две глобальные переменные А и MAX.
Создаёшь вот такой триггер.
Получить случайное число из списка без повторений командой GetRandomInteger().
Если числа закончились, будешь получать нули.
Загруженные файлы
2
28
4 года назад
2
Есть переменная InitialTop, изначально равна 9.
Есть массив Initial, где в ячейках с 0 по 9 находятся значения 1 - 10 без повторений.
Теперь о самом выборе случайного значения.
  1. Присваиваем переменной idx случайное значение с 0 по InitialTop.
  2. Переменной Result присваиваем значение из Initial[idx].
  3. Присваиваем Initial[idx] значение Initial[InitialTop].
  4. Присваиваем InitialTop значение (InitialTop - 1).
  5. Если InitialTop равно -1, то тогда сбрасываем массив Initial и InitialTop в начальное состояние.
0
13
4 года назад
0
TheMilka, половина не понял, а в этом триггере сработает сразу 10 циклов?только как выдать только 1 значение и спустя какое то время или событие, выдать другое

Присваиваем Initial[idx] значение Initial[InitialTop].
Присваиваем InitialTop значение (InitialTop - 1).
Если InitialTop равно -1, то тогда сбрасываем массив Initial и InitialTop в начальное состояние.
а это случайно не значит что если первое число, например, выпадет 6 то последующие выпадающие будут меньше 6?

ладно, спасибо буду разбираться
2
7
4 года назад
2
easypeasy:
TheMilka, половина не понял, а в этом триггере сработает сразу 10 циклов?только как выдать только 1 значение и спустя какое то время или событие, выдать другое

Присваиваем Initial[idx] значение Initial[InitialTop].
Присваиваем InitialTop значение (InitialTop - 1).
Если InitialTop равно -1, то тогда сбрасываем массив Initial и InitialTop в начальное состояние.
а это случайно не значит что если первое число, например, выпадет 6 то последующие выпадающие будут меньше 6?

ладно, спасибо буду разбираться
эта система создаёт 10 значений. из них ты каждым вызовом берёшь рандомное без повторений. можно ещё добавить, чтобы система обновлялась каждый раз, когда числа внутри ней заканчиваются.
2
28
4 года назад
2
а это случайно не значит что если первое число, например, выпадет 6 то последующие выпадающие будут меньше 6?
Нет, результат хранится в переменной Result.
0
13
4 года назад
0
TheMilka, PT153, в итоге запилил такой рабочий вариант, без действия wait при быстром нажатии Esc варик крашится, а с действием wait 0 почему то нет
Загруженные файлы
2
26
4 года назад
Отредактирован Extremator
2
easypeasy, что не понятно?
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.