斗地主—自动排序版

本案例使用了 hashMap 来存储手牌,其中 key 存储 0 到 1 作为索引,value 存储手牌。

下面来进行代码实现:
首先要准备牌:

 //准备牌
        String[] huase = {"♥","♠","♣","♦"};
        //数字的顺序很重要,关系到后面放入哈希表时是否有序
        String[] nums = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        
        //准备存放纸牌的容器
        HashMap<Integer,String> pai = new HashMap<>();
        pai.put(0,"大王");
        pai.put(1,"小王");

        //使用循环嵌套遍历的方法来组装牌,并把牌和其对应的索引添加到容器中
        for (int i = 0, j = 0; i < nums.length; i++, j++) {
            for (int i1 = 0; i1 < huase.length; i1++) {
                String pais = huase[i1] + nums[i];
                //手牌对应的索引
                int index = i * 4 + i1 + 2;
                pai.put(index,pais);
            }
            
        }

把数组随机打乱

//把hashMap的索引加入到一个新建的数组中,然后把顺序进行随机打乱
        ArrayList<Integer>index = new ArrayList<>();
        
        for (int i = 0; i < 54; i++) {
            index.add(i);
        }
        //洗牌
        Collections.shuffle(index);

发牌

 //创建四个数组来作为三个斗地主人员以及底牌
        ArrayList<Integer> player1 = new ArrayList<>();
        ArrayList<Integer> player2 = new ArrayList<>();
        ArrayList<Integer> player3 = new ArrayList<>();
        ArrayList<Integer> dipai = new ArrayList<>();    //底牌
        
        for (int i = 0; i < index.size(); i++) {
            if (i >= 51){
                //发牌给底牌
                dipai.add(index.get(i));
            }
            else if (i % 3 == 0){
                //发牌给player1
                player1.add(index.get(i));
            }
            else if (i % 3 == 1){
                //发牌给player2
                player2.add(index.get(i));
            }
            else if (i % 3 == 2){
                //发牌给player3
                player3.add(index.get(i));
            }
        }

由于重复的代码较多,创建一个方法来排序和看牌

 //创建一个排序和看牌二和一的方法
    private static void look_pai(String name,HashMap pai,ArrayList<Integer> index) {
        //调整牌序
        Collections.sort(index);

        System.out.print(name + ": ");
        for (Integer integer : index) {
            System.out.print("  " + pai.get(integer));
        }
        //换行
        System.out.println();

    }

由于使用了随机打乱的方法,所以每次的结果都不相同。
结果1:

周润发:22  ♣A  ♠K  ♥Q  ♦1098877665543
周星驰:   ♥A  ♦A  ♥K  ♣Q  ♠J  ♣J  ♥10101099875433
刘德华:   小王  ♥22  ♠A  ♣K  ♦K  ♠Q  ♦Q  ♦J  ♠98765443
 底牌 :   大王  ♥J  ♣6

结果2:

周润发:22  ♦A  ♠K  ♣K  ♦K  ♥Q  ♠J  ♦J  ♦109987653
周星驰:22  ♥A  ♠A  ♣A  ♥K  ♠Q  ♣Q  ♥10108865544
刘德华:   大王  小王  ♥J  ♣J  ♣10998766544333
 底牌 :   ♦Q  ♥77

下面给出完整代码:

import java.util.*;

public class 斗地主_排序版 {
    public static void main(String[] args) {
       
        //准备牌
        String[] huase = {"♥","♠","♣","♦"};
        //数字的顺序很重要,关系到后面放入哈希表时是否有序
        String[] nums = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        
        //准备存放纸牌的容器
        HashMap<Integer,String> pai = new HashMap<>();
        pai.put(0,"大王");
        pai.put(1,"小王");

        //使用循环嵌套遍历的方法来组装牌,并把牌和其对应的索引添加到容器中
        for (int i = 0, j = 0; i < nums.length; i++, j++) {
            for (int i1 = 0; i1 < huase.length; i1++) {
                String pais = huase[i1] + nums[i];
                //手牌对应的索引
                int index = i * 4 + i1 + 2;
                pai.put(index,pais);
            }
            
        }

//把hashMap的索引加入到一个数组里,然后把顺序进行随机打乱
        ArrayList<Integer>index = new ArrayList<>();
        for (int i = 0; i < 54; i++) {
            index.add(i);
        }
        //洗牌
        Collections.shuffle(index);

        //发牌
        //创建四个数组来作为三个斗地主人员以及底牌
        ArrayList<Integer> player1 = new ArrayList<>();
        ArrayList<Integer> player2 = new ArrayList<>();
        ArrayList<Integer> player3 = new ArrayList<>();
        ArrayList<Integer> dipai = new ArrayList<>();    //底牌

        for (int i = 0; i < index.size(); i++) {
            if (i >= 51){
                //发牌给底牌
                dipai.add(index.get(i));
            }
            else if (i % 3 == 0){
                //发牌给player1
                player1.add(index.get(i));
            }
            else if (i % 3 == 1){
                //发牌给player2
                player2.add(index.get(i));
            }
            else if (i % 3 == 2){
                //发牌给player3
                player3.add(index.get(i));
            }
        }

        //看牌
        look_pai("周润发", pai, player1);
        look_pai("周星驰", pai, player2);
        look_pai("刘德华", pai, player3);
        look_pai(" 底牌 ", pai, dipai);

    }

    //构造一个排序和看牌二和一的方法
    private static void look_pai(String name,HashMap pai,ArrayList<Integer> index) {
        //调整牌序
        Collections.sort(index);

        System.out.print(name + ": ");
        for (Integer integer : index) {
            System.out.print("  " + pai.get(integer));
        }
        //换行
        System.out.println();

    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值