要求:最后手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
- 准备牌:
完成数字与纸牌的映射关系:
使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。 - 洗牌:
通过数字完成洗牌发牌 - 发牌:
将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
存放的过程中要求数字大小与斗地主规则的大小对应。
将代表不同纸牌的数字分配给不同的玩家与底牌。 - 看牌:
通过Map集合找到对应字符展示。
通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Set;
public class DouDIZhu {
public static void main(String[] args) {
HashMap<Integer,String> pokerMap = new HashMap<>();
ArrayList<String> color = new ArrayList<>();//存放花色
ArrayList<String> number = new ArrayList<>();//存放数字
Collections.addAll(color,"♦", "♣", "♥", "♠");
Collections.addAll(number,"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
int count=1;
//大小王比较特殊,单独存放
pokerMap.put(count++,"大王");
pokerMap.put(count++,"小王");
//将数字和花色一一对应起来,存到pokerMap
for(String numbers:number) {
for(String colors:color){
String str= colors+numbers;
pokerMap.put(count++,str);
}
}
//System.out.println(pokerMap); //测试一下是否存储成功
//洗牌 通过pokerMap中数字键完成洗牌
Set<Integer> set= pokerMap.keySet();//得到这些数字键,并存到set集合中
//洗牌需要把这些数字放到List集合中去,
//System.out.println(set);
//Collections.shuffle(set); 错误写法 ,Set集合不支持
ArrayList<Integer> arrayList=new ArrayList<>();
arrayList.addAll(set);
System.out.println(arrayList);//此时数字是按照顺序排放的
//调用shuffle()方法打乱顺序
Collections.shuffle(arrayList);
System.out.println(arrayList);//测试一下数字是否打乱
//创建四个集合分别存储三个玩家和底牌的数字
ArrayList<Integer> play1= new ArrayList<>();
ArrayList<Integer> play2= new ArrayList<>();
ArrayList<Integer> play3= new ArrayList<>();
ArrayList<Integer> dipai= new ArrayList<>();
for (int i = 0; i < arrayList.size(); i++) {
int n= arrayList.get(i);
if(i>=51){
dipai.add(n);
}else {
if(i%3==0){
play1.add(n);
}else if(i%3==1){
play2.add(n);
}else {
play3.add(n);
}
}
}
//将各个手中的数字进行排序
Collections.sort(play1);
Collections.sort(play2);
Collections.sort(play3);
Collections.sort(dipai);
//再创建四个集合找到各个手中数字对应的牌面
ArrayList<String> play01= new ArrayList<>();
ArrayList<String> play02 =new ArrayList<>();
ArrayList<String> play03 =new ArrayList<>();
ArrayList<String> di =new ArrayList<>();
//通过数字找到对应的牌面并存储到集合
for(Integer i:play1){
String st1=pokerMap.get(i);
play01.add(st1);
}
for(Integer i:play2){
String st2=pokerMap.get(i);
play02.add(st2);
}
for(Integer i:play3){
String st3=pokerMap.get(i);
play03.add(st3);
}
for(Integer i:dipai){
String st1=pokerMap.get(i);
di.add(st1);
}
//打印结果
System.out.println("刘备"+play01);
System.out.println("关羽"+play02);
System.out.println("张飞"+play03);
System.out.println("底牌"+di);
}
}