一个小的控制台项目,用于模拟斗地主洗牌和发牌,运行效果如下图所示。
主要的技术是Collections.shuffle方法和实现Comparator接口,还使用了一个静态内部类
第【1】次运行结果:
上家的
♠3 ♣3 ♥5 ♣5 ◇5 ♥6 ♠7 ◇8 ♠9 ◇9 ◇10 ♠J ◇J ♥Q ♠K ♥A ♣A
我的
♠4 ♥4 ◇4 ♠5 ♠6 ◇7 ♥8 ♥9 ♣9 ♠10 ♥J ♠Q ♣K ♠A ♠2 ◇2 小王
下家的
♥3 ◇3 ♣4 ♣6 ◇6 ♣7 ♠8 ♣8 ♥10 ♣10 ♣Q ◇Q ♥K ◇K ♥2 ♣2 大王
预留的3张:
♥7 ♣J ◇A
第【2】次运行结果:
上家的
♣3 ◇3 ♠4 ♥4 ♣7 ♠8 ◇8 ♣9 ♣10 ◇10 ♥J ◇Q ♣A ◇A ♥2 ♣2 ◇2
我的
♣4 ♥5 ◇5 ♥7 ♥8 ♣8 ♥9 ♥10 ♠J ♣J ◇J ♠Q ♥Q ♥K ♣K ♠A ♥A
下家的
♠3 ♥3 ◇4 ♠5 ♣5 ♠6 ♥6 ♣6 ♠7 ◇7 ♠9 ◇9 ♠10 ♠K ◇K 小王 大王
预留的3张:
♣Q ♠2 ◇6
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 模拟斗地主洗牌,发牌
*/
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
List<String> left = new ArrayList<>();
List<String> me = new ArrayList<>();
List<String> right = new ArrayList<>();
List<String> reserved = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
String[] values = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" };
String[] colors = { "♠", "♥", "♣", "◇" };
for (int i = 0; i < values.length; i++) {
for (int j = 0; j < colors.length; j++) {
list.add(colors[j] + values[i]);
}
}
// 添加大王和小王
list.add("小王");
list.add("大王");
// 将list的元素添加到map中,用以维护单张扑克牌的大小
for (int i = 0; i < list.size(); i++) {
map.put(list.get(i), i);
}
// 洗牌
Collections.shuffle(list);
// 发牌
for (int i = 0; i < list.size(); i++) {
if (i > 50) {
reserved.add(list.get(i));
} else if (i % 3 == 0) {
left.add(list.get(i));
} else if (i % 3 == 1) {
me.add(list.get(i));
} else if (i % 3 == 2) {
right.add(list.get(i));
}
}
// 每个人手里有什么牌
System.out.println("上家的");
// 创建一个比较器,对每个人手里的牌进行排序
Comparator<String> comparator = new Main.Comparator01(map);
// 进行排序
Collections.sort(left, comparator);
Collections.sort(me, comparator);
Collections.sort(right, comparator);
for (String string : left) {
System.out.print(string + " ");
}
System.out.println();
System.out.println("我的");
for (String string : me) {
System.out.print(string + " ");
}
System.out.println();
System.out.println("下家的");
for (String string : right) {
System.out.print(string + " ");
}
System.out.println();
System.out.println("预留的3张:");
for (String string : reserved) {
System.out.print(string + " ");
}
}
private static class Comparator01 implements Comparator<String> {
Map<String, Integer> map;
public Comparator01(Map<String, Integer> map) {
super();
this.map = map;
}
@Override
public int compare(String o1, String o2) {
// 每次比较的时候,都回去查表
Integer v1 = map.get(o1);
Integer v2 = map.get(o2);
return v1 - v2;
}
}
}