模拟斗地主洗牌和发牌,,并对牌进行排序,具体规则:1.组装54张扑克牌2.将54张牌随机处理3.三个玩家(一个地主两个农民),三个人交替摸牌,每人17张牌,最后流三张底牌4.查看三个人各自查看手中的大小排序
- 方法1
public class TestHashMpa {
/*
* 初始化
*/
public static Map<Integer, String> initialize(){
Map<Integer, String> map = new HashMap<>();
map.put(1, "黑桃3");
map.put(5, "黑桃4");
map.put(9, "黑桃5");
map.put(13, "黑桃6");
map.put(17, "黑桃7");
map.put(21, "黑桃8");
map.put(25, "黑桃9");
map.put(29, "黑桃10");
map.put(33, "黑桃J");
map.put(37, "黑桃Q");
map.put(41, "黑桃K");
map.put(45, "黑桃A");
map.put(49, "黑桃2");
map.put(2, "方块3");
map.put(6, "方块4");
map.put(10, "方块5");
map.put(14, "方块6");
map.put(18, "方块7");
map.put(22, "方块8");
map.put(26, "方块9");
map.put(30, "方块10");
map.put(34, "方块J");
map.put(38, "方块Q");
map.put(42, "方块K");
map.put(46, "方块A");
map.put(50, "方块2");
map.put(3, "红桃3");
map.put(7, "红桃4");
map.put(11, "红桃5");
map.put(15, "红桃6");
map.put(19, "红桃7");
map.put(23, "红桃8");
map.put(27, "红桃9");
map.put(31, "红桃10");
map.put(35, "红桃J");
map.put(39, "红桃Q");
map.put(43, "红桃K");
map.put(47, "红桃A");
map.put(51, "红桃2");
map.put(4, "梅花3");
map.put(8, "梅花4");
map.put(12, "梅花5");
map.put(16, "梅花6");
map.put(20, "梅花7");
map.put(24, "梅花8");
map.put(28, "梅花9");
map.put(32, "梅花10");
map.put(36, "梅花J");
map.put(40, "梅花Q");
map.put(44, "梅花K");
map.put(48, "梅花A");
map.put(52, "梅花2");
map.put(53,"小王");
map.put(54,"大王");
return map;
}
/*
* 产生1-54的数,判断是否是map中的键
*/
public static int random(Map<Integer, String> map){
int key=0;
while(true){
key=((int)(Math.random()*54)+1);
if(map.containsKey(key)){
break;
}
}
return key;
}
/*
* 根据键倒序排序
*/
public static Comparator<Integer> compartaor(){
return new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o2-o1;
}
};
}
public static void main(String[] args) {
Map<Integer, String> map=initialize();
TreeMap<Integer, String> dizhu=new TreeMap<>(compartaor());
TreeMap<Integer, String> nongmin1=new TreeMap<>(compartaor());
TreeMap<Integer, String> nongmin2=new TreeMap<>(compartaor());
for(int i=1;i<=17;i++){
int key=random(map);
dizhu.put(key, map.get(key));
map.remove(key);
key=random(map);;
nongmin1.put(key, map.get(key));
map.remove(key);
key=random(map);
nongmin2.put(key, map.get(key));
map.remove(key);
}
for(Integer key:map.keySet()){
dizhu.put(key, map.get(key));
}
System.out.println("地主的牌为:");
System.out.println(dizhu.values());
System.out.println("农民1的牌为:");
System.out.println(nongmin1.values());
System.out.println("农民2的牌为:");
System.out.println(nongmin2.values());
}
}
2.方法二
public class DudiDemo {
public static void main(String[] args) {
//创建Map集合组合牌,key编号,value是牌(花色+数字)
HashMap<Integer, String> mapPooker=new HashMap<>();
//创建List集合存储编号
ArrayList<Integer> listPookerNum=new ArrayList<>();
//创建花色数组
String[] colors={"♠","♥","♦","♣"};
//创建电视数组
String[] numbers={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
//拼接扑克牌
int index=0;
mapPooker.put(index, "大王");
listPookerNum.add(index);
index++;
mapPooker.put(index, "小王");
listPookerNum.add(index);
index++;
for(String strNum:numbers){
for(String strColors:colors){
mapPooker.put(index, strColors+strNum);
listPookerNum.add(index);//对key进行随机排序====》洗牌
index++;
}
}
//随机洗牌
Collections.shuffle(listPookerNum);
//发牌并且排序
TreeSet<Integer> play1=new TreeSet<>();
TreeSet<Integer> play2=new TreeSet<>();
TreeSet<Integer> play3=new TreeSet<>();
//存放底牌
TreeSet<Integer> buttomNum=new TreeSet<>();
for(int i=0;i<listPookerNum.size();i++){
//先拿出三张底牌
if(i<3){
buttomNum.add(listPookerNum.get(i));
}else if(i%3==0){
play1.add(listPookerNum.get(i));
}else if(i%3==1){
play2.add(listPookerNum.get(i));
}else if(i%3==2){
play3.add(listPookerNum.get(i));
}
}
//看牌
/*
* 需要指定地主(name)
* 指定那一份牌发给地主
* 地主看牌
*/
lookPookers("底牌",buttomNum,mapPooker);
lookPookers("农民1",play1,mapPooker);
lookPookers("农民2",play2,mapPooker);
//把底牌放入地主牌中
for(Integer num:buttomNum){
play3.add(num);
}
lookPookers("地主",play3,mapPooker);
}
//打印牌
public static void lookPookers(String name,TreeSet<Integer> play,HashMap<Integer, String> pooker){
System.out.print(name+":");
for(Integer key:play){
String value=pooker.get(key);
System.out.print(value+" ");
}
System.out.println();
}
}