用JAVA实现简单的扑克牌洗牌发牌并排序

用JAVA实现简单的扑克牌洗牌发牌并排序,首先写代码之前需要明确需要分哪些步骤:

  1. 创建一个HashMap集合对象
  2. 创建一个ArrayList集合对象
  3. 生成一副扑克牌
  4. 将扑克牌按照键值关系添加到HashMap集合中
  5. 开始洗牌(洗键)
  6. 开始发牌(用TreeSet集合创建玩家对象)
  7. 创建看牌方法
  8. 调用看牌方法

我们首先要明确使用HashMap集合来存放扑克牌,将索引号作为键,而扑克牌作为值,使之对应。所以一开始要做的是创建HashMap对象和ArrayList对象,也就是我们的第一步:

1.创建一个HashMap集合对象和ArrayList集合对象

	//创建一个HashMap集合对象
	HashMap<Integer, String> map  = new HashMap<Integer,String>();
		
	//创建一个ArrayList集合对象
	ArrayList<Integer> array = new ArrayList<Integer>();

紧接着我们需要知道一副扑克牌里都有哪些花色和数字。

2.生成一副扑克牌

String[] colors = {"♦", "♣", "♥", "♠"};
String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

缺少了大小王,我们下面再说。现在应该将所有的牌放入HashMap集合中,并且生成键与扑克牌对应。

3.将扑克牌按照键值关系添加到HashMap集合中

	int index = 0;//定义键
	for (String number : numbers) {
		for(String color : colors) {
			map.put(index, color + number);//将键与值对应起来
			array.add(index);//将索引也添加到ArrayList集合里,方便洗牌
			index++;
		}
	}
	//添加大小王(注意索引,大王的索引应该在小王之后)
	map.put(index, "小王");
	array.add(index);
	index++;
	map.put(index, "大王");
	array.add(index);

接着我们就可以开始对键随机排序了,这里我们用Collections。

4.开始洗牌(洗键)

Collections.shuffle(array);//随机排序的其实是ArrayList集合,因为它和HashMap集合的键是一样的

5.开始发牌(用TreeSet集合创建玩家对象)

	//用TreeSet集合会自动自然排序,也就是发到手里的牌会自动按照大小排好,当然这里也是通过索引排的
	TreeSet<Integer> player1 = new TreeSet<Integer>();
	TreeSet<Integer> player2 = new TreeSet<Integer>();
	TreeSet<Integer> player3 = new TreeSet<Integer>();
	TreeSet<Integer> dp = new TreeSet<Integer>();
	//对已经随机排序后的ArrayList集合开始遍历
	for(int i = 0;i<array.size();i++) {
		//这里的i是正常索引值,而array里已经是打乱的索引值了
		//所以通过正常的索引i取出array对应的元素
		Integer poker = array.get(i);
		//先留三张牌为底牌
		if(i >= array.size()-3) {
			dp.add(poker);
		//剩下的平均分给三个玩家
		}else if(i % 3 == 0) {
			player1.add(poker);
		}else if(i % 3 == 1) {
			player2.add(poker);
		}else if(i % 3 == 2) {
			player3.add(poker);
		}
	}

接着最后一步,我们需要创建一个看牌方法,最后再调用方法。

6.创建看牌方法

//创建看牌方法
	public static void lookpoker(String name,TreeSet<Integer> list,HashMap<Integer, String> map) {
		System.out.print(name+"的牌是:");
		//遍历每一个玩家分到的索引,再将索引做键来取牌
		for (Integer out : list) {
			System.out.print(map.get(out)+" ");
		}
		System.out.println();
	}

最后的最后,来调用方法

	//调用看牌方法
	lookpoker("玩家一", player1, map);
	lookpoker("玩家二", player2, map);
	lookpoker("玩家三", player3, map);
	lookpoker("底牌", dp, map);

最终运行代码出来的结果就是

//玩家一的牌是:♣2 ♥4 ♥5 ♥6 ♦7 ♠7 ♣8 ♠8 ♥9 ♣10 ♥10 ♠10 ♣Q ♦K ♣K ♠K ♣A 
//玩家二的牌是:♠2 ♦3 ♣3 ♥3 ♣4 ♦6 ♠6 ♥7 ♦8 ♥8 ♠9 ♦10 ♦J ♦Q ♦A ♥A 小王 
//玩家三的牌是:♦2 ♥2 ♠3 ♠4 ♦5 ♣5 ♠5 ♣6 ♣7 ♦9 ♣J ♥J ♠J ♥Q ♠Q ♥K ♠A 
//底牌的牌是:♦4 ♣9 大王 
  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值