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