java練習:模擬試下你鬥地主的洗牌、發牌、看牌功能
阿新 • • 發佈:2019-02-16
/** * 需求:模擬實現鬥地主的分牌情形 * 分析: 1 模擬牌盒,儲存54張牌,0-53 每個數字分別對應一張牌,用Map儲存 * 2 將0-53序號隨機分發到三個人手中,欲實現序號的隨機排序,考慮使用Collections.shuffle() * 因此序號使用ArrayList儲存 * 3 看牌,並且實現玩家手上的拍由小到大排序,所以考慮使用TreeSet儲存 */ package fmi1; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.TreeSet; public class PokerSimulate { /** * @param args */ public static void main(String[] args) { //建立牌盒 String[] color = {"♦","♣","♥","♠"};//花色 String[] size ={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//大小 //建立集合存牌 HashMap<Integer, String> hm = new HashMap<Integer,String>(); //迴圈組牌並存至集合 int key = 0; for(String s1:size){ for(String s2:color){ String value = s2 + s1; hm.put(key, value); key++; } } hm.put(key++, "LKing"); hm.put(key, "BKing"); //輸出牌 printPoke(hm); //建立ArrayList實現牌的序號的隨機分佈 ArrayList<Integer> al = new ArrayList<Integer>(); //存序號 for(int i = 0;i < 54;i++){ al.add(i); } //洗牌 Collections.shuffle(al); //新建3個玩家和一個底牌,即TreeSet集合 TreeSet<Integer> gamer1 = new TreeSet<Integer>(); TreeSet<Integer> gamer2 = new TreeSet<Integer>(); TreeSet<Integer> gamer3 = new TreeSet<Integer>(); TreeSet<Integer> dipai = new TreeSet<Integer>(); //發牌 for(int i = 0;i<al.size();i++){ if(i >= al.size()-3) dipai.add(al.get(i)); else if(i%3==0) gamer1.add(al.get(i)); else if(i%3==1) gamer2.add(al.get(i)); else gamer3.add(al.get(i)); } // System.out.println(gamer1); // System.out.println(gamer2); // System.out.println(gamer3); // System.out.println(dipai); //看牌 System.out.println("玩家1:"); checkPoker(gamer1,hm); System.out.println("玩家2:"); checkPoker(gamer2,hm); System.out.println("玩家3:"); checkPoker(gamer3,hm); System.out.println("底牌:"); checkPoker(dipai,hm); } private static void checkPoker(TreeSet<Integer> gamer, HashMap<Integer, String> hm) { for(int key:gamer){ // System.out.print(key+" "); System.out.print(hm.get(key)+" "); } System.out.println(); } private static void printPoke(HashMap<Integer, String> hm) { System.out.print("撲克牌:"); for (int i = 0; i < hm.size(); i++) { if (i % 4 == 0) System.out.println(); System.out.print(hm.get(i) + "\t"); } System.out.println(); } }
執行結果
撲克牌: ♦3 ♣3 ♥3 ♠3 ♦4 ♣4 ♥4 ♠4 ♦5 ♣5 ♥5 ♠5 ♦6 ♣6 ♥6 ♠6 ♦7 ♣7 ♥7 ♠7 ♦8 ♣8 ♥8 ♠8 ♦9 ♣9 ♥9 ♠9 ♦10 ♣10 ♥10 ♠10 ♦J ♣J ♥J ♠J ♦Q ♣Q ♥Q ♠Q ♦K ♣K ♥K ♠K ♦A ♣A ♥A ♠A ♦2 ♣2 ♥2 ♠2 LKing BKing 玩家1: ♣3 ♦4 ♠5 ♦6 ♣7 ♥7 ♠7 ♦9 ♣10 ♠J ♣Q ♥Q ♦K ♦A ♦2 ♠2 LKing 玩家2: ♦3 ♥3 ♠4 ♦5 ♣6 ♦8 ♣9 ♥9 ♥10 ♦J ♣J ♥J ♠Q ♣K ♣A ♥A ♣2 玩家3: ♠3 ♣4 ♥4 ♣5 ♥5 ♥6 ♦7 ♥8 ♠8 ♠9 ♦10 ♦Q ♥K ♠K ♠A ♥2 BKing 底牌: ♠6 ♣8 ♠10