Java之斗地主洗牌发牌的实现

  1. 最开始在HashMap中存入键值对(即扑克牌的索引和花色点数),创建好每个玩家的集合;
  2. 通过创建虚拟的扑克牌编码集合ArrayList,并将0-53,共54张牌,洗牌后,每个玩家按顺序拿牌,拿完牌,并对拿到的牌进行排序(注意此时还指的是扑克编码集合);
  3. 每个玩家看牌时,传入HashMap集合点数花色,根据刚才拿到的牌索引编码,在hashMap中拿对应的值(牌);
    显示效果如下:
    在这里插入图片描述

代码如下:

package org.westos.demo8;
import javax.naming.Name;
import java.util.*;

public class Test {
    public static void main(String[] args) {
        String[] colors = {"♥", "♣", "♠", "♦"};
        String[] nums = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        //创建存放花色和点数扑克牌的集合
        HashMap<Integer, String> hashMap = new HashMap<>();

        //创建扑克牌的索引编码集合
        ArrayList<Integer> arrayList = new ArrayList<>();

        int i1 = 0;
        //向存放扑克牌集合里面添加元素(每张牌索引+花色点数)
        //向扑克牌索引编码集合里面添加元素(每张牌索引)
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < colors.length; j++) {
                arrayList.add(i1);
                hashMap.put(i1++, (colors[j] + nums[i]));

            }
        }
        //添加大小王进扑克牌集合;
        hashMap.put(52, "☀");
        hashMap.put(53, "🌙");
        //添加大小王索引进扑克牌索引集合
        arrayList.add(52);
        arrayList.add(53);
        //洗牌
        Collections.shuffle(arrayList);
        //创建玩家的扑克牌索引集合
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        ArrayList<Integer> arrayList2 = new ArrayList<>();
        ArrayList<Integer> arrayList3 = new ArrayList<>();
        ArrayList<Integer> arrayList4 = new ArrayList<>();
        //让每个玩家根据扑克牌打乱后的索引依次拿牌(同样拿的是扑克牌索引值)
        for (int i = 0; i < arrayList.size(); i++) {
            if (i >= arrayList.size() - 3) {
                Integer integer = arrayList.get(i);
                arrayList4.add(integer);
            } else if (i % 3 == 0) {
                Integer integer = arrayList.get(i);
                arrayList1.add(integer);
            } else if (i % 3 == 1) {
                Integer integer = arrayList.get(i);
                arrayList2.add(integer);
            } else {
                Integer integer = arrayList.get(i);
                arrayList3.add(integer);
            }

        }
        //对扑克进行排序;
        Collections.sort(arrayList1);
        Collections.sort(arrayList2);
        Collections.sort(arrayList3);
        Collections.sort(arrayList4);
        //创建方法拿牌;
        lookpooker("player1", arrayList1, hashMap);
        lookpooker("player2", arrayList2, hashMap);
        lookpooker("player3", arrayList3, hashMap);
        lookpooker("底牌", arrayList4, hashMap);

    }

    private static void lookpooker(String name, ArrayList<Integer> arrayList, HashMap<Integer, String> hashMap) {
        System.out.print(name);
        for (int i = 0; i < arrayList.size(); i++) {
            Integer key = arrayList.get(i);//按照顺序在每个玩家的索引集合里拿牌(拿的是从扑克牌索引集合里面的值)
            String s = hashMap.get(key);//按照索引在扑克牌花色点数拿牌,返回的是键对应的值;
            System.out.print(" " + s + " ");
        }
        System.out.println();


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值