【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();
      }
    }


相关文章
|
1月前
|
安全 架构师 Java
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
44 4
|
25天前
|
前端开发 Java 程序员
菜鸟之路day02-04拼图小游戏开发一一JAVA基础综合项目
本项目基于黑马程序员教程,涵盖面向对象进阶、继承、多态等知识,历时约24小时完成。项目去除了登录和注册模块,专注于单机游戏体验。使用Git进行版本管理,代码托管于Gitee。项目包含窗体搭建、事件监听、图片加载与打乱、交互逻辑实现、菜单功能及美化界面等内容。通过此项目,巩固了Java基础并提升了实际开发能力。 仓库地址:[https://gitee.com/zhang-tenglan/puzzlegame.git](https://gitee.com/zhang-tenglan/puzzlegame.git)
42 6
|
1月前
|
Java 程序员
Java 排序神器:Comparable 和 Comparator 该怎么选?
嗨,大家好,我是小米!今天和大家聊一聊Java社招面试中常考的经典问题——Comparable和Comparator的区别。Comparable定义对象的自然排序,适用于单一固定的排序规则;Comparator则是策略接口,用于定义自定义排序规则,适用于多样化或多变的排序需求。掌握这两者的区别是理解Java排序机制的基础,也是面试中的加分题。结合实际项目场景深入探讨它们的应用,能更好地打动面试官。如果你觉得有帮助,欢迎点赞、收藏、分享,期待你的一键三连!我们下期见~ 我是小米,一个喜欢分享技术的程序员,关注我的微信公众号“软件求生”,获取更多技术干货!
46 20
|
3月前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
115 17
|
4月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
224 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
4月前
|
存储 搜索推荐 算法
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
43 1
|
4月前
|
Java
Java 些许公共工具类
Java 些许公共工具类
27 1
|
6月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
6月前
|
存储 Java
Java中ArrayList 元素的排序
本文提供了Java中根据`ArrayList`元素的某个属性进行排序的示例代码,包括实现`Comparable`接口和重载`compareTo`方法,然后使用`Collections.sort`方法进行排序。
|
6月前
|
存储 Java

热门文章

最新文章