【java筑基】斗地主小游戏——Collections工具类排序功能应用

简介: 【java筑基】斗地主小游戏——Collections工具类排序功能应用

1 排序操作

public class SortTest {
  public static void main(String[] args) {
    ArrayList nums = new ArrayList();
    nums.add(5);
    nums.add(54);
    nums.add(15);
    nums.add(1);
    nums.add(35);
    // [5, 54, 15, 1, 35]
    System.out.println(nums);
    Collections.reverse(nums);
    // [35, 1, 15, 54, 5]
    System.out.println(nums);
    Collections.sort(nums);
    //[1, 5, 15, 35, 54]
    System.out.println(nums);
    //每次随机排序
    Collections.shuffle(nums);
    System.out.println(nums);
  }
}

2 查找、替换操作

public class SearchTest {
  public static void main(String[] args) {
    ArrayList nums = new ArrayList();
    nums.add(2);
    nums.add(-5);
    nums.add(3);
    nums.add(0);
    System.out.println(nums);
    System.out.println(Collections.max(nums));
    Collections.replaceAll(nums, 0, 1);
    System.out.println(nums);
    Collections.sort(nums);
    System.out.println(nums);
  }
}

3 同步控制

    public class SynchronizedTest {
      public static void main(String[] args) {
        Collection c=Collections.synchronizedCollection(new ArrayList());
        List list=Collections.synchronizedList(new ArrayList());
      }
    }

4 设置不可变集合

    public class UnmodifiableTest {
      public static void main(String[] args) {
        // 创建空的、不可改变的对象
        List unmodifiableList = Collections.emptyList();
        Map scores = new HashMap();
        scores.put("语文", 99);
        scores.put("数学", 98);
        Map unmodifiableMap = Collections.unmodifiableMap(scores);
        // java.lang.UnsupportedOperationException
        // unmodifiableList.add("1");
        //unmodifiableMap.put("英语", 80);
      }
    }

5 斗地主小游戏

利用Collections工具类的排序操作可以写个斗地主游戏。当然这个简易版斗地主只是实现了洗牌、发牌功能。

    public class ShowHand {
      // 支持玩家数
      private final int PLAY_NUM = 3;
      private String[] types = { "方块", "草花", "红心", "黑桃" };
      private String[] values = { "2", "3", "4", "5", "6", "7", "8", "9", "10",
          "J", "Q", "K", "A" };
      // 每局游戏中桌上剩下的牌,其数量不确定,且增删频繁,用LinkedList存储
      private List<String> cards = new LinkedList<String>();
      private String[] players = new String[PLAY_NUM];
      // 玩家手中的牌
      private List<String>[] playersCards = new List[PLAY_NUM];
      /**
       * 初始化扑克牌,放入52张扑克牌 并且洗牌(随机排序)
       */
      public void initCards() {
        for (int i = 0; i < types.length; i++) {
          for (int j = 0; j < values.length; j++) {
            cards.add(types[i] + values[j]);
          }
        }
        Collections.shuffle(cards);
      }
      /**
       * 初始化玩家,分配姓名
       */
      public void initPlayers(String... names) {
        if (names.length > PLAY_NUM || names.length < 2) {
          System.out.println("玩家数不对");
          return;
        } else {
          for (int i = 0; i < names.length; i++) {
            players[i] = names[i];
          }
        }
      }
      /**
       * 初始化玩家手中扑克牌:每个玩家开始时手中扑克牌数量为null 程序使用长度为0的LinkedList表示
       */
      public void initPlayerCards() {
        for (int i = 0; i < players.length; i++) {
          if (players[i] != null && !players[i].equals("")) {
            playersCards[i] = new LinkedList<String>();
          }
        }
      }
      /**
       * 用于测试,输出全部桌上未派出扑克牌
       */
      public void showAllCards() {
        for (String card : cards) {
          System.out.println(card);
        }
      }
      /**
       * 派扑克牌
       * 
       * @param first
       *            最先派给谁
       */
      public void deliverCard(String first) {
        // first元素在数组中的下标
        int firstPos = ArrayUtils.indexOf(players, first) - 1;
        for (int i = firstPos; i < PLAY_NUM; i++) {
          if (players[i] != null) {
            playersCards[i].add(cards.get(0));
            cards.remove(0);
          }
        }
        for (int i = 0; i < firstPos; i++) {
          if (players[i] != null) {
            playersCards[i].add(cards.get(0));
            cards.remove(0);
          }
        }
      }
      /**
       * 输出玩家手上的扑克牌 
       */
      public void showPlayerCards() {
        for (int i = 0; i < PLAY_NUM; i++) {
          if (players[i] != null) {
            System.out.println(players[i] + ":");
            for (String card : playersCards[i]) {
              System.out.print(card + "\t");
            }
          }
          System.out.println();
        }
      }
      public static void main(String[] args) {
        ShowHand sh = new ShowHand();
        sh.initPlayers("小白", "小黄", "小黑");
        sh.initCards();
        sh.initPlayerCards();
        sh.showAllCards();
        System.out.println("----------");
        sh.deliverCard("小黄");
        sh.showPlayerCards();
        sh.deliverCard("小黑");
        sh.showPlayerCards();
      }
    }


