Re: [問題] 請問測驗題想要隨機出現該怎麼做?

看板Flash作者 (moonet)時間18年前 (2008/04/03 02:00), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串4/4 (看更多)
※ 引述《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
這好像是所謂的洗牌原理,把52張牌順序攪亂之後再依序發牌
04/03 03:31, 1F

04/03 03:32, , 2F
只是在取亂數的時候不用限制取i~19,直接random(20)就好了
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
小的在1950篇就有附個原始檔囉,供大家參考 :)
04/03 11:41, 6F
文章代碼(AID): #17yyd1qq (Flash)
討論串 (同標題文章)
文章代碼(AID): #17yyd1qq (Flash)