【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
分享
相关文章
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
76 4
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
640 12
|
4月前
|
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
163 34
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
167 60
|
5月前
|
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
147 17
|
5月前
|
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
80 2
|
10月前
|
排名前16的Java工具类
排名前16的Java工具类
68 0
排名前16的Java工具类
排名前16的Java工具类
212 0
排名前 16 的 Java 工具类,哪个你没用过?
在Java中,实用程序类是定义一组执行通用功能的方法的类。 这篇文章展示了最常用的Java实用工具类及其最常用的方法。类列表及其方法列表均按受欢迎程度排序。数据基于从GitHub随机选择的50,000个开源Java项目。 希望您可以通过浏览列表来了解

热门文章

最新文章

AI助理

你好,我是AI助理

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