Java实现斗地主发牌的两种方法(集合)
程序员文章站
2022-06-28 18:39:51
斗地主规则为使用 54 张牌打乱顺序,3 个玩家参与游戏,3 人交替摸牌,每人 17 张牌,后 3 张留作底牌。实现思路:1.准备牌2.洗牌3.发牌4.排序5.看牌第一种方法:以java双列集合HashMap为核心实现发牌代码如下: public static void main(String[] args) { //准备牌堆创建map集合,存放牌 Map pai=new HashMap<>();...
斗地主规则为使用 54 张牌打乱顺序,3 个玩家参与游戏,3 人交替摸牌,每人 17 张牌,后 3 张留作底牌。
实现思路:
1.准备牌
2.洗牌
3.发牌
4.排序
5.看牌
第一种方法:以java双列集合HashMap为核心实现发牌
代码如下:
public static void main(String[] args) {
//准备牌堆创建map集合,存放牌
Map<Integer,String> pai=new HashMap<>();
//创建list集合存放序号,来储存牌的索引。
List <Integer>list=new ArrayList<Integer>();
String[] num={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};//牌
String[] color={"♣","♦","♠","♥"};//牌的花色
//将牌存入map集合
pai.put(0,"大王");
pai.put(1,"小王");
list.add(0);
list.add(1);
int i=2;//序号
//循环嵌套遍历两个数组,组装52张牌,存储到集合中
for (String n:num
) {
for (String col:color
) {
pai.put(i,col+n+" ");
list.add(i);
i++;
}
}
//打乱牌序来洗牌:Colletions中的shuffle(List)方法来打乱牌的顺序
Collections.shuffle(list);
//三个玩家,一个底牌
List<Integer> player=new ArrayList<Integer>();
List<Integer> player2=new ArrayList<Integer>();
List<Integer> player3=new ArrayList<Integer>();
List<Integer> landlord=new ArrayList<Integer>();
//发牌发牌:定义4个集合,存储玩家牌的索引和底牌的索引, 遍历存储牌索引的List集合,获取每一个牌的索引
for (int j = 0; j <list.size() ; j++) {
//底牌
if (j <3) {
landlord.add(list.get(j));
}else if (j%3 == 0) {
player.add(list.get(j));
}else if (j%3 == 1) {
player2.add(list.get(j));
}else if (j%3 == 2) {
player3.add(list.get(j));
}
}
//排序:使用Collections中的方法sort(List)默认是升序排序
Collections.sort(player);
Collections.sort(player2);
Collections.sort(player3);
Collections.sort(landlord);
//看牌:定义了一个look()方法
look("玩家1",player,pai);
look("玩家2",player2,pai);
look("玩家3",player3,pai);
look("底牌",landlord,pai);
}
public static void look(String name,List<Integer>list,Map<Integer,String > pai){
System.out.println(name+":");
for (int i = 0; i < list.size(); i++) {
Integer key=list.get(i);
System.out.print(pai.get(key)+" ");//通过键获取,不换行
}
System.out.println();//打印完每一个玩家的牌,换行
}
第二种方法直接全部使用List集合:
代码如下:
public static void main(String[] args) {
//创建牌堆的集合
List<String> cards=new ArrayList<String>();
//生成牌
List<String> color=new ArrayList<String>();//花色
color.add("♥");
color.add("♠");
color.add("♦");
color.add("♣");
//创建数字集合并储存
List<String> number=new ArrayList<String>();
for (int i = 2; i <=10; i++) {
number.add(i+"");
}
number.add("J");
number.add("Q");
number.add("K");
number.add("A");
//将数字花色合并放入牌堆
for (String colors:color
) {
for (String num:number
) {
//合并
String end=colors+num;
cards.add(end);
}
}
//大王小王
cards.add("大王");
cards.add("小王");
// 洗牌
Collections.shuffle(cards);
//创建三个玩家以及一个底牌集合进行存储
List<String> player1 = new ArrayList<String>();
List<String> player2 = new ArrayList<String>();
List<String> player3 = new ArrayList<String>();
List<String> dipai = new ArrayList<String>();
for (int i = 0; i < cards.size(); i++) {
// 根据索引获取牌
String end=cards.get(i);
//准备底牌
if (i >= 51) {
dipai.add(end);
}else {
// 三个玩家
if (i%3 == 0) {
player1.add(end);
}else if(i%3==1) {
player2.add(end);
}else if (i%3 ==2) {
player3.add(end);
}
}
}
//查看牌
System.out.println("玩家1"+player1);
System.out.println("玩家2"+player2);
System.out.println("玩家3"+player3);
System.out.println("底牌"+dipai);
}
本文地址:https://blog.csdn.net/weixin_43898051/article/details/107400456
上一篇: WebSocket学习总结
下一篇: Python练习题3.20逆序的三位数