/*准备牌:
* 完成数字与纸牌的映射关系,用map集合,完成一个数字与字符串纸牌的对应关系
* 洗牌:
* 通过数字完成洗牌collections.shuffle
* 发牌:
* 将每个玩家和底牌设计为ArrayList,将最后3张牌直接放到底牌list
* 通过对3%依次发牌
* 存放过程中要求数字大小与斗地主规则的大小对应
* 将代表不同纸牌的数字分配给不同的玩家和底牌
* 看牌:
* 通过map集合找到对应字符展示
* 通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示
*/
/*
* 1组装54张扑克牌
*/
// 1.1创建map集合存储
HashMap<Integer,String> pokerMap=new HashMap<Integer,String>();
// 1.2创建花色集合与数字集合
ArrayList<String> colors=new ArrayList<String>();
ArrayList<String> numbers=new ArrayList<String>();
// 1.3存储花色与数字
Collections.addAll(colors, "♠","♥","♣","♦");
Collections.addAll(numbers, "2","A","K","Q","J","10","9","8","7","6","5","4","3");
// 设置存储编号变量
int count=1;
pokerMap.put(count++, "大王");
pokerMap.put(count++, "小王");
// 1.4创建牌存储到map集合
for(String number:numbers) {
for(String color:colors) {
String card=color+number;
pokerMap.put(count++, card);
}
}
// 将54张牌打乱
// 取出编号集合
Set<Integer> numberSet=pokerMap.keySet();
// 因为要将编号打乱顺序,所以先转到list集合中
ArrayList<Integer> numberList=new ArrayList<Integer>();
numberList.addAll(numberSet);
// 打乱顺序
Collections.shuffle(numberList);
// 完成3个玩家交替摸牌,每人17张,最后3张留作底牌
// 3.1发牌的编号
// 创建3个玩家编号集合和一个底牌编号集合
ArrayList<Integer> numPlay1=new ArrayList<Integer>();
ArrayList<Integer> numPlay2=new ArrayList<Integer>();
ArrayList<Integer> numPlay3=new ArrayList<Integer>();
ArrayList<Integer> numDipai=new ArrayList<Integer>();
// 3.2发牌的编号
for(int i=0;i<numberList.size();i++) {
// 获取牌的编号
Integer num=numberList.get(i);
// 发牌,留出底牌
if(i>=51) {
numDipai.add(num);
}else {
if(i%3==0) {
numPlay1.add(num);
}else if(i%3==1) {
numPlay2.add(num);
}else {
numPlay3.add(num);
}
}
}
// 4查看3个玩家手中的牌(大小排序),底牌
// 4.1对手中编号进行排序
Collections.sort(numPlay1);
Collections.sort(numPlay2);
Collections.sort(numPlay3);
Collections.sort(numDipai);
// 4.2进行牌面转换
// 创建3个玩家牌面集合,和底牌牌面集合
ArrayList<String> player1=new ArrayList<String>();
ArrayList<String> player2=new ArrayList<String>();
ArrayList<String> player3=new ArrayList<String>();
ArrayList<String> dipai=new ArrayList<String>();
// 4.3转换,根据编号找到牌面,添加到对应的牌面集合中
for(Integer i:numPlay1) {
String card=pokerMap.get(i);
player1.add(card);
}
for(Integer i:numPlay2) {
String card=pokerMap.get(i);
player2.add(card);
}
for(Integer i:numPlay3) {
String card=pokerMap.get(i);
player3.add(card);
}
for(Integer i:numDipai) {
String card=pokerMap.get(i);
dipai.add(card);
}
// 4.5查看
System.out.println("玩家1"+player1);
System.out.println("玩家2"+player2);
System.out.println("玩家3"+player3);
System.out.println("底牌"+dipai);