java练习斗地主发牌2.0

这次用的是Map集合,配合ArrayList集合完成发牌并排序。

public static void main(String[] args) {

        Map<Integer , String> map = new HashMap<>();//存储所有牌和牌的序号
        ArrayList<Integer> list = new ArrayList<>();//存储牌的序号,也就是k。这个集合的作用可以让牌从大到小排序更加方便。
        ArrayList<String> poker = makePoker();//存储所有牌,makePoker方法在下面,就是字面意思,生成所有牌。下面会有解析。

		//先把最简单list集合的功能搞定,也就是存储牌的序号。方便后面排序牌
        for (int i = 0; i < 54; i++) {

            list.add(i);
        }
		//现在把map集合也搞定了,就是简单的put元素进去
        for (int i = 0; i < 54; i++) {
            map.put(i , poker.get(i));
        }
        //打乱所有牌,用Clloections里的shuffle,shuffle是静态方法,不用创建对象,直接用就可以。
        Collections.shuffle(list);
		
		//创建每个玩家的牌和底牌。
        ArrayList<Integer> player1 = new ArrayList<>();
        ArrayList<Integer> player2 = new ArrayList<>();
        ArrayList<Integer> player3 = new ArrayList<>();
        ArrayList<Integer> dipai = new ArrayList<>();

		//底牌如果和玩家的牌放在一起处理会比较麻烦,所以这里先特殊处理
        for (int i = 1; i < 4; i++) {

            dipai.add(list.remove(list.size() - i));
        }
		//这里发牌,逻辑是,把牌分成很多轮,每一轮发三张牌。每发完一轮牌i+3;
        for (int i = 0; i < list.size(); i = i + 3) {

            player1.add(list.get(i));//每轮发牌的第一张
            player2.add(list.get(i + 1));//每轮发牌的第二张
            player3.add(list.get(i + 2));//每轮发牌的第三张
        }
		//Collections类里的sort方法,把list集合里的元素排序。因为list内的元素是Integer,所以可以排大小。
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(dipai);

		//创建新集合rankpoker,意思是排序好的牌,用来接收下面sortPoker方法的返回值。
        ArrayList<String> rankpoker1 = new ArrayList<>();
        ArrayList<String> rankpoker2 = new ArrayList<>();
        ArrayList<String> rankpoker3 = new ArrayList<>();
        ArrayList<String> rankdipai = new ArrayList<>();
        
        rankpoker1 = sortPoker(map,player1);
        rankpoker2 = sortPoker(map,player2);
        rankpoker3 = sortPoker(map,player3);
        rankdipai = sortPoker(map,dipai);

        System.out.println(rankpoker1);
        System.out.println(rankpoker2);
        System.out.println(rankpoker3);
        System.out.println(rankdipai);
    }

	// 排序牌不难理解
    public static ArrayList<String> sortPoker(Map<Integer , String> map , ArrayList<Integer> player){

        ArrayList<String> rankpoker = new ArrayList<>();
		//排序玩家的牌,和底牌。
        if (player.size() == 17){
            for (int i = 0; i < 17; i++) {

				//这里比较中要,是排序牌的核心。
                rankpoker.add(map.get(player.get(i)));
            }
        }
        if (player.size() == 3) {
            for (int i = 0; i < 3; i++) {

                rankpoker.add(map.get(player.get(i)));
            }
        }
        return rankpoker;
    }

	//生成所有牌,简单的for循环嵌套,嵌套完之后add到返回值poker里面,传递给上面
    public static ArrayList<String> makePoker(){

        String[] array1 = {"♠","♣","♦","♥"};
        String[] array2 = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        String[] array3 = {"大王","小王"};

        ArrayList<String> poker = new ArrayList<>();
        poker.add(array3[0]);
        poker.add(array3[1]);
        for (int i = 0; i < array2.length; i++) {
            for (int j = 0; j < array1.length; j++) {

                poker.add(array1[j] + array2[i]);
            }
        }
        return poker;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值