用JAVA实现简单的扑克牌洗牌发牌并排序,首先写代码之前需要明确需要分哪些步骤:
- 创建一个HashMap集合对象
- 创建一个ArrayList集合对象
- 生成一副扑克牌
- 将扑克牌按照键值关系添加到HashMap集合中
- 开始洗牌(洗键)
- 开始发牌(用TreeSet集合创建玩家对象)
- 创建看牌方法
- 调用看牌方法
我们首先要明确使用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 大王