斗地主排序案例
按照斗地主的规则,完成洗牌发牌的动作。
具体规则:
1. 组装54张扑克牌
2. 将54张牌顺序打乱
3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
4. 查看三人各自手中的牌(按照牌的大小排序)、底牌
手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
public static void main(String[] args) {
//确立纸牌与数字的对应关系
Map<Integer, String> map = new HashMap<Integer, String>();
List<String> colors = new ArrayList<>();
List<String> numbers = new ArrayList<>();
colors.add("♣");
colors.add("♦");
colors.add("♠");
colors.add("♥");
Collections.addAll(numbers, "J", "Q", "K", "A", "2");
int cardNumber = 0;
for (String thisNumber : numbers) {
for (String thisColor : colors) {
String thisPoker = thisColor + thisNumber;
map.put(cardNumber, thisPoker);
cardNumber++;
}
}
//加入大小王对应关系
map.put(cardNumber++, "小☺");
map.put(cardNumber, "大☺");
System.out.println(map);
//准备牌
ArrayList<Integer> poker = new ArrayList<Integer>();
for (int i = 0; i < 54; i++) {
poker.add(i);
}
//打乱顺序
Collections.shuffle(poker);
//发牌:
//将每个人以及底牌设计为ArrayList<Integer>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
ArrayList<Integer> player01 = new ArrayList<Integer>();
ArrayList<Integer> player02 = new ArrayList<Integer>();
ArrayList<Integer> player03 = new ArrayList<Integer>();
ArrayList<Integer> dipai = new ArrayList<Integer>();
for (int index = 0; index < poker.size() - 3; index++) {
//通过索引,获取代表牌的数字
Integer integerCard = poker.get(index);
//对3取模判断发给哪个玩家
if (index % 3 == 0) {
player01.add(integerCard);
} else if (index % 3 == 1) {
player02.add(integerCard);
} else {
player03.add(integerCard);
}
}
//最后3张是底牌
for (int index = poker.size() - 3; index < poker.size(); index++) {
//获取当前这张牌
Integer integerCard = poker.get(index);
dipai.add(integerCard);
}
//将所有集合排序Collections类的sort方法进行排序
Collections.sort(player01);
Collections.sort(player02);
Collections.sort(player03);
Collections.sort(dipai);
//看牌
for (int i = player01.size() - 1; i >= 0; i--) {
Integer integer = player01.get(i);
String realCard = map.get(integer);
System.out.print(realCard + " ");
}
System.out.println();
for (int j = player02.size() - 1; j >= 0; j--) {
Integer integer = player02.get(j);
String realCard = map.get(integer);
System.out.print(realCard + " ");
}
System.out.println();
for (int k = player03.size() - 1; k >= 0; k--) {
Integer integer = player03.get(k);
String realCard = map.get(integer);
System.out.print(realCard + " ");
}
System.out.println();
for (Integer integer : dipai) {
String realCard = map.get(integer);
System.out.print(realCard + " ");
}
//Ps:关键就是将牌的大小和数字对应起来,这样就确立了牌大小,也容易排序
6.14