黑马程序员技术交流社区

标题: 自己写的斗地主发牌的过程 [打印本页]

作者: 愤怒的大飞机    时间: 2017-1-9 23:02
标题: 自己写的斗地主发牌的过程
[Java] 纯文本查看 复制代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class Test {
        /*
         * 成龙,甄子丹,李连杰三个人打斗地主,三人约定,洗牌后,随机抽取一张"明牌"并夹在中间;然后依次抓牌,               谁抓到这张便自动作为地主,并收取最后三张。
         * 要求:请用程序实现这一过程,最后打印地主名,以及三个人的牌(要求排序);
         */
        public static void main(String[] args) {
                String[] color = { "♠", "♥", "♣", "♦" };
                String[] num = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" };
                // 创建map存储牌
                Map<Integer, String> poker = new HashMap<Integer, String>();
                // list存储map的key值
                List<Integer> list = new ArrayList<Integer>();
                poker.put(52, "小王");
                poker.put(53, "大王");
                list.add(52);
                list.add(53);
                int count = 0;
                for (String stringN : num) {
                        for (String stringC : color) {
                                poker.put(count, stringC + stringN);
                                list.add(count);
                                count++;
                        }
                }
                // 定义一个随机牌,拿到这张牌就是地主,只能是前51张牌,要不然谁都拿不到,或者在随机数,制定随机的人是地主
                int number = new Random().nextInt(51);
                System.out.println("明牌为" + poker.get(number));
                // 定义四个集合,用来存储随机的牌
                ArrayList<Integer> player01 = new ArrayList<Integer>();
                ArrayList<Integer> player02 = new ArrayList<Integer>();
                ArrayList<Integer> player03 = new ArrayList<Integer>();
                ArrayList<Integer> bottom = new ArrayList<Integer>();
                // 模拟洗牌过程
                Collections.shuffle(list);
                // 模拟发牌过程
                for (int i = 0; i < list.size(); i++) {
                        // 将最前面的3张牌拿出来,留作底牌
                        if (i >= 51) {
                                // 根据索引找到对应的整数
                                bottom.add(list.get(i));
                        } else if (i % 3 == 0) {
                                player01.add(list.get(i));
                        } else if (i % 3 == 1) {
                                player02.add(list.get(i));
                        } else if (i % 3 == 2) {
                                player03.add(list.get(i));
                        }
                }
                // 判断明牌的那张牌在谁手里,然后底牌全是他的
                if (player01.contains(number)) {
                        player01.addAll(bottom);
                } else if (player02.contains(number)) {
                        player02.addAll(bottom);
                } else if (player03.contains(number)) {
                        player03.addAll(bottom);
                }
                // 将牌排序
                Collections.sort(player01);
                Collections.sort(player02);
                Collections.sort(player03);
                Collections.sort(bottom);
                System.out.println("底牌为:");
                for (Integer integer : bottom) {
                        System.out.print(poker.get(integer) + "  ");
                }
                System.out.println();
                prtinPoker("成龙", poker, player01);
                prtinPoker("甄子丹", poker, player02);
                prtinPoker("李连杰", poker, player03);

        }

        private static void prtinPoker(String name, Map<Integer, String> poker, ArrayList<Integer> player) {
                if (player.size() == 20) {
                        System.out.println("☆☆☆" + name + "是地主☆☆☆");
                } else {
                        System.out.println(name + "的牌为:");
                }
                for (Integer integer : player) {
                        System.out.print(poker.get(integer) + "  ");
                }
                System.out.println();
        }

}


作者: 愤怒的大飞机    时间: 2017-1-9 23:05
本帖最后由 愤怒的大飞机 于 2017-1-9 23:14 编辑
KyneZhk 发表于 2017-1-9 23:04
哥们,你是不是264期

快使用双截棍
作者: 春去    时间: 2017-1-9 23:47
只能看懂一部分,看来需要继续努力

作者: wqq1317    时间: 2017-1-10 14:12
厉害,希望以后自己也可以轻松实现

作者: 夏日梦    时间: 2017-1-10 15:04
基础视频有

作者: 一片叶~    时间: 2017-1-10 19:58
厉害厉害,
作者: 事难懂    时间: 2017-1-10 20:30
有意思,佩服
作者: gaozichang    时间: 2017-1-10 21:50
小白表示看不懂   0.0
作者: 带给你一个故事    时间: 2017-1-10 22:18
很6 啊,很厉害

作者: 月微怜    时间: 2017-1-10 23:00
厉害厉害。。学习下。。




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