Flash ActionScript 不重複隨機數列



最近在寫撲克牌產生,就一定會用到隨機不重覆序列

底下提供一個最簡單的 不重覆隨機的方法



就是拿自己跟別人交換 假設 陣列有 1-10 , 則 拿 1 與 隨機一數交換 , 依序 1 ,2 ,3 .... 到 10;

在過程中 若遇到跟 自己一樣 則加 1 .



function Serial_pokerNUm( put_array : Array  ):Array
{

    var rand : int ;
    var temp : int ;
    var _len : int ;
  
    var p_array : Array = put_array ;
    var _array  : Array = new Array();
    _len  = p_array.length
  
        for (var i:Number = 1; i< _len ; i++) {
                rand = Math.floor(Math.random() * _len);
                if(rand==i)rand+=1;
                temp = p_array[i];
                p_array[i] = p_array[rand];
                p_array[rand] = temp;
                _array = p_array;
        }
      
    return _array ;

}



最後得到的 _array 就是不重覆隨機數列 !



以下是網路上提供的方法2008---------------------------------------------------------------------------------------------------------------------------

方法1 //as2.0-------------------------------------------------------------------------------------------------------------------------------------------


my_array=new Array();
n=5;
for(var i=0;i<n;i++){
    my_array[i]=i;
}
my_array.sort(function(){return random(3)});



//as3.0-------------------------------------------------------------------------------------------------------------------------------------------



var my_array:Array=new Array();
var n:Number=5;
var i:Number=0;
for(i=0;i<n;i++){
    my_array[i]=i;
}
my_array.sort(function(){return Math.floor(Math.random()*10)});






方法2 -------------------------------------------------------------------------------------------------------------------------------------------



my_array=new Array();

n=5;

for(var i=0;i<n;i++){

my_array[i]=i;

}

for(var i=0;i<n;i++){

var tmp1=random(n);

var tmp2=my_array[i];

my_array[i]=my_array[tmp1];

my_array[tmp1]=tmp2;

}  







  • 留言者: ella12318
  • Email:
  • 網址:
  • 日期: 2010-06-20 12:56:46
hi~你好!

我是在知識+發問

大家來找碴亂數抽場景的那位

這三個程式我都試過了

可是都有錯誤

是不是哪裡需要更改的我沒改到?

還是版本不同?我是用flash8的

不好意思~麻煩你了!




  • 留言者:
  • Email:
  • 網址:
  • 日期: 2010-08-18 05:45:05
你好~

我是在知識+問as3.0隨機語法問題的人

你這3個語法好像都是AS2.0的

AS2.0跟AS3.0相差有點多

我不知道怎麼改成AS3.0

改了老半天還是出現錯誤

只看出是要建立一個Array

抱歉~我是FLASH新手




  • 留言者:
  • Email:
  • 網址:
  • 日期: 2010-08-18 14:00:41
抱歉~還是不行,不過沒出現錯誤訊息,但播放有問題

這是我做的檔:

http://ben0423.myweb.hinet.net/03.fla




  • 留言者:
  • Email:
  • 網址:
  • 日期: 2010-08-18 23:51:46
圖片有點多,所以檔案大了一點

你的教學內容我沒在這個檔內加入

我在我電腦內的檔有加入,加入教學內容之後

『是加在第一場景的最後一個影格』

第一場景播放完應該會停在第二場景的任一影格

但沒有停住,而是從第二場景重頭播到完並回到第一場景

不知道是不是我用錯了




  • 留言者:
  • Email:
  • 網址:
  • 日期: 2010-08-19 03:26:16
我修改成簡單的檔案請你看一下,只有603k大小

http://ben0423.myweb.hinet.net/04.fla

今天剛學到trace的功用,看了一下你教學的隨機數列

好像不是我要的語法




  • 留言者:
  • Email:
  • 網址:
  • 日期: 2010-08-19 19:48:48
但我想要問的是從1~50隨機出現一個數字,此數字要套用在

gotoAndStop()裡面,且已出現的數字不會在出現第2次

假設現在第一次抽籤出現數字32,則影格會gotoAndStop(32),

進行第二次抽籤時一定不會出現數字32

也就是1~50的數字都只會出現一次,總共可以抽50次籤

而你的教學是一次可以出現多個數字,且不重覆也隨機的方式排列

所以我無法套用在gotoAndStop()裡面




  • 留言者:
  • Email:
  • 網址:
  • 日期: 2010-08-19 22:16:56
這跟我想的相差甚多,而且我發現這事先決定好排序的順序的數值,

就算關掉flash在開啟,排列的數字跟上次的排列幾乎一模一樣

我想要的是一個空的陣列會儲存1~50隨機出現的一個數字,當第二個

出現的隨機數字跟陣列內已儲存的數字一樣時就會再重新出現一個新

的數字,以達到不重複的目的,而這隨機數字在不重複的條件下才會

套用在gotoAndStop()裡面

請問在這種條件下要怎麼寫語法?




  • 留言者: gray382
  • Email: l0w84k@yahoo.com.tw
  • 網址:
  • 日期: 2010-11-10 11:41:22
養士居




  • 留言者: deitymoon
  • Email:
  • 網址:
  • 日期: 2010-12-19 03:14:29
不好意思請問一下

想請問1,2,3,4,5數字中取3個不重複的寫法~

我自己是用陣列設Array=[1,2,3,4,5]

然後用

A = Math.floor(Math.random()*Array.length);

Array.splice(A,1);

B = Math.floor(Math.random()*Array.length);

Array.splice(B,1);

C = Math.floor(Math.random()*Array.length);

Array.splice(C,1);

的方式



可是程式都取"項"

第一次抓第一項A=0陣列為[1,2,3,4]

第二次抓第一項B=0陣列為[2,3,4]

第三次抓第二項C=1陣列為[2,4]

哇~A=0,B=0,C=1重複了嗚嗚



我想要讓程式取陣列中的"元素",不知道怎麼寫呢




  • 留言者: smile
  • Email:
  • 網址:
  • 日期: 2011-10-03 14:23:18
請問我想要隨機出現文字

那我該怎麼改

我的程式碼沒辦法停下來

可以幫我看哪裡出了問題嗎?

onEnterFrame = function () {

var t:Array = Array("音容宛在", "駕返遙池", "返璞歸

真",

"享壽天

年", "風寒紗縵", "泰山其頹",

"立雪神

傷","玉簫聲斷", "北堂春去",

"五福全

歸","名冠群倫", "功同良相",

"才子佳

人","功績永懷", "大業千秋",

"德必有

鄰","天賜石麟","秀出蘭芽",

"盟結良

緣", "熊夢徵祥")



var n:Number=Math.floor(Math.random() *t.length)

tx.text = t[n];

};




  • 留言者: stitchlikeqq
  • Email:
  • 網址:
  • 日期: 2012-01-15 12:07:22
你好,我是耕莘健康管理專科學校資管科五年級的學生要做專題,需要一

些flash做程式的內容,無奈,因為我們不是好學生,老師不太願意教我

們,而平常上課這部分又教得很淺所以至目前為止被很多問題困住,但是

遊戲大部份的樣子已經出來了,我目前身被困擾的問題有,身高體重未輸

入或是輸入過於誇張的數字會進不了下一個步驟、在餐盒部分增設一個重

選的按鈕、將問答題題目隨機不重複(50題要抽10題在十題內部重複)如果

你有時間能否教我一下。或是幫我們改改看,將會非常感謝您,如果改完

也請你願意收我們一點意思的紅包,因為我們現在被這些問題深深困擾

著。非常感謝您的協助。

我的電話0953006019

鄭同學(茄子)

lovebyqq@hotmail.com

我的MSN



請您回覆我一下~謝謝

沒有留言:

張貼留言