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

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

程序员文章站 2022-07-12 09:08:57
...
  1. 最开始在HashMap中存入键值对(即扑克牌的索引和花色点数),创建好每个玩家的集合;
  2. 通过创建虚拟的扑克牌编码集合ArrayList,并将0-53,共54张牌,洗牌后,每个玩家按顺序拿牌,拿完牌,并对拿到的牌进行排序(注意此时还指的是扑克编码集合);
  3. 每个玩家看牌时,传入HashMap集合点数花色,根据刚才拿到的牌索引编码,在hashMap中拿对应的值(牌);
    显示效果如下:
    Java之斗地主洗牌发牌的实现

代码如下:

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();


    }
}