Collections類操作集合模擬鬥地主
阿新 • • 發佈:2020-12-11
通過操作Collections類模擬鬥地主
首先先定義牌的數字和花色,使用hashmap來定義牌,使用arraylist來定義三個玩家的牌以及底牌。
String[] colors = {"♣","♦","♠","♥"};
String[] numbers = {"3","4","5","6","7","8","9","10","J","Q" ,"K","A","2"};
Map<Integer,String> pai = new HashMap<Integer, String>();
String[] colors = {"♣","♦","♠","♥"};
String[] numbers = {"3","4","5","6","7","8","9" ,"10","J","Q","K","A","2"};
Map<Integer,String> pai = new HashMap<Integer, String>();
List<Integer> xuhao = new ArrayList<Integer>();
List<String> player1 = new ArrayList<String>();
List<String> player2 = new ArrayList<String>();
List<String> player3 = new ArrayList<String>();
List<String> dipai = new ArrayList<String>();
然後將牌放進牌盒裡
int index = 0;
for(String s1:colors) {
for(String s2:numbers) {
pai.put(index, s1+s2);
xuhao.add(index);
index++;
}
}
然後進行牌的打亂
接著進行發牌
for(int i = 0 ; i<pai.size() ; i++) {
if(i<3)
dipai.add(pai.get(xuhao.get(i)));
else if(i%3 == 0)
player1.add(pai.get(xuhao.get(i)));
else if(i%3 == 1)
player2.add(pai.get(xuhao.get(i)));
else if(i%3 == 2)
player3.add(pai.get(xuhao.get(i)));
}
最後進行看牌
static void Lookpai(List list) {
System.out.println(list);
}
System.out.print("一號選手的牌:");
Lookpai(player1);
System.out.print("二號選手的牌:");
Lookpai(player2);
System.out.print("三號選手的牌:");
Lookpai(player3);
System.out.print("底牌:");
Lookpai(dipai);
但是牌順序不是按升序,我們需要對它進行改進。
我們使用TreeSet表示玩家的牌和底牌,並使用通過打亂序號list,而牌hash的順序不打亂。通過序號來訪問牌得到有順序牌。
TreeSet<Integer> player1 = new TreeSet<Integer>();
TreeSet<Integer> player2 = new TreeSet<Integer>();
TreeSet<Integer> player3 = new TreeSet<Integer>();
TreeSet<Integer> dipai = new TreeSet<Integer>();
TreeSet會自動按升序處理,得到的序號就是有序的。
ollections.shuffle(xuhao);
for(int i = 0 ; i<pai.size() ; i++) {
if(i<3)
dipai.add(xuhao.get(i));
else if(i%3 == 0)
player1.add(xuhao.get(i));
else if(i%3 == 1)
player2.add(xuhao.get(i));
else if(i%3 == 2)
player3.add(xuhao.get(i));
}
最後通過序號來訪問hash表中的牌
static void Lookpai(TreeSet<Integer> set,HashMap<Integer, String> pai) {
for(Integer x:set) {
System.out.print(pai.get(x)+" ");
}
System.out.println();
}
輸出結果:
最後的最後!!!
乾飯!!!!!