案例:斗地主发牌
思路:建立1个map 3个AraayList放每个玩家的Pid 通过Pid大小对比理牌
一个ArrayList放所有Pids去洗牌
最后通过每个玩家的pid去map里找牌
package JAVA.JAVASE.Collection.斗地主发牌;
import java.lang.String;
import java.util.*;
public class 斗地主 {
public static void main(String[] args) {
//1.买牌
HashMap<Integer, String> map = new HashMap<>();//牌组
ArrayList<Integer> p1 = new ArrayList<>();//玩家1 这里使用List不用map是因为 我们还需要理牌 如果用map的话 理牌不方便取出key来对比 我们一开始先让id对比完 然后在用map通过玩家的pid去取牌
ArrayList<Integer> p2 = new ArrayList<>();//玩家2
ArrayList<Integer> p3 = new ArrayList<>();//玩家3
String[] nums = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};//数字牌
String[] color = {"♣", "♥", "♠", "♦"};//花色
int Pid = 0;//初始化的牌的ID
ArrayList<Integer> Pids = new ArrayList<>();//牌ID的单列集合
for (int i = 0; i < 13; i++) {//13张数字牌
for (int j = 0; j < 4; j++) {//4种花色
Pid++;
Pids.add(Pid);
String value = color[j] + nums[i];
map.put(Pid, value);
}
}//让Pids的List放入 1到52号牌 同时让组件好牌组52张 有花色和数字的牌组 同时这个Pids后面还可以帮助理牌Pid越大 牌就越大
Pids.add(53);
Pids.add(54);
map.put(53, "小王");
map.put(54, "大王");//手动放入大小王
//2.洗牌
Collections.shuffle(Pids);//shuffle可以随机排列List 就是让Pids里的值打乱 只能用ArrayLisy类型
//3.发牌
int temp = 0;
for (int i = 1; i <= 3; i++) {//给三个玩家发牌
for (int j = 1; j <= 17; j++) {//每个人17张牌
temp++;//计数发第几张牌了
int getpid = Pids.get(temp - 1);//把下标为0的Pid给第一个玩家 然后下标为1 以此类推
switch (i) {
case 1:
p1.add(getpid);
break;
case 2:
p2.add(getpid);
break;
case 3:
p3.add(getpid);
break;
}//i==1的时候就是给第一个玩家发牌 以此类推
}//理牌
switch (i) {
case 1:
Collections.sort(p1);
break;
case 2:
Collections.sort(p2);
break;
case 3:
Collections.sort(p3);
break;
}//这个必须放在第二个循环里 发完一个玩家的牌之后我们再去理牌
}
//4.亮牌
System.out.println("玩家1的牌");
for (Integer key : p1) {//通过每个玩家的拿到的Pid从map里取出他们的实际牌(value)
System.out.print(map.get(key)+"--");
}
System.out.println();
System.out.println("玩家2的牌");
for (Integer key : p2) {
System.out.print(map.get(key)+"--");
}
System.out.println();
System.out.println("玩家2的牌");
for (Integer key : p3) {
System.out.print(map.get(key)+"--");
}
System.out.println();
//底牌
System.out.println("底牌是:");
//剩下来的3张牌
System.out.println(map.get(Pids.get(51)));
System.out.println(map.get(Pids.get(52)));
System.out.println(map.get(Pids.get(53)));
}
}