记录一道有意思的题目
题目:
斗地主发牌器
♠ ,♥,♣,♦,大王
玩家1:17张
玩家2:17张
玩家3:17张
底牌3张
规则:
- 54张牌
- 将顺序打乱
- 三个人交替摸牌,每人17张,3张底牌
- 看牌,按照顺序将牌从大到小排序
- 用Map集合完成
分析:
- 准备牌
- 洗牌:
- 将每个人以及底牌设计为ArrayList,将最后三张,直接当做底牌,剩余的通过3取模依次发牌
- 发牌
- 看牌
代码实现:
/**
* cardsMap 本身不排序,使cards中的数字乱序,发牌后再各自排序,再将cards中的数字作为cardsMap中的键,获取对应的值
* 这样一来既做到了洗牌乱序,又做到了看牌时有序
*/
import java.util.*;
public class Test6 {
public static void main(String[] args) {
//生成54张牌
Map<Integer,String> cardsMap = getCardsMap();
//获取牌
ArrayList<Integer> cards = getCards();
//洗牌
Collections.shuffle(cards);
//发牌
ArrayList<ArrayList<Integer>> players = sendCards(cards);
//看牌
checkCards("陈刀仔",players.get(0),cardsMap);
checkCards("周星星",players.get(1),cardsMap);
checkCards("高进",players.get(2),cardsMap);
checkCards("底牌",players.get(3),cardsMap);
}
private static void checkCards(String name, ArrayList<Integer> arrayList, Map<Integer, String> cardsMap) {
System.out.print(name + ":");
for (Integer key: arrayList) {
String card = cardsMap.get(key);
System.out.print(card + " ");
}
System.out.println();
}
private static ArrayList<ArrayList<Integer>> sendCards(ArrayList<Integer> cards) {
ArrayList<ArrayList<Integer>> players = new ArrayList<ArrayList<Integer>>();
//三个人
ArrayList<Integer> player1 = new ArrayList<Integer>();
ArrayList<Integer> player2 = new ArrayList<Integer>();
ArrayList<Integer> player3 = new ArrayList<Integer>();
//底牌
ArrayList<Integer> lastCards = new ArrayList<Integer>();
//发牌
for(int i=0;i < cards.size();i++){
if (i < 3) {
//先发底牌
lastCards.add(cards.get(i));
}else if (i%3 == 0) {
player1.add(cards.get(i));
}else if (i%3 == 1) {
player2.add(cards.get(i));
}else if (i%3 == 2) {
player3.add(cards.get(i));
}
}
//排序
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
//底牌不需要洗
//放入大集合
players.add(player1);
players.add(player2);
players.add(player3);
players.add(lastCards);
return players;
}
private static ArrayList<Integer> getCards() {
ArrayList<Integer> cards = new ArrayList<Integer>();
for(int i=0;i < 54;i++){
cards.add(i);
}
return cards;
}
private static Map<Integer,String> getCardsMap() {
Map<Integer,String> cardsMap = new HashMap<Integer,String>();
//十三张牌
String[] numbers = new String[]{"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//4个花色
String[] colors = {"♠","♥","♣","♦"};
//大小王
cardsMap.put(0, "大王");
cardsMap.put(1, "小王");
//定义索引
int index = 2;
//剩下的52张按花色组合
for (String number : numbers) {
for (String color: colors) {
//将花色和数字进行组合放入map
cardsMap.put(index, color+ number);
index++;//索引自增
}
}
return cardsMap;
}
}
运行结果:
个人觉得这道题对集合和Map的理解考察的挺多的,遂予以记录