java,模拟斗地主

具体规则:
1. 组装54张扑克牌将
2. 54张牌顺序打乱
3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
4. 查看三人各自手中的牌(按照牌的大小排序)、底牌
5. 手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

import java.lang.reflect.Array;
import java.util.*;

public class Landlords {
public static void main(String[] args) {

// 1.造牌
// 1.1 创建一个扑克盒双列集合,用来存储扑克牌,和对应的索引 ,键为索引,值为牌面值

    Map<Integer,String> pokes = new HashMap<>();

// 1.2 创建一个单列集合用来存储花色

    ArrayList<String> colors = new ArrayList<>();

// 1.3 创建一个单列集合用来存储牌面值

    ArrayList<String> numbers = new ArrayList<>();

// 1.4 给花色集合添加花色

    colors.add("♠");
    colors.add("♥");
    colors.add("♣");
    colors.add("♦");

// 1.5,给牌面值集合添加牌面值

    numbers.add("2");
    numbers.add("A");
    numbers.add("K");
    numbers.add("Q");
    numbers.add("J");
    int index = 0;
    pokes.put(index++,"大王");
    pokes.put(index++,"小王");
    for (int i = 10; i>=3; i--) {
        numbers.add(i+"");
    }

// 1.6 循环嵌套遍历花色集合和牌面值集合,进行拼接得到扑克牌,并添加到扑克盒集合中

    for (String number : numbers) {
        for (String color : colors) {
            String str = color+number;
            pokes.put(index,str);
            index++;
        }

    }

// 2.洗牌
// 2.1 获取扑克盒双列集合的所有键,也就是索引

    System.out.println(pokes+"..."+index);
    Set<Integer> indexs = pokes.keySet();

// 2.2 把Set集合转换为List集合

    ArrayList<Integer> indexlist = new ArrayList<>();
    indexlist.addAll(indexs);
    System.out.println(indexlist);

// 2.2 随机打乱索引

    Collections.shuffle(indexlist);
    System.out.println(indexlist);

// 3.发牌
// 3.1.创建4个集合,分别用来存储3个玩家的索引和底牌的索引

    ArrayList<Integer> index1 =  new ArrayList<>();
    ArrayList<Integer> index2 =  new ArrayList<>();
    ArrayList<Integer> index3 =  new ArrayList<>();
    ArrayList<Integer> indexdipai =  new ArrayList<>();

// 3.2.按照规则发索引

    for (int i = 0; i < indexlist.size(); i++) {
        Integer indexpai = indexlist.get(i);
        
        if (i >= indexlist.size()-3){   // 先发底牌
            indexdipai.add(indexpai);
        }else if (i%3==0){
            index1.add(indexpai);
        }else if (i%3==1){
            index2.add(indexpai);
        }else {
            index3.add(indexpai);
        }
    }

// 3.3.对这4个存储索引的集合按照从小到大排序

    Collections.sort(indexdipai);

    Collections.sort(index1);

    Collections.sort(index2);
   
    Collections.sort(index3);

// 3.4.创建4个集合,分别用来存储3个玩家和底牌的牌面值

    ArrayList<String> play1 = new ArrayList<>();
    ArrayList<String> play2 = new ArrayList<>();
    ArrayList<String> play3 = new ArrayList<>();
    ArrayList<String> dipai = new ArrayList<>();

// 3.5.遍历排序之后的索引集合去扑克盒集合中取牌,然后添加到存储牌面值的4个结婚中

    for (Integer i1 : indexdipai) {
        dipai.add(pokes.get(i1));
    }
    for (Integer i2 : index1) {
        play1.add(pokes.get(i2));
    }
    for (Integer i3 : index2) {
        play2.add(pokes.get(i3));
    }
    for (Integer i4 : index3) {
        play3.add(pokes.get(i4));
    }

    System.out.println(dipai);
    System.out.println(play1);
    System.out.println(play2);
    System.out.println(play3);
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值