黑马程序员技术交流社区

标题: 模拟斗地主洗发牌 [打印本页]

作者: 青火    时间: 2016-9-5 23:54
标题: 模拟斗地主洗发牌
本帖最后由 青火 于 2016-9-5 23:55 编辑

[Java] 纯文本查看 复制代码


import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class Test3 {

        /**
         * * A:案例演示
         * 模拟斗地主洗牌和发牌并对牌进行排序的代码实现
         *
         *  分析:
         * 1,买一副扑克,其实就是自己创建一个集合对象,将扑克牌存储进去
         * 2,洗牌
         * 3,发牌
         * 4,看牌
         */
        public static void main(String[] args) {
                //1,买一副扑克,其实就是自己创建一个集合对象,将扑克牌存储进去
                String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
                String[] color = {"方片","梅花","红桃","黑桃"};
                HashMap<Integer, String> hm = new HashMap<>();                                        //存储索引和扑克牌
                ArrayList<Integer> list = new ArrayList<>();                                        //存储索引
                int index = 0;
               
                //拼接扑克牌并索引和扑克牌存储在hm中
                for(String s1 : num) {                                                                                        //获取数字
                        for(String s2 : color) {                                                                        //获取颜色
                                hm.put(index, s2.concat(s1));
                                list.add(index);                                                                                //将索引0到51添加到list集合中
                                index++;
                        }
                }
                //将小王添加到双列集合中
                hm.put(index, "小王");
                list.add(index);                                                                                                //将52索引添加到集合中
                index++;
                hm.put(index, "大王");
                list.add(index);                                                                                                //将52索引添加到集合中
               
                //2,洗牌
                Collections.shuffle(list);
                //3,发牌
                TreeSet<Integer> gaojin = new TreeSet<>();
                TreeSet<Integer> longwu = new TreeSet<>();
                TreeSet<Integer> me = new TreeSet<>();
                TreeSet<Integer> dipai = new TreeSet<>();
               
                for(int i = 0; i < list.size(); i++) {
                        if(i >= list.size() - 3) {
                                dipai.add(list.get(i));                                                        //将三张底牌存储在底牌集合中
                        }else if(i % 3 == 0) {
                                gaojin.add(list.get(i));
                        }else if(i % 3 == 1) {
                                longwu.add(list.get(i));
                        }else {
                                me.add(list.get(i));
                        }
                }
               
                //看牌
                lookPoker(hm, gaojin, "王五");
                lookPoker(hm, longwu, "李四");
                lookPoker(hm, me, "张三");
                lookPoker(hm, dipai, "底牌");
        }
        /*
         * 看牌
         * 1,返回值类型void
         * 2,参数列表HashMap,TreeSet,String name
         */
        public static void lookPoker(HashMap<Integer, String> hm,TreeSet<Integer> ts ,String name) {
                System.out.print(name + "的牌是:");
                for(Integer i : ts) {                                                //i代表双列集合中的每一个键
                        System.out.print(hm.get(i) + " ");
                }
                System.out.println();
        }
}


作者: 青火    时间: 2016-9-5 23:56
黑马币不好赚啊
作者: 赢无翳    时间: 2016-9-6 00:00
技术分更不好赚啊 只能曲线救国了
作者: 青火    时间: 2016-9-6 00:01
赢无翳 发表于 2016-9-6 00:00
技术分更不好赚啊 只能曲线救国了

你的分都比我多啦
作者: 流空有痕    时间: 2016-9-6 00:07
广州50期java基础班的?
作者: a825125501    时间: 2016-9-6 00:09
这代码,一个很综合的例子,虽然看起来可能有些复杂,但是其实就是把集合中学的知识综合了一下,一个很不错的案例
作者: SandyLiu    时间: 2016-9-6 00:18
你这分挺多啊
作者: lipeng518    时间: 2016-9-6 00:18
你这可以修改下,介意考虑抽取地主的过程
作者: MarsBong    时间: 2016-9-6 00:26
主要使用的是集合相关的知识
作者: 袁志娜    时间: 2016-9-6 09:21
我来凑热闹
作者: 小菜白白白    时间: 2016-9-6 09:43
怎样的贴才有技术分啊或黑马币
作者: 疾速火轮    时间: 2016-9-6 15:00
黑马币不好赚
作者: longzhi100    时间: 2016-9-6 17:53
这个看起来挺不错的,找的对象很哈哈哈
作者: Lws    时间: 2016-9-6 18:03
这个例子很经典,学习了
作者: 郭少鹏    时间: 2016-9-6 21:59
集合综合代码,不错的,可以更快的理解集合熟练集合

作者: xiguapi    时间: 2016-9-6 22:06
继续努力~~~~
作者: changfa    时间: 2016-9-6 22:09
很强势,6666
作者: zwy1174    时间: 2016-9-6 22:18
我们今天也学了,很经典的案例,看的代码多的头有点晕




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2