这次用的是Map集合,配合ArrayList集合完成发牌并排序。
public static void main(String[] args) {
Map<Integer , String> map = new HashMap<>();//存储所有牌和牌的序号
ArrayList<Integer> list = new ArrayList<>();//存储牌的序号,也就是k。这个集合的作用可以让牌从大到小排序更加方便。
ArrayList<String> poker = makePoker();//存储所有牌,makePoker方法在下面,就是字面意思,生成所有牌。下面会有解析。
//先把最简单list集合的功能搞定,也就是存储牌的序号。方便后面排序牌
for (int i = 0; i < 54; i++) {
list.add(i);
}
//现在把map集合也搞定了,就是简单的put元素进去
for (int i = 0; i < 54; i++) {
map.put(i , poker.get(i));
}
//打乱所有牌,用Clloections里的shuffle,shuffle是静态方法,不用创建对象,直接用就可以。
Collections.shuffle(list);
//创建每个玩家的牌和底牌。
ArrayList<Integer> player1 = new ArrayList<>();
ArrayList<Integer> player2 = new ArrayList<>();
ArrayList<Integer> player3 = new ArrayList<>();
ArrayList<Integer> dipai = new ArrayList<>();
//底牌如果和玩家的牌放在一起处理会比较麻烦,所以这里先特殊处理
for (int i = 1; i < 4; i++) {
dipai.add(list.remove(list.size() - i));
}
//这里发牌,逻辑是,把牌分成很多轮,每一轮发三张牌。每发完一轮牌i+3;
for (int i = 0; i < list.size(); i = i + 3) {
player1.add(list.get(i));//每轮发牌的第一张
player2.add(list.get(i + 1));//每轮发牌的第二张
player3.add(list.get(i + 2));//每轮发牌的第三张
}
//Collections类里的sort方法,把list集合里的元素排序。因为list内的元素是Integer,所以可以排大小。
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
Collections.sort(dipai);
//创建新集合rankpoker,意思是排序好的牌,用来接收下面sortPoker方法的返回值。
ArrayList<String> rankpoker1 = new ArrayList<>();
ArrayList<String> rankpoker2 = new ArrayList<>();
ArrayList<String> rankpoker3 = new ArrayList<>();
ArrayList<String> rankdipai = new ArrayList<>();
rankpoker1 = sortPoker(map,player1);
rankpoker2 = sortPoker(map,player2);
rankpoker3 = sortPoker(map,player3);
rankdipai = sortPoker(map,dipai);
System.out.println(rankpoker1);
System.out.println(rankpoker2);
System.out.println(rankpoker3);
System.out.println(rankdipai);
}
// 排序牌不难理解
public static ArrayList<String> sortPoker(Map<Integer , String> map , ArrayList<Integer> player){
ArrayList<String> rankpoker = new ArrayList<>();
//排序玩家的牌,和底牌。
if (player.size() == 17){
for (int i = 0; i < 17; i++) {
//这里比较中要,是排序牌的核心。
rankpoker.add(map.get(player.get(i)));
}
}
if (player.size() == 3) {
for (int i = 0; i < 3; i++) {
rankpoker.add(map.get(player.get(i)));
}
}
return rankpoker;
}
//生成所有牌,简单的for循环嵌套,嵌套完之后add到返回值poker里面,传递给上面
public static ArrayList<String> makePoker(){
String[] array1 = {"♠","♣","♦","♥"};
String[] array2 = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
String[] array3 = {"大王","小王"};
ArrayList<String> poker = new ArrayList<>();
poker.add(array3[0]);
poker.add(array3[1]);
for (int i = 0; i < array2.length; i++) {
for (int j = 0; j < array1.length; j++) {
poker.add(array1[j] + array2[i]);
}
}
return poker;
}