斗地主

晴天。
/**
* 模拟斗地主洗牌发牌
* 1. 准备牌:
完成数字与纸牌的映射关系:
使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
2. 洗牌:
通过数字完成洗牌发牌
3. 发牌:
将每个人以及底牌设计为ArrayList,将后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
存放的过程中要求数字大小与斗地主规则的大小对应。
将代表不同纸牌的数字分配给不同的玩家与底牌。
4. 看牌: 通过Map集合找到对应字符展示。
通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

*/
public class MapPoker {
public static void main(String[] args) {
/**
* 创建牌盒
*/
HashMap<Integer, String> pokerBox = new HashMap<>();
//创建数字集合
ArrayList<String> numbers = new ArrayList<>();
//创建花色集合
ArrayList<String> colors = new ArrayList<>();
Collections.addAll(colors,"♦","♣","♥","♠");
Collections.addAll(numbers,"2","A","K","Q","J","10","9","8","7","6","5","4","3");
//设置存储编号的变量
int count = 1;
pokerBox.put(count++,"小王");
pokerBox.put(count++,"大王");
for (String number:numbers) {
for (String color:colors) {
String card = color+number;
pokerBox.put(count++,card);
}
}

//洗牌
Set<Integer> numberSet= pokerBox.keySet();
//将set转为list,使用shuffle()打乱顺序
ArrayList<Integer> numberList = new ArrayList<>();
numberList.addAll(numberSet);
//打乱顺序
Collections.shuffle(numberList);
System.out.println("numberlist打乱后:+"+numberList);
//完成三个玩家相继摸牌,留三张底牌。摸到的是KEY值。
ArrayList<Integer> p1 = new ArrayList<>();
ArrayList<Integer> p2 = new ArrayList<>();
ArrayList<Integer> p3 = new ArrayList<>();
ArrayList<Integer> dipai = new ArrayList<>();

for (int i = 0; i <numberList.size() ; i++) {
Integer card = numberList.get(i);
if (i>=51){
dipai.add(card);
}else {
if (i%3==0){
p1.add(card);
}else if (i%3==1){
p2.add(card);
}else if(i%3==2){
p3.add(card);
}
}
}
//将手中的牌排序
Collections.sort(p1);
Collections.sort(p2);
Collections.sort(p3);
Collections.sort(dipai);

//创建三个玩家牌面集合
ArrayList<String> player1 = new ArrayList<>();
ArrayList<String> player2 = new ArrayList<>();
ArrayList<String> player3 = new ArrayList<>();
ArrayList<String> paimian = new ArrayList<>();

for (Integer i:p1) {
String card = pokerBox.get(i);
player1.add(card);
}
for (Integer i:p2) {
String card = pokerBox.get(i);
player2.add(card);
}
for (Integer i:p3) {
String card = pokerBox.get(i);
player3.add(card);
}
for (Integer i:dipai) {
String card = pokerBox.get(i);
paimian.add(card);
}
System.out.println("player1:"+player1);
System.out.println("player2:"+player2);
System.out.println("player3:"+player3);
System.out.println("paimian:"+paimian);

}
}
原文地址:https://www.cnblogs.com/lifengSkt/p/13267788.html