Java小练习——斗地主发牌

Java小练习——斗地主发牌

	这是自己在java学习中做的一个小练习,其中存在的问题欢迎大家批评指正。

使用面向对象思维模拟斗地主洗牌发牌的过程(熟悉list集合的使用)。下面主要介绍其中的一些方法,如果需要源码的话,可以自己去网盘下,提取码:v3cz。

初始化卡牌数组

创建54张牌的Card对象,放入list集合中。

	private String[] f = { "♠", "♣", "♥", "♦" };
//	private String[] f = { "黑桃", "梅花", "红心", "方块" };
	private String[] p = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" };
	private String[] b = { "小王", "大王" };
	private List<Card> cards = new ArrayList<Card>();

	/**
	 * 初始化卡牌数组
	 */
	private void initCards() {
		int id = 0;
		int value = -1;
		for (int i = 0; i < p.length; i++) {
			value = i;
			for (int j = 0; j < f.length; j++) {
				id++;
				cards.add(new NormalCard(id, p[i], value, f[j]));
			}
		}
		for (int i = 0; i < b.length; i++) {
			id++;
			value++;
			cards.add(new BossCard(id, value, b[i]));
		}
	}

洗牌

这里调用Collections类中的shuffle()方法,对卡牌数组中的元素进行打乱,模拟洗牌。这里我是调用了三次,没什么别的原因,主要是我愿意0.0。

	/**
	 * 洗牌
	 * 
	 * @param cards
	 */
	private void shuffleCards() {
		Collections.shuffle(cards);
		Collections.shuffle(cards);
		Collections.shuffle(cards);
	}

选地主

地主是随机选的,使用Random类随机(0,1,2)中的一个,然后选择对应的索引的玩家作为地主。

		private List<Player> players = new ArrayList<Player>() {
		{
			add(new Player(0, "yasuo", false, new ArrayList<Card>()));
			add(new Player(1, "lrelia", false, new ArrayList<Card>()));
			add(new Player(2, "Nicole", false, new ArrayList<Card>()));
		}
	};
	
	/**
	 * 选地主
	 */
	private void getBoss() {
		Random r = new Random();
		int a = r.nextInt(3);
		players.get(a).setBoss(true);
	}

发牌

发牌就是简单的条件判断语句,一人一张发,最后三张给地主。

	/**
	 * 发牌
	 */
	private void dealCard() {
		for (int i = 0; i < cards.size() - 3; i++) {
			if (i % 3 == 0) {
				players.get(0).getHandCards().add(cards.get(i));
			} else if (i % 3 == 1) {
				players.get(1).getHandCards().add(cards.get(i));
			} else {
				players.get(2).getHandCards().add(cards.get(i));
			}
		}
		for (Player player : players) {
			if (player.isBoss()) {
				for (int i = cards.size() - 3; i < cards.size(); i++) {
					player.getHandCards().add(cards.get(i));
				}
			}
		}
	}

排序

排序使用的是list集合中的sort方法,在实现comparator接口时使用的是lambda表达式。

	/**
	 * 排序
	 */
	private void sort() {
		for (Player player : players) {
			player.getHandCards().sort((c1,c2)->c2.getValue()-c1.getValue());;
		}
	}

运行结果

运行结果

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值