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


相关文章
|
2月前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
76 17
|
3月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
161 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
3月前
|
存储 搜索推荐 算法
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
34 1
|
3月前
|
Java
Java 些许公共工具类
Java 些许公共工具类
20 1
|
5月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
5月前
|
存储 Java
Java中ArrayList 元素的排序
本文提供了Java中根据`ArrayList`元素的某个属性进行排序的示例代码,包括实现`Comparable`接口和重载`compareTo`方法,然后使用`Collections.sort`方法进行排序。
|
5月前
|
存储 Java API
【Java高手必备】揭秘!如何优雅地对List进行排序?掌握这几种技巧,让你的代码瞬间高大上!
【8月更文挑战第23天】本文深入探讨了Java中对List集合进行排序的各种方法,包括使用Collections.sort()、自定义Comparator以及Java 8的Stream API。通过示例代码展示了不同情况下如何选择合适的方法:从简单的整数排序到自定义类对象的排序,再到利用Comparator指定特殊排序规则,最后介绍了Stream API在排序操作中的简洁应用。理解这些技术的区别与应用场景有助于提高编程效率。
137 4
|
5月前
|
存储 Java
|
5月前
|
存储 Java
|
5月前
|
存储 搜索推荐 Java