扑克牌游戏:一副牌的张数是54,其中包括大小王牌,编写一个程序能给东、西、南、北四位玩家自动发牌(牌最好事先进行随机洗过),每位玩家有12张,余下的6张作为底牌,然后随机指定一位作为庄家,并把底牌给他,最后把四位玩家的牌按红、方块、黑桃和草花四个花色按大到小理好。最后将四个玩家手上的牌打出来,并指出谁是庄家,底牌是什么。public class play
{    
    
        public void exchangsort(int m[])
       {
        int i,j;
        int temp;
        for(i=1;i<=12;i++)
          for(j=i+1;j<=12;j++)
          if(m[i]>m[j])
          {
           temp=m[i];
           m[i]=m[j];
           m[j]=temp;
          
          }
            for(i=1;i<=12;i++)
           System.out.print(m[i]+"  ");
           System.out.print("\n");
        }
       
       
       
        public void  print(int g,int i)  
         { 
            int t=g-i;
            switch (t)
            {
             case 1:
             case 2:
             case 3:
             case 4:
             case 5:
             case 6:
             case 7:
             case 8:
             case 9:
             case 10:
                  System.out.print(huase(g)+t+"  ");
                  break;
             case 11:
                   System.out.print(huase(g)+"J"+"  ");
                    break;
             case 12:
                   System.out.print(huase(g)+"Q"+"  ");
                    break;
             case 13:
                   System.out.print(huase(g)+"K"+"  ");
                    break;
                    
            }
        }
        
        
       public  String  huase(int g)
       {
        if(g>=1&&g<=13)
         return "红桃";
          else if(g>=14&&g<=26)
          return "方块";
             else if(g>=27&&g<=39)
             return "黑桃";
               else  if(g>=40&&g<=52)
               return "草花";
               else return "";
       }
       
       public void jj(int n[])
      { int i;
         for( i=1;i<=12;i++)
             if(n[i]>=1&&n[i]<=13)
                 print(n[i],0);
                else if(n[i]>=14&&n[i]<=26)
                      print(n[i],12);
                     else if(n[i]>=27&&n[i]<=39)
                        print(n[i],24);
                          else  if(n[i]>=40&&n[i]<=52)
                            print(n[i],36);
                               else if(n[i]==53)
                               System.out.print("小王");
                               else System.out.print("大王");
                  System.out.print("\n"); 
                 }              
        
      public static void main(String args[])
        {  
            
              int temp,i,j;
              int a[]=new int[60];//1~13,红桃.  14~26,方块.   27~39,黑桃.40~52.草花    51,小王.52大王
              int b[]=new int[60];
           
              for( i=1;i<=54;i++)
                 a[i]=i;                      
               for( j=54;j>=1;j--)        
                {
                 int index=(int)(Math.random()*j+1);
                      b[j]=a[index];
                      a[index]=a[j];  
                  }
                              
               int e[]=new int[15];
               int s[]=new int[15];
               int w[]=new int[15];
               int n[]=new int[15];
               int d[]=new int[10];
          
            
             for(i=1;i<=12;i++)   
               {e[i]=b[i];
               System.out.print(e[i]+"  ");}
               System.out.print("\n");
             for(i=13;i<=24;i++)
               {s[i-12]=b[i];
                System.out.print(s[i-12]+"  ");}
                System.out.print("\n");
             for(i=25;i<=36;i++)  
                { w[i-24]=b[i] ;
                 System.out.print(w[i-24]+"  ");}
                 System.out.print("\n");
             for(i=37;i<=48;i++) 
               {n[i-36] =b[i];
               System.out.print(n[i-36]+"  ");}
               System.out.print("\n");
               System.out.print("底牌是: ");
             for(i=49;i<=54;i++)
               {d[i-48] =b[i];
               System.out.print(d[i-48]+"  ");}
               System.out.print("\n");    
                 
           int in=(int)(Math.random()*4+1);
           switch (in)
            {
             case 1:
                  System.out.println("庄家是东");
                  break;
             case 2:
                  System.out.println("庄家是南");
                  break;
             case 3:
                  System.out.println("庄家是西");
                  break;
             case 4:
                  System.out.println("庄家是北");
                  break;
            }      
          
            play t=new play();
            t.exchangsort(e);
            t.jj(e);
           
            t.exchangsort( s);
            t.jj(s);
            t.exchangsort( w);
            t.jj(w);
            t. exchangsort( n);
            t.jj(n);
 }  
 }       

