2015-01-18 4 views
0

Я создал новый стек с шестью кнопками (пять маленьких и один большой) на card1. В каждой кнопке есть такой номер.Создание уникальных случайных чисел в Livecode

button1 - 1 
button2 - 2 
button3 - 3 
button4 - 4 
button5 - 5 

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

button1 - 4 
button2 - 5 
button3 - 1 
button4 - 2 
button5 - 3 

После повторного нажатия на кнопку ...

button1 - 4 
button2 - 3 
button3 - 5 
button4 - 2 
button5 - 1 

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

Я пробовал этот скрипт для обработчика onmouseup на большой кнопке, но это неправильный путь, потому что иногда он вызывает задержку процесса.

put random(5) into num1 
put random(5) into num2 
put random(5) into num3 
put random(5) into num4 
put random(5) into num5 

repeat until num2 is not num1 
    put random(5) into num2 
end repeat 

repeat until num3 is not num1 and num3 is not num2 
    put random(5) into num3 
end repeat 


repeat until num4 is not num3 and num4 is not num2 and num4 is not num1 
    put random(5) into num4 
end repeat 

repeat until num5 is not num4 and num5 is not num3 and num5 is not num2 and num5 is not num1 
    put random(5) into num5 
end repeat 

put num1 to button "button1" 
put num2 to button "button2" 
put num3 to button "button3" 
put num4 to button "button4" 
put num5 to button "button5" 

Каков правильный способ сделать это?


Дополнительная: Есть ли способ для генерации случайных чисел с исключениями?

ответ

2

Вот один из способов:

put "1,2,3,4,5" into theList 
sort items of theList by random(10000) 
repeat with N = 1 to 5 
    set label of button ("button" & N) to item N of theList 
end repeat 
0

Случайная функция языков программирования (почти) никогда не является случайной. Хороший способ создания случайных чисел - написать номер 1 до 99 на листе бумаги и вернуть бумагу в миску. Теперь нарисуем номер и напишем его в списке. Поместите бумагу b Продолжайте, пока в списке не будет 100 или 1000 номеров. Теперь у вас есть 100 совершенно случайных чисел.

Ваш скрипт теперь может использовать этот список. Просто начните с первого числа в первой строке, затем второй и т. Д. До 100 (или 1000). Помните номер строки в файле настроек, чтобы продолжить следующий сеанс.

Если вам не нужна истинная случайность, вы можете использовать функцию random() LiveCode. Вы также можете использовать любое ключевое слово.

Это общее решение для N кнопок

repeat with n = 1 to N 
    put n & comma after myList 
end repeat 
delete last char of myList 
sort items of myList by random(N) 
lock screen 
repeat with n = 1 to N 
    set the label of btn n to item n of myList 
end repeat 
unlock screen 

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

Мне не нравятся имена, которые вы используете для кнопок. Они подвержены ошибкам, и если вы прочитаете код еще несколько лет спустя, вы не можете вспомнить назначение кнопок. Вы можете дать кнопкам более описательное имя, в то время как вам не нужно использовать это имя в скрипте. Вместо этого вы можете сгруппировать кнопки и вызвать эту группу «Случайно пронумерованные кнопки».Теперь измените

set the label of btn n to item n of myList 

в

set the label of btn n of grp "Randomly Numbered Buttons" to item n of myList 

Если вы сделаете это, вы можете также изменить

repeat with n = 1 to N 

в

repeat with n = 1 to the number of buttons of grp "Randomely Numbered Buttons" 
Смежные вопросы