Re: [問題] 請問測驗題想要隨機出現該怎麼做?
※ 引述《cjcat2266 (CJ Cat)》之銘言:
: ※ 引述《woodymonkey (小罐的吃太快)》之銘言:
: : 如果不出現一樣的問題:
: : 將所有的問題放在主場景的不同影格,
: : 然後產生一個陣列Array(20),用迴圈將隨機數字放入此陣列,
: : 陣列每一個元素內的數字注意不可重複。
: : 定義一個全域變數y,初始值為0。
: : 答對時用gotoAndPlay(Array(y)),並且將y加1。
: 想到另外一招
: 如果你有20格,就先讓個Array裝1~20
: var array:Array = new Array();
: for (var i:int = 0; i < 20; i++) {
: array[i] = i + 1;
: } //得到 [1, 2, 3, ..., 20]
: 然後用random決定這個Array裡面的一個數字
: 用過之後就把這個數字從Array裡面拔掉
: 之後再random決定的時候就絕對不會選到這個數字
: if (array.length == ) {
: //沒題目了,跳到結尾
: }
: var targetFrame:int = array[Math.floor((Math.random() * array.length))];
: array = array.splice(targetFrame, 1); //拔掉用過的數字
: gotoAndPlay(targetFrame);
其實產生不重複亂數有一個幾乎是最佳解的方法
//設定值
var array:Array = new Array();
for (var i = 0 ; i< 20 ; i++)
array[i] = i;
//亂數選擇排序
for (var i = 0 ; i <19 ; i++)
{
//選擇 從 i 到 19 中選擇一個
var rand = int(Math.random()*(20-i)) + i;
//交換
var temp = array[i];
array[i] = array[rand];
array[rand]=temp;
}
沒編譯過,但邏輯上就是這樣
請把程式碼當虛擬碼看看就好
如果真的可以執行,那只是湊巧
--
http://etrex.blogspot.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.71.124
推
04/03 03:31, , 1F
04/03 03:31, 1F
→
04/03 03:32, , 2F
04/03 03:32, 2F
→
04/03 09:50, , 3F
04/03 09:50, 3F
→
04/03 09:50, , 4F
04/03 09:50, 4F
→
04/03 09:53, , 5F
04/03 09:53, 5F
推
04/03 11:41, , 6F
04/03 11:41, 6F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):