当前位置: 代码迷 >> Java相关 >> 会合练习 之 斗地主发牌
  详细解决方案

会合练习 之 斗地主发牌

热度:655   发布时间:2016-04-22 20:41:19.0
集合练习 之 斗地主发牌

 

 

 

》HashMap 的key底层数据结构是哈希表

》ArrayList 底层数据结构是数组,查询快,增删慢

》TreeSet  底层数据结构式红黑树(平衡二叉树),默认构造器采用自然排序(Integer已经实现了Comparable接口 )。

 

 

package cn.itcast.day18;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.TreeSet;/* * 斗地主 发牌程序 *  * A:创建HashMap<Integer,String>用于存放装牌号和牌。 * B: 创建花色数组,创建点数数组(3最小) * B:创建ArrayList用于存放牌号 * C: 把牌号和牌放到对应的HashMap中,同时把牌号放到ArrayList中 * C:洗牌(洗牌号) * D: 发牌,遍历ArrayList中的牌号,去HashMap中招对应的牌,用TreeSet存放牌. * E: 遍历每一个TreeSet得到对应人的牌 */public class PokerDemo {    public static void main(String[] args) {        //创建牌核        HashMap<Integer,String> hm=new HashMap<Integer,String>();                //创建牌号盒        ArrayList<Integer> array=new ArrayList<Integer>();                        //创建花色数组         String[] colors={"?","?","?","?"};        //创建点数数组          String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};                  //把牌号和牌存入HashMap,把牌号存入ArrayList中         int index=0;         for(String number:numbers){             for(String color:colors){                 String s=color.concat(number);                 hm.put(index,s);                 array.add(index);                 index++;             }         }         hm.put(index, "大王");         array.add(index);         index++;         hm.put(index, "小王");         array.add(index);                  //洗牌         Collections.shuffle(array);                  //发牌时用TreeSet存放         TreeSet<Integer> sunWuKong=new TreeSet<Integer>();         TreeSet<Integer> zhuBaJie=new TreeSet<Integer>();         TreeSet<Integer> shaHeShang=new TreeSet<Integer>();         TreeSet<Integer> diPai=new TreeSet<Integer>();                  //遍历洗过的牌号集合ArrayList,并发牌号        for(Integer i:array){            if(array.size()-i<=3){                diPai.add(i);            }else if(i%3==2){                sunWuKong.add(i);            }else if(i%3==1){                zhuBaJie.add(i);            }else if(i%3==0){                shaHeShang.add(i);            }        }        lookPoker("孙悟空",sunWuKong,hm);        lookPoker("猪八戒",zhuBaJie,hm);        lookPoker("沙和尚",shaHeShang,hm);        lookPoker("底牌",diPai,hm);            }            public static void lookPoker(String name,TreeSet<Integer> pai,HashMap<Integer,String> hm){        System.out.print(name+"的牌是 :");        for(Integer i:pai){            System.out.print(hm.get(i)+" ");        }        System.out.println();    }}
/*

孙悟空的牌是 :?3 ?4 ?5 ?5 ?6 ?7 ?8 ?8 ?9 ?10 ?J ?J ?Q ?K ?A ?A ?2
猪八戒的牌是 :?3 ?4 ?4 ?5 ?6 ?7 ?7 ?8 ?9 ?10 ?10 ?J ?Q ?K ?K ?A ?2
沙和尚的牌是 :?3 ?3 ?4 ?5 ?6 ?6 ?7 ?8 ?9 ?9 ?10 ?J ?Q ?Q ?K ?A ?2
底牌的牌是 :?2 大王 小王

*/
  相关解决方案