解决方案 »

  1.   


    package ym051024;import java.util.*;public class Cardigan {
        
        //定义四种类型。
        private static String[] type = {"aHeart","aDiamond","cSpade","dClub"};
        //定义牌面1。
        private static String[] number = {"01A","02","03","04","05","06","07","08","09","10","11J","12Q","13K"};
        //定义牌面2。
        private static String[] joker = {"14KING","15QUEEN"};
        //定义玩家。
        private static String[] players = {"Alex","Beck","Carl","Duck"}; 
        
        //程序入口。
        public static void main(String[] args) {
            Cardigan car = new Cardigan();
            //指定庄家。
            String banker = car.appoint(players);
            //洗牌。
            ArrayList mixed = car.mix();
            //取底牌。
            ArrayList last = car.covered(mixed);
            //发牌。
            HashMap map = car.send(mixed,players,banker);
            //打印信息。
            car.print(players,map,banker,last);
            
        }
        /**
         * make the banker.
         * @param players
         * @return
         */
        //安排庄家。
        public String appoint(String[] players){
            int i = (int)(Math.random()*4);        
            return players[i];
        }
        
        //新牌。
        public ArrayList make(){
            ArrayList list = new ArrayList();
            for(int i=0; i<type.length; i++)
                for(int j=0;j<number.length; j++){
                    list.add(type[i]+number[j]);
                }
            for(int k=0; k<joker.length; k++){
                list.add(joker[k]);
            }
            return list;
        }
        //洗牌。
        public ArrayList mix(){
            ArrayList list = make();
            Collections.shuffle(list);
            return list;
        }
        //取底牌。
        public ArrayList covered(ArrayList list){
            ArrayList last = new ArrayList();
            for(int j = 48; j<54; j++){
                last.add(list.get(j));
            }
            return last;
        }
        //发牌。
        public HashMap send(ArrayList list,String[] players,String banker){
            ArrayList[] playCard = new ArrayList[players.length];
            playCard[0] = new ArrayList();
            playCard[1] = new ArrayList();
            playCard[2] = new ArrayList();
            playCard[3] = new ArrayList();
            HashMap map = new HashMap();
            int size = list.size();
            for(int i=0; i<48;){
                playCard[0].add(list.get(i++));
                playCard[1].add(list.get(i++));
                playCard[2].add(list.get(i++));
                playCard[3].add(list.get(i++));
            }
            int index = -1;
            for(int i=0; i<players.length; i++){
                if(banker.equalsIgnoreCase(players[i])){
                    index = i;
                    break;
                }
            }
            for(int j = 48; j<54; j++){
                playCard[index].add(list.get(j));
            }
            
            map.put(players[0],reorder(playCard[0]));
            map.put(players[1],reorder(playCard[1]));
            map.put(players[2],reorder(playCard[2]));
            map.put(players[3],reorder(playCard[3]));
            return map;
        }
        //给各玩家的牌排序。
        public ArrayList reorder(ArrayList list){
            Collections.sort(list);
            return list;
        }
        public void print(String[] players,HashMap map,String banker,ArrayList cover){
            //打印各玩家的牌。
            for(int i=0; i<players.length; i++){
                String name = players[i];
                System.out.println(name+":"+map.get(name));
            }
            //打印庄家。
            System.out.println("--------------------");
            System.out.println("庄家是:"+ banker);
            //打印底牌。
            System.out.println("--------------------");
            System.out.println("底牌是:"+ cover);
        }
    }
      

  2.   

    打印结果如下。
    Alex:[15QUEEN, aDiamond06, aDiamond09, aDiamond11J, aHeart02, aHeart04, aHeart09, aHeart10, aHeart11J, cSpade04, cSpade06, cSpade13K, dClub02, dClub04, dClub09, dClub10, dClub11J, dClub13K]
    Beck:[14KING, aDiamond04, aDiamond07, aDiamond08, aHeart03, cSpade01A, cSpade02, cSpade10, cSpade12Q, dClub03, dClub06, dClub08]
    Carl:[aDiamond05, aDiamond10, aDiamond13K, aHeart01A, aHeart08, aHeart12Q, aHeart13K, cSpade03, cSpade07, cSpade08, dClub01A, dClub07]
    Duck:[aDiamond01A, aDiamond02, aDiamond03, aDiamond12Q, aHeart05, aHeart06, aHeart07, cSpade05, cSpade09, cSpade11J, dClub05, dClub12Q]
    --------------------
    庄家是:Alex
    --------------------
    底牌是:[dClub04, aHeart02, dClub11J, aHeart11J, cSpade04, cSpade06]