主要分为5个步骤
1.准备牌:
可以先创建两个List集合用来存储牌的花色和牌的序号,然后再创建一个HashMap<k,v>用来存储牌的索引和牌,再创建一个ArrayList集合用来存储牌的索引(用来排序)。
因为大王和小王这两张牌比较特殊,所以应该在一开始的时候单独添加到map中
2.洗牌:
可以使用静态工具类Collections的方法shuffle(list)来打乱牌的顺序(也就是打乱牌的索引的顺序)
3.发牌:
一共54张牌要发给3个人然后需要留3张给底牌,所以每人一共17张牌,可以用for循环遍历牌索引的集合,然后用该集合的索引来对3取模,即i%3==0、i%3==1、i%3==2,底牌的约束则是该集合索引大于等于51是,发给底牌。
4.给玩家的牌排序
因为排序的对象的类型是Integer不是自定义类型,所以可以使用静态工具类Collections的sort方法来对玩家的牌的索引排序
5.看牌
可以自定义一个方法来看牌,通过玩家集合牌的索引,利用map集合的keySet方法键找值来获取牌,然后打印输出
实现代码如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
/*
1.准备牌
2.洗牌
3.发牌
4.排序
5.看牌
*/
public class DouDiZhu {
public static void main(String[] args) {
//创建HashMap对象用来存储牌的索引和牌
HashMap<Integer,String> poker = new HashMap<>();
//创建两个list来存放牌的花色和序号
List<String> colors = List.of("♥","♠","♣","♦");
List<String> numbers = List.of("2","A","K","Q","J","10","9","8","7","6","5","4","3");
//创建一个集合用来存放牌的索引
ArrayList<Integer> pokerIndex = new ArrayList<>();
//初始化牌的索引为0
int index=0;
//先把大王小王两张牌放入poker中
poker.put(index,"大王");
pokerIndex.add(index);
index++;
poker.put(index,"小王");
pokerIndex.add(index);
index++;
//再把剩下的52张牌用增强for循环嵌套遍历并组装
for (String number:numbers) {
for (String color:colors) {
poker.put(index,color+number);
pokerIndex.add(index);
index++;
}
}
//System.out.println(poker);
//洗牌,使用Collections工具类得shuffle()方法打乱牌索引的顺序
Collections.shuffle(pokerIndex);
//发牌,创建4个集合用来接收牌
ArrayList<Integer> play01 = new ArrayList<>();
ArrayList<Integer> play02 = new ArrayList<>();
ArrayList<Integer> play03 = new ArrayList<>();
ArrayList<Integer> diPai = new ArrayList<>();
for (int i = 0; i < pokerIndex.size(); i++) {
Integer in = pokerIndex.get(i);
if (i>=51){
//当牌的索引大于等于51,即只剩下三张牌时留给底牌
diPai.add(in);
} else if (i%3==0){
//发给玩家1
play01.add(in);
} else if (i%3==1){
//发给玩家2
play02.add(in);
} else if (i%3==2){
//发给玩家3
play03.add(in);
}
}
//给玩家的牌排序
Collections.sort(play01);
Collections.sort(play02);
Collections.sort(play03);
Collections.sort(diPai);
/*System.out.println(play01);
System.out.println(play02);
System.out.println(play03);
System.out.println(diPai);*/
//看牌
lookPoker("张三",play01,poker);
lookPoker("李四",play02,poker);
lookPoker("王五",play03,poker);
lookPoker("赵六",diPai,poker);
}
public static void lookPoker(String playerName,ArrayList<Integer> list,HashMap<Integer,String> map){
System.out.print(playerName+"的牌:");
//使用增强for循环和keySet方法遍历
for (Integer index:list) {
String value = map.get(index);
System.out.print(value+" ");
}
System.out.println(" ");
}
}