A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 驰骋向前 中级黑马   /  2016-12-4 23:59  /  829 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

/*成龙,甄子丹,李连杰三个人打斗地主,三人约定,洗牌后,随机抽取一张"明牌"并夹在中间;然后依次抓牌,谁抓到这张便自动作为地主,并收取最后三张。
要求:请用程序实现这一过程,最后打印地主名,以及三个人的牌(要求排序);
思路:
  1.定义一个Map集合存储一副扑克牌;List存储编号;
  2.洗牌;
  3.随机抽取一个索引(该值必须在倒数三张之前),用于表示"明牌",在发牌
    时谁抓到这一张便作为"地主";
  4.依次给三个人(成龙,甄子丹,李连杰)发牌,并监督谁作为地主;地主自
     动收取最后三张。
  5.打印地主名;
  6.最后以排序后的方式打印每个人手里的牌;*/
public class doudizhu {
     public static void main(String[] args) {
            // 1.定义一个Map集合存储一副扑克牌;List存储编号;
             HashMap<Integer,String> pkmap= new HashMap<Integer, String>();
             ArrayList<Integer> pknum=new ArrayList<Integer>();
             //2.造扑克
             zpk(pkmap,pknum);
             //3.洗牌
             Collections.shuffle(pknum);
             //4.发牌
             fp(pkmap,pknum);
             
        }

       
        private static void zpk(HashMap<Integer,String> pkmap,        ArrayList<Integer> pknum) {
                ArrayList<String> num=new ArrayList<String>();
                ArrayList<String> color=new ArrayList<String>();
                Collections.addAll(num,"2","A","K","Q","J","10","9","8","7","6","5","4","3");
                Collections.addAll(color,"♠","♥","♣","♦");
                pkmap.put(0, "大王");    pknum.add(0);
                pkmap.put(1, "小王");    pknum.add(1);
                int index = 2;
                for (String n : num) {
                        for (String c : color) {
                                pkmap.put(index, c+n);
                                pknum.add(index);
                                index++;
                        }
                }
                //System.out.println(pkmap);
                //System.out.println(pknum);
        }
    private static void fp(HashMap<Integer, String> pkmap,ArrayList<Integer> pknum) {
                //玩家,底牌集合
            ArrayList<Integer> w1= new ArrayList<Integer>();
            ArrayList<Integer> w2= new ArrayList<Integer>();
            ArrayList<Integer> w3= new ArrayList<Integer>();
            ArrayList<Integer> dp= new ArrayList<Integer>();
            //编号发牌
            Random r = new Random();
            int sj = r.nextInt(pknum.size()-3);
            //System.out.println("pknum中索引是:"+sj+", pkmap中索引是"+pknum.get(sj));
            System.out.println("拿到  "+pkmap.get(pknum.get(sj))+" 牌的人是地主.");
            for (int i=0;i<pknum.size();i++) {
                        if(i>=51){
                                dp.add(pknum.get(i));       
                        }else if (i%3==0){
                                w1.add(pknum.get(i));
                               
                        }else if (i%3==1){
                                w2.add(pknum.get(i));
                               
                        }else if(i%3==2){
                                w3.add(pknum.get(i));
                               
                      }
            }
            //随机抽取一张"明牌"并夹在中间;然后依次抓牌,谁抓到这张便自动作为地主
            for (int i=0;i<dp.size();i++){
                    if(w1.contains(sj)){
                            if(i==sj){
                                        System.out.println("成龙是地主");}
                                w1.add(dp.get(i));
                        }else if(w2.contains(sj)){
                                if(i==sj){
                                        System.out.println("甄子丹是地主");}
                                w2.add(dp.get(i));
                        }else if(w3.contains(sj)){
                                if(i==sj){
                                        System.out.println("李连杰是地主");}
                                w3.add(dp.get(i));
                }
            }
                //排序
            Collections.sort(w1);
            Collections.sort(w2);
            Collections.sort(w3);
            Collections.sort(dp);
            //成龙,甄子丹,李连杰三个人看牌
            look("成    龙",w1,pkmap);
            look("甄子丹",w2,pkmap);
            look("李连杰",w3,pkmap);       
            look("底   牌",dp,pkmap);
           }
          private static void look(String name, ArrayList<Integer> wj,HashMap<Integer, String> pkmap) {
             System.out.print(name+": ");
                 for (Integer k : wj) {
                        String v = pkmap.get(k);
                        System.out.print(v+" ");
                }
                 System.out.println();
        }

}

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马