扑克发牌算法实现

 扑克发牌算法是棋牌游戏中常用的基础算法,也是游戏开发人员需要
熟悉的基算法之一。下面介绍一下该算法的一种实现方式。请参看:


    洗牌和发牌模拟

首先给扑克牌中每张牌设定一个编号,下面算法实现的编号规则如下:
  红桃按照从小到大依次为:1-13
  方块按照从小到大依次为:14-26
  黑桃按照从小到大依次为:27-39
  梅花按照从小到大依次为:40-52
  小王为53,大王为54

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

 

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

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 

你可能感兴趣的:(扑克发牌算法实现)