前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【java筑基】斗地主小游戏——Collections工具类排序功能应用

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

作者头像
用户10127530
发布2022-10-26 18:40:41
2520
发布2022-10-26 18:40:41
举报
文章被收录于专栏:半旧的技术栈半旧的技术栈

前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:深入、全面、系统的介绍java的基础知识 🌰 文章简介:本文将石头Collections工具类实现一个简单的斗地主小游戏,建议收藏备用,创作不易,敬请三连哦 🍎大厂真题:大厂面试真题大全

文章目录

1 排序操作

代码语言:javascript
复制
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 查找、替换操作

代码语言:javascript
复制
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 同步控制

代码语言:javascript
复制
    public class SynchronizedTest {
    	public static void main(String[] args) {
    		Collection c=Collections.synchronizedCollection(new ArrayList());
    		List list=Collections.synchronizedList(new ArrayList());
    	}
    }

4 设置不可变集合

代码语言:javascript
复制
    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工具类的排序操作可以写个斗地主游戏。当然这个简易版斗地主只是实现了洗牌、发牌功能。

![在这里插入图片描述] (https://img-blog.csdnimg.cn/d60cbda6e9a34956b0e9ce7cbb0323e5.png)

代码语言:javascript
复制
    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();
    	}
    }

这篇文章就介绍到这里了。

“工欲善其事,必先利其器”。要想成为工作上的高手,面试时的题霸,独步江湖,就必须拿到一份"武林秘籍"。

在这里插入图片描述
在这里插入图片描述

我个人强推牛客网:找工作神器|大厂java面经汇总|超全笔试题库

推荐理由: 1.刷题题库,题目特别全面,刷爆笔试再也不担心

在这里插入图片描述
在这里插入图片描述

链接: 找工作神器|大厂java面经汇总|超全笔试题库 2.超全面试题、成体系、高质量,还有AI模拟面试黑科技

在这里插入图片描述
在这里插入图片描述

链接: 工作神器|大厂java面经汇总|超全笔试题库 3.超多面经,大厂面经很多

在这里插入图片描述
在这里插入图片描述

4.内推机会,大厂招聘特别多

在这里插入图片描述
在这里插入图片描述

链接: 找工作神器|大厂java面经汇总|超全笔试题库 5.大厂真题,直接拿到大厂真实题库,而且和许多大厂都有直接合作,题目通过率高有机会获得大厂内推资格。

在这里插入图片描述
在这里插入图片描述

链接: 找工作神器|大厂java面经汇总|超全笔试题库

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1 排序操作
  • 2 查找、替换操作
  • 3 同步控制
  • 4 设置不可变集合
  • 5 斗地主小游戏
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档