Java利用集合完成斗地主的发牌和洗牌

Demo

package jihe;


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

/**
 * 斗地主
 */
public class Landlords {
    public static void main(String[] args) {

        method1();
        System.out.println("------------------------------");
        method2();
    }

    /**
     * 斗地主
     * 需求:
     * 通过程序实现斗地主过程中的洗牌、发牌和看牌
     * 思路:
     * 1、创建牌盒,也就是定义一个集合对象
     * 2、往牌盒装牌
     * 3、洗牌,将牌中的顺序打乱 (用 Collections 的 shuffle 方法)
     * 4、发牌,也就是遍历集合,给三个玩家发牌
     * 5、看牌,输出三个玩家分配的牌
     */
    public static void method1() {
        //创建牌盒,也就是定义一个集合对象,用ArrayList集合实现
        ArrayList<String> array = new ArrayList<>();

        //往牌盒装牌
        //先定义花色数组
        String[] colors = {"♦", "♣", "♥", "♠"};
        //定义牌面数组
        String[] number = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};

        //拼接花色和牌面
        for (String c : colors) {
            for (String n : number) {
                //往牌盒中装牌
                array.add(c + n);
            }
        }

        //再拼接上小王、大王
        array.add("小王");
        array.add("大王");

        //洗牌 - 使用Collections
        Collections.shuffle(array);

        //创建三个玩家 和 三张底牌盒子
        ArrayList<String> a = new ArrayList<String>();
        ArrayList<String> b = new ArrayList<String>();
        ArrayList<String> c = new ArrayList<String>();
        ArrayList<String> div = new ArrayList<String>();

        //发牌
        for (int i = 0; i < array.size(); i++) {
            //拿到每一张牌
            String poker = array.get(i);
            if (i >= array.size() - 3) {
                //保留3张底牌
                div.add(poker);
            } else if (i % 3 == 0) {
                //给第一个玩家发牌
                a.add(poker);
            } else if (i % 3 == 1) {
                //给第二个玩家发牌
                b.add(poker);
            } else if (i % 3 == 2) {
                //给第三个玩家发牌
                c.add(poker);
            }
        }

        //看牌
        System.out.println("第一个人的牌是:" + a);
        System.out.println("第二个人的牌是:" + b);
        System.out.println("第三个人的牌是:" + c);
        System.out.println("三张底牌是:" + div);
    }


    /**
     * 需求:
     * 通过程序实现斗地主过程中的洗牌、发牌和看牌
     * 思路:
     * 1、创建HashMap 键是编号,值是牌
     * 2、创建ArrayList 存储编号
     * 3、创建 花色和点数 数组
     * 4、从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号
     * 5、洗牌(洗的是编号,为了保证编号是排序的,创建TreeSet集合接收)
     * 7、看牌(遍历TreeSet集合,获取编号,到HashMap中查找对应的牌)
     */
    public static void method2() {
        //创建HashMap 键是编号 值是牌
        HashMap<Integer, String> hm = new HashMap<>();

        //创建ArrayLIst 存储编号
        ArrayList<Integer> array = new ArrayList<>();

        //创建花色数组
        String[] colors = {"♦", "♣", "♥", "♠"};
        //定义牌面数组
        String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};

        //从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号
        int index = 0;
        for (String n : number) {
            for (String c : colors) {
                hm.put(index, c + n);
                array.add(index);
                index++;
            }
        }

        //大小王
        hm.put(index, "小王");
        array.add(index);
        index++;
        hm.put(index, "大王");
        array.add(index);

        //洗牌
        Collections.shuffle(array);
        //定义角色和保留三张
        TreeSet<Integer> a = new TreeSet<>();
        TreeSet<Integer> b = new TreeSet<>();
        TreeSet<Integer> c = new TreeSet<>();
        TreeSet<Integer> div = new TreeSet<>();

        for (int i = 0; i < array.size(); i++) {
            //拿到每一张牌
            int x = array.get(i);
            if (i >= array.size() - 3) {
                //保留3张底牌
                div.add(x);
            } else if (i % 3 == 0) {
                //给第一个玩家发牌
                a.add(x);
            } else if (i % 3 == 1) {
                //给第二个玩家发牌
                b.add(x);
            } else if (i % 3 == 2) {
                //给第三个玩家发牌
                c.add(x);
            }
        }

        //看牌
        lookPoker("a", a, hm);
        lookPoker("b", b, hm);
        lookPoker("c", c, hm);

        //底牌
        System.out.print("底  牌 是:");
        for (Integer dv : div) {
            System.out.print(hm.get(dv) + " ");
        }
    }

    public static void lookPoker(String name, TreeSet<Integer> ts, HashMap<Integer, String> hm) {
        System.out.print(name + "的牌面是:");
        for (Integer key : ts) {
            String poker = hm.get(key);
            System.out.print(poker + " ");
        }
        System.out.println();
    }
}

Java利用集合完成斗地主发牌、洗牌.png

添加新评论