站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题扑克发牌算法实现

扑克发牌算法实现

摘要: 扑克发牌算法实现

</td> </tr> <tr> <td height="35" valign="top" class="ArticleTeitle"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="282" height="98" align="center" valign="top"> </td> <td width="402" valign="top">
 
    扑克发牌算法是棋牌游戏中常用的基础算法,也是游戏开发人员需要
熟悉的基算法之一。下面介绍一下该算法的一种实现方式。请参看:
洗牌和发牌模拟 首先给扑克牌中每张牌设定一个编号,下面算法实现的编号规则如下:
红桃按照从小到大依次为:1-13
方块按照从小到大依次为:14-26
黑桃按照从小到大依次为:27-39
梅花按照从小到大依次为:40-52
小王为53,大王为54

算法实现如下:
首先按照以上编号规则初始化一个包含108个数字的数组
每次随机从该数组中抽取一个数字,分配给保存玩家数据的数组
</td> </tr> </table>

实现该功能的代码如下所示:

import java.util.*;

/**

 * 发牌算法的实现

 * 要求:把2副牌,也就是108张,发给4个人,留8张底牌

 */

public class Exec{

       public static void main(String[] args){

              //存储108张牌的数组

              int[] total = new int[108];

              //存储四个玩家的牌

              int[][] player = new int[4][25];

              //存储当前剩余牌的数量

              int leftNum = 108;

              //随机数字

              int ranNumber;

              //随机对象

              Random random = new Random();

             

              //初始化数组

              for(int i = 0;i < total.length;i++){

                     total[i] = (i + 1) % 54;

                     //处理大小王编号

                     if(total[i] == 0){

                            total[i] = 54;  

                     }

                           

              }

             

              //循环发牌

              for(int i = 0;i < 25;i++){

                     //为每个人发牌

                     for(int j = 0;j < player.length;j++){

                            //生成随机下标

                            ranNumber = random.nextInt(leftNum);

                            //发牌

                            player[j][i] = total[ranNumber];

                            //移动已经发过的牌

                            total[ranNumber] = total[leftNum - 1];

                            //可发牌的数量减少1

                            leftNum--;     

                     }    

              }

             

              //循环输出玩家手中的牌

              for(int i = 0;i < player.length;i++){

                     for(int j = 0;j < player[i].length;j++){

                            System.out.print("  " + player[i][j]);   

                     }

                     System.out.println();

              }

              //底牌

              for(int i = 0;i < 8;i++){

                     System.out.print("  " + total[i]);  

              }

              System.out.println();

       }

}

运行结果:


C:\java>java Exec
50 31 52 24 10 29 29 32 36 46 8 28 27 41 17 17 38 41 46 18 34 24 4 21 6
22 53 54 42 16 48 38 35 31 2 45 26 47 32 51 9 49 45 34 27 3 11 54 25 1
37 5 10 13 39 42 36 6 47 4 30 37 20 12 14 8 3 40 30 12 23 52 43 9 23
15 49 14 35 7 44 33 40 48 44 1 19 43 39 20 15 7 51 26 11 2 8 16 21 18 5
25 2 50 53 33 19 22 13

</td> </tr> <tr>


↑返回目录
前一篇: 递归--树型的方式输出目录下的文件
后一篇: J2SE 1.5 提供的另一种形式的for循环