目录
打赏
0
0
0
0
4
分享
相关文章
|
21天前
|
Java 反射:从原理到实战的全面解析与应用指南
本文深度解析Java反射机制,从原理到实战应用全覆盖。首先讲解反射的概念与核心原理,包括类加载过程和`Class`对象的作用;接着详细分析反射的核心API用法,如`Class`、`Constructor`、`Method`和`Field`的操作方法;最后通过动态代理和注解驱动配置解析等实战场景,帮助读者掌握反射技术的实际应用。内容翔实,适合希望深入理解Java反射机制的开发者。
71 13
|
19天前
|
Java 8 + 中 Lambda 表达式与 Stream API 的应用解析
摘要:本文介绍了Java 8+核心新特性,包括Lambda表达式与Stream API的集合操作(如过滤统计)、函数式接口的自定义实现、Optional类的空值安全处理、接口默认方法与静态方法的扩展能力,以及Java 9模块化系统的组件管理。每个特性均配有典型应用场景和代码示例,如使用Stream统计字符串长度、Optional处理Map取值、模块化项目的依赖声明等,帮助开发者掌握现代Java的高效编程范式。(150字)
38 1
Java 大视界 —— Java 大数据在智慧交通停车场智能管理与车位预测中的应用实践(174)
本文围绕 Java 大数据在智慧交通停车场智能管理与车位预测中的应用展开,深入剖析行业痛点,系统阐述大数据技术的应用架构,结合大型体育中心停车场案例,展示系统实施过程与显著成效,提供极具实操价值的技术方案。
Java 大视界 ——Java 大数据在智能供应链库存优化与成本控制中的应用策略(172)
本文围绕 Java 大数据在智能供应链库存优化与成本控制中的应用展开,剖析库存管理现状与挑战,阐述大数据技术应用策略,结合真实案例与代码给出实操方案,助力企业提升库存管理效能,降低运营成本。
从基础语法到实战应用的 Java 入门必备知识全解析
本文介绍了Java入门必备知识,涵盖开发环境搭建、基础语法、面向对象编程、集合框架、异常处理、多线程和IO流等内容,结合实例帮助新手快速掌握Java核心概念与应用技巧。
15 0
Java 大视界 —— 基于 Java 的大数据分布式计算在气象数据处理与天气预报中的应用进展(176)
本文围绕基于 Java 的大数据分布式计算在气象数据处理与天气预报中的应用展开,剖析行业现状与挑战,阐释技术原理,介绍其在数据处理及天气预报中的具体应用,并结合实际案例展示实施效果。
【Azure Container App】构建Java应用镜像时候遇无法编译错误:ERROR [build 10/10] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package
在部署Java应用到Azure Container App时,构建镜像过程中出现错误:“./mvnw.cmd: No such file or directory”。尽管项目根目录包含mvnw和mvnw.cmd文件,但依然报错。问题出现在Dockerfile构建阶段执行`./mvnw dependency:go-offline`命令时,系统提示找不到可执行文件。经过排查,确认是mvnw文件内容异常所致。最终通过重新生成mvnw文件解决该问题,镜像成功构建。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问