一.项目要实现的目标
54张牌分发下去。达到3个玩家,每个玩家17张牌,3张底牌,牌面有序。见如下图:
二.需求分析
1.准备牌
实现:
- 用集合number存储{“2”,“A”,“K”,“Q”,“J”,“10”,“9”,“8”,“7”,“6”,“5”,“4”,“3”}
- 用集合color存储{红心,梅花,方块,黑桃}
- 用两个集合来组装52张牌。52张牌加大王,小王构成 map集合
- 用map去存储索引和牌
- 用indexList存储map的索引
- 2.洗牌
*用Collections.shuffle(indexList) - 3.发牌
- 根据indexList的索引来发牌
- 索引i>=51 就当成底牌(3张) diPai
- i%3==0 就给玩家1发牌 player1
- i%3==1 就给玩家2发牌 player2
- i%3==2 就给玩家3发牌 player3
- 4.排序
- 根据集合中的元素(即hashMap的索引值),按数值升序排序,如此扑克牌自然就按按照有序规则排序
- 5.看牌
根据底牌,玩家1,玩家2,玩家3集合里面存储的hashMap的索引值(键),从hashMap集合中找到对应的值,然后显示就行
三,具体实现代码
package dou.di.com;
import java.util.*;
public class DouDiZhuTest {
public static void main(String[] args) {
//1.准备牌
List<String> number = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
List<String> color = List.of("♥", "♠", "♦", "♣");
HashMap<Integer, String> map = new HashMap<>();
//大王,小王,这两张特殊牌先存入map集合
map.put(0, "大王");
map.put(1, "小王");
int index = 2;
//组装剩下的52张牌
for (String s : number) {
for (String s1 : color) {
String string = s1 + s;
map.put(index, string);
index++;
}
}
// System.out.println(map);
//用indexList存储map的索引
ArrayList<Integer> indexList = new ArrayList<>();
Set<Integer> keySet = map.keySet();
for (Integer in : keySet) {
indexList.add(in);
}
// System.out.println(indexList);
//2.洗牌
Collections.shuffle(indexList);
//3.发牌
ArrayList<Integer> diPai = new ArrayList<>();
ArrayList<Integer> player1 = new ArrayList<>();
ArrayList<Integer> player2 = new ArrayList<>();
ArrayList<Integer> player3 = new ArrayList<>();
// 索引i>=51 就当成底牌(3张) diPai
// i%3==0 就给玩家1发牌 player1
// i%3==1 就给玩家2发牌 player2
// i%3==2 就给玩家3发牌 player3
for (int i = 0; i < indexList.size(); i++) {
Integer integer = indexList.get(i);
if (i >= 51) {
diPai.add(integer);
} else if (i % 3 == 0) {
player1.add(integer);
} else if (i % 3 == 1) {
player2.add(integer);
} else if (i % 3 == 2) {
player3.add(integer);
}
}
//4.排序
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
Collections.sort(diPai);
//5.看牌
look("周杰伦", map, player1);
look("李小龙", map, player2);
look("王安石", map, player3);
look("底牌", map, diPai);
}
//5.看牌的方法
private static void look(String playName, HashMap<Integer, String> hashMap, ArrayList<Integer> integers) {
System.out.print(playName + ":");
for (Integer key : integers) {
String value = hashMap.get(key);
System.out.print(value + " ");
}
System.out.println();//显示了一个玩家的牌后,换行,显示下一个玩家的牌
}
}