package cz.bxg.demo08;
import java.util.*;
/*
需求:模拟斗地主发牌
步骤:
1.买牌
2.洗牌
3.发牌
4.看牌
/
public class SendPokerText {
public static void main(String[] args) {
//1.买牌************************************************************************
//1.1定义一个双列集合,键:表示牌的编号,值:表示具体的牌。规则:编号越小,牌越小.|
Map<Integer, String> pokers = new HashMap<>();
//1.2定义一个单列集合,用来存储所有牌的编号.
List<Integer> list = new ArrayList<>();
//1.3具体的买牌动作。
//普通牌52.
String[] colors = {"♠", "♥", "♣", "♦"};
String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2",};
int num = 0;//表示牌的编号
//通过循环嵌套 造 普通牌
for (String number : numbers) {//外循环,来获取所有的点数
for (String color : colors) {//内循环,获取所有的花色 内循环一圈外循环一次
String poker = color + number;
//将牌的编号,具体的牌放入双列集合中
pokers.put(num, poker);
//将牌的编号放在单列集合中
list.add(num);
//每增加一张牌,编号要自增1
num++;
}
}
//大小王
pokers.put(num, "小王");
list.add(num++);
pokers.put(num, "大王");
list.add(num++);
//打印牌就可以了。
System.out.println("所有的牌" + pokers);
System.out.println("牌的编号" + list);
//**********************************************************************************************************
//2.洗牌
Collections.shuffle(list);
System.out.println("洗牌后" + list);
//**********************************************************************************************************
//3.发牌
// 3.1定义4个集合 分别表示3个玩家和底牌
List liuYiFei = new ArrayList<>();
List zhaoliying = new ArrayList<>();
List xiaohei = new ArrayList<>();
List dipai = new ArrayList<>();
// 3.2具体的发牌动作,具体的索引和取模,决定发给谁
for (int i = 0; i < list.size(); i++) {
//获取编号
Integer pokerNum = list.get(i);
System.out.println(pokerNum);//牌的顺序
if (i >= list.size() - 3) {//如果牌剩余3张那么久是底牌
dipai.add(pokerNum);//最后三张放入dipai的集合中
} else if (i / 3 == 0) {
liuYiFei.add(pokerNum);
} else if (i / 3 == 1) {
zhaoliying.add(pokerNum);
} else if (i / 3 == 2) {
xiaohei.add(pokerNum);
}
}
// 3.3查看玩家
System.out.println("刘亦菲:" + liuYiFei);
System.out.println("赵丽颖:" + zhaoliying);
System.out.println("小黑:" + xiaohei);
System.out.println("底牌:" + dipai);
}
}
结果是:
刘亦菲:[9, 27, 34]
赵丽颖:[12, 26, 13]
小黑:[15, 28, 25]
底牌:[4, 36, 31]