Re: 製作遊戲的計時器
※ 引述《etrexetrex (ETREX)》之銘言:
: ※ 引述《rita167 (振作)》之銘言:
: : 二是我現在製作的牌面是剛剛好的數量
: : 請問有辦法做超過這個數量 然後每次亂數選出剛剛好的牌嗎?
: : (目前遊戲中需要16張牌, 兩兩成對所以我做了8張牌面)
: : (可是如果我製作超過8張牌面的話, 遊戲中就會出現消不掉的牌)
: : (有可能說我做20張不同牌面, 每次還是亂數出現剛好16張"可完全消掉"的牌嗎?)
: 先亂數選牌面 存到陣列裡 (一次就選兩張相同的牌面)
: 然後再從陣列裡一個一個取出來放到畫面上
關於這個問題
我也曾經困擾過
就是希望能夠在某個特定範圍內取出數個不同數字
例如上面所說的問題
表面上只有16張牌也就是8對
可是如果我多做幾張牌出來 那我到底要挑哪幾張呢?
假設做了12張牌
應該是從這12張牌隨機挑出8個不重複的數字
然後再用程式將這八個數字所代表的卡片放在畫面上
做了一些小學數學練習程式中
也常常會出現這樣的狀況
所以最近我寫了一個函數
可以從指定範圍內取出指定個數的不重複數字
但是沒有寫的很仔細
想請大家幫我檢查看看會不會哪裡有問題
function random_num (rangemin,rangemax,howmany) {
//從n中取出howmany個隨機不重複變數,rangemin<=n<=rangemax
//設定回傳的矩陣,
//變數range是設定範圍有幾個數字藉以判斷可否取howmany個數字
random_array=new Array();
random_array[0]=rangemin+" ~ "+rangemax+" get "+howmany;
range=rangemax-rangemin+1;
if(rangemax-rangemin+1>=howmany){
temp_array=new Array();
for(i=0;i<range;i++){
temp_array[i]=rangemin+i;
}
for(i=1;i<=howmany;i++){
temp_num=random(temp_array.length);
random_array[i]=temp_array[temp_num];
temp_array.splice(temp_num,1)
}
return random_array;
}else{
random_array[0]=0;
return random_array;
trace("範圍不對");
}
}
若輸入的數字沒問題的話
會傳回一個陣列
若我需要1~12取8個數字
那我就是用
a=random_num(1,12,8);
那麼a[0]=1 ~ 12 get 8;
(這個是做紀錄用的啦 因為習慣還是從1開始,所以矩陣第0項我都不太愛用)
a[1]~a[8]就是取得的數字
但是有個問題
如果我用typeof去傳回a這個東西的類型
她跟我說是object耶
這個部份不曉得在使用上會不會有什麼問題?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.141.15.61
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):
Flash 近期熱門文章
PTT數位生活區 即時熱門文章