空当接龙纸牌生成算法
??? 最近為了學習Javascript和JQuery,寫了一個空當接龍的游戲,在開發的過程中,在游戲開始隨機發牌的算法上遇到了一點小問題。如何才能生成這些紙牌的隨機序列呢?百度并Google了一下,發現大部分網友提供的算法都是隨機生成一個1到52之間的數,存入數組,再生產另外一個,然后去數組中做存在性檢查,存在便放棄這個數,不存在就加入數組,這個算法的效率極其低下。另外一部分網友提供的算法類似于人的洗牌,看似精巧,但是很難理解。
??? 經過思考,我得到了自己的解決算法。一般我們生成隨機數,都是生成一個范圍內的一個數,于是我的思路是先把紙牌按照花色,順序存儲到一個數組(A)中,就像一副新買來的牌一樣。
??? //讀入紙牌
??? var aryCards = new Array();
?var aryCardColors = new Array("cb","dr","hr","sb");
?for(iCardColor=1;iCardColor<=4;iCardColor++){
???? for(iCardNumber=1;iCardNumber<=13;iCardNumber++){
??aryCards.push(iCardNumber+aryCardColors[iCardColor-1]);
???? }
?}
??? 然后隨機生成一個1到52之間的數,從數組(A)中取出相應位置的紙牌,存儲到另外一個數組(B)中,然后從數組(A)中移除這張紙牌,然后在隨機生成一個1到51之間的隨機數,這樣只要52次循環就可以把紙牌順序打亂了。
??? 在這個過程中還存在這樣一個問題,Javascript不支持從數組中間移除一項,但是可以從數組頭或尾移除,于是我的解決方法是把數組尾的紙牌存儲到要移除的響應數組位置,然后移除數組尾的紙牌,這樣就完成了這算法的全部。
?//隨機生成紙牌
?var aryPlayCard = new Array();
?for(iCardNumber=1;iCardNumber<=52;iCardNumber++){
???? var iRandom = Math.round(Math.random()*(aryCards.length-1));
??????????? aryPlayCard.push(aryCards[iRandom]);
???? aryCards[iRandom] = aryCards[aryCards.length-1];
??????????? aryCards.pop();
?}
??? 這樣,在發牌的時候就按數組順序從數組(B)中依次取出紙牌,擺放到頁面上就可以了。這個算法的優點是代碼量少,易于理解,效率高。
?
總結
以上是生活随笔為你收集整理的空当接龙纸牌生成算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【边缘设备】nanoPC-T4 挂载NV
- 下一篇: Profibus插头以及终端电阻