要求:
具体规则:
-
组装54张扑克牌将。
-
54张牌顺序打乱。
-
三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
-
查看三人各自手中的牌(按照牌的大小排序)、底牌。
规则:手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3。
案例需求分析
-
准备牌:
完成数字与纸牌的映射关系:
使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
-
洗牌:
通过数字完成洗牌发牌
-
发牌:
将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
存放的过程中要求数字大小与斗地主规则的大小对应。
将代表不同纸牌的数字分配给不同的玩家与底牌。
-
看牌:
通过Map集合找到对应字符展示。
通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。
代码实现
import java.util.*;
public class pooker {
public static void main(String[] args) {
Map<Integer,String> map = new TreeMap<>();
List<Integer> list = new ArrayList<>();//存储索引
String[] s1 = "2-A-K-Q-J-10-9-8-7-6-5-4-3".split("-");
String[] s2 = "♥-♠-♦-♣".split("-");
int index = 2;
for (String s : s1) {
for (String s3 : s2) {
String s4 = s3+s;
map.put(index,s4);
index++;
}
}
map.put(0,"大王");
map.put(1,"小王");
for (int i = 0; i <54 ; i++) {
list.add(i);
}
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 = 0; i <list.size() ; i++) {
if(i>=51){
dipai.add(i);
}else if(i%3==0){
player1.add(i);
}else if(i%3==1){
player2.add(i);
}else{
player3.add(i);
}
}
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
Collections.sort(dipai);
show("蔡依林",player1,map);
show("刘知珉",player2,map);
show("柳智敏",player3,map);
show("底牌",dipai,map);
}
public static void show(String name,ArrayList<Integer> list,Map<Integer,String> map){
StringBuilder sb =new StringBuilder("[");
for (int i = 0; i <list.size() ; i++) {
Integer key = list.get(i);
String value = map.get(key);
if(i==list.size()-1){
sb.append(value).append("]");
}else{
sb.append(value).append(", ");
}
}
System.out.println(name+": "+sb.toString());
}
}