public static void main(String[] args) {
//声明一个list集合用来存放每张拍的编号0~53
List list=new ArrayList();
//声明一个数组存放除了大小王的13张牌
String []number={“A”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”,“J”,“Q”,“K”};
//声明一个数组存放花色
String []suit={“♥”,“♠”,“♣”,“♦”};
//声明一个map集合kay存编号value村花色和具体的牌
Map<Integer,String > map=new HashMap< >();
int u=0;//用来记录编号
//强化循环遍历两个数组可以随意嵌套只是顺序不同
//n在外就是♥1♠1。n在内就是♥1♥2…♥13
for (String num : number) {
for (String col : suit) {
map.put(u, col + num);
//将编号添加到list集合中
list.add(u);
u++;
}
}
//上面双重循环产生了4*13=52张牌。编号是0到51
//然后将大小王放进map集合
map.put(52, “小王”);
map.put(53, “大王”);
//将大小王的编号放进list集合
list.add(52);
list.add(53);
//使用Collections的shuffle方法打乱所有牌的编号
Collections.shuffle(list);
//声明四个数组分别存放三手牌和底牌
List p1=new ArrayList<>();
List p2=new ArrayList<>();
List p3=new ArrayList<>();
List p4=new ArrayList<>();
//将打乱后的编号分别给p1p2p3p4也就是发牌
//这里利用数字3的特性来发牌
//数字3的特性是任何数与它取模都等于0,1,2不会有其它结果
//有顺序的整数取模于3就会得到012012…,201201…,120120…
//有兴趣的可以去试一下
for (int i = 0; i < list.size(); i++) {
if (i < 3) {
p4.add(list.get(i));//我这里将前三张牌作为底牌
}
else if (i % 3 == 0) {
p1.add(list.get(i));//第一手牌
} else if (i % 3 == 1) {
p2.add(list.get(i));//第二手牌
} else {
p3.add(list.get(i));//第三手牌
}
}
//我这里使用Collections类的sort对每一手牌进行了简单的排序
//当然这样排的并不完美
//下面是我写的没有用map的发牌看牌里面写了比较完美的排序
//https://editor.csdn.net/md/?articleId=107448449
Collections.sort(p1);
Collections.sort(p2);
Collections.sort(p3);
Collections.sort(p4);
//下面调用show方法看每一手牌
show(“张龙”,p1,map);
show(“杰”,p2,map);
show(“世博”,p3,map);
show(“底牌”,p4,map);
}
//定义一个方法来show看牌name 表示拿这一手牌的人 list是一手牌的集合
//map不变,是存放了编号花色和大小的集合
private static void show(String name, List list, Map<Integer, String> map) {
System.out.print(name+":");
for (Integer p : list) {//注意这里的打印是不换行的
System.out.print(map.get§+" ");
}
System.out.println();//打印完一手牌再换行便于观察效果
}
Java使用map集合实现斗地主发牌和看牌
最新推荐文章于 2022-03-22 11:35:02 发布