欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java实现斗地主发牌的两种方法(集合)

程序员文章站 2022-03-27 19:49:19
斗地主规则为使用 54 张牌打乱顺序,3 个玩家参与游戏,3 人交替摸牌,每人 17 张牌,后 3 张留作底牌。实现思路:1.准备牌2.洗牌3.发牌4.排序5.看牌第一种方法:以java双列集合HashMap为核心实现发牌代码如下: public static void main(String[] args) { //准备牌堆创建map集合,存放牌 Map pai=new HashMap<>();...

斗地主规则为使用 54 张牌打乱顺序,3 个玩家参与游戏,3 人交替摸牌,每人 17 张牌,后 3 张留作底牌。
实现思路:
1.准备牌
2.洗牌
3.发牌
4.排序
5.看牌

第一种方法:以java双列集合HashMap为核心实现发牌
代码如下:

 public static void main(String[] args) {
        //准备牌堆创建map集合,存放牌
        Map<Integer,String> pai=new HashMap<>();
        //创建list集合存放序号,来储存牌的索引。
        List <Integer>list=new ArrayList<Integer>();
        String[] num={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};//牌
        String[] color={"♣","♦","♠","♥"};//牌的花色
        //将牌存入map集合
        pai.put(0,"大王");
        pai.put(1,"小王");
        list.add(0);
        list.add(1);
        int i=2;//序号
        //循环嵌套遍历两个数组,组装52张牌,存储到集合中
        for (String n:num
             ) {
            for (String col:color
                 ) {
                pai.put(i,col+n+" ");
                list.add(i);
                i++;
            }
        }
    //打乱牌序来洗牌:Colletions中的shuffle(List)方法来打乱牌的顺序
        Collections.shuffle(list);
        //三个玩家,一个底牌
        List<Integer> player=new ArrayList<Integer>();
        List<Integer> player2=new ArrayList<Integer>();
        List<Integer> player3=new ArrayList<Integer>();
        List<Integer> landlord=new ArrayList<Integer>();
    //发牌发牌:定义4个集合,存储玩家牌的索引和底牌的索引, 遍历存储牌索引的List集合,获取每一个牌的索引
        for (int j = 0; j <list.size() ; j++) {
            //底牌
            if (j <3) {
                landlord.add(list.get(j));
            }else if (j%3 == 0) {
                player.add(list.get(j));
            }else if (j%3 == 1) {
                player2.add(list.get(j));
            }else if (j%3 == 2) {
                player3.add(list.get(j));
            }
        }
    //排序:使用Collections中的方法sort(List)默认是升序排序
        Collections.sort(player);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(landlord);
    //看牌:定义了一个look()方法
        look("玩家1",player,pai);
        look("玩家2",player2,pai);
        look("玩家3",player3,pai);
        look("底牌",landlord,pai);

    }
public  static void look(String name,List<Integer>list,Map<Integer,String > pai){
    System.out.println(name+":");
    for (int i = 0; i < list.size(); i++) {
        Integer key=list.get(i);
        System.out.print(pai.get(key)+" ");//通过键获取,不换行
    }
    System.out.println();//打印完每一个玩家的牌,换行
}

第二种方法直接全部使用List集合:

代码如下:

 public static void main(String[] args) {
        //创建牌堆的集合
        List<String> cards=new ArrayList<String>();
        //生成牌
        List<String> color=new ArrayList<String>();//花色
        color.add("♥");
        color.add("♠");
        color.add("♦");
        color.add("♣");
        //创建数字集合并储存
        List<String> number=new ArrayList<String>();
        for (int i = 2; i <=10; i++) {
            number.add(i+"");
        }
        number.add("J");
        number.add("Q");
        number.add("K");
        number.add("A");
        //将数字花色合并放入牌堆
        for (String colors:color
             ) {
            for (String num:number
                 ) {
                //合并
                String end=colors+num;
                cards.add(end);
            }
        }
        //大王小王
        cards.add("大王");
        cards.add("小王");
        // 洗牌
        Collections.shuffle(cards);
        //创建三个玩家以及一个底牌集合进行存储
        List<String> player1 = new ArrayList<String>();
        List<String> player2 = new ArrayList<String>();
        List<String> player3 = new ArrayList<String>();
        List<String> dipai = new ArrayList<String>();
        for (int i = 0; i < cards.size(); i++) {
            // 根据索引获取牌
            String end=cards.get(i);
            //准备底牌
            if (i >= 51) {
                dipai.add(end);
            }else {
                // 三个玩家
                if (i%3 == 0) {
                    player1.add(end);
                }else if(i%3==1) {
                    player2.add(end);
                }else if (i%3 ==2) {
                    player3.add(end);
                }

            }

        }
//查看牌
        System.out.println("玩家1"+player1);
        System.out.println("玩家2"+player2);
        System.out.println("玩家3"+player3);
        System.out.println("底牌"+dipai);
    }

本文地址:https://blog.csdn.net/weixin_43898051/article/details/107400456

相关标签: java