使用JavaSE來模擬鬥地主

通過模擬鬥地主案例來練習集合的使用

結果預覽:

每次發牌後,三位玩傢的手牌是隨機的並且已經按照手牌大小排完序,運行兩次驗證手牌的隨機性。

馬老師的牌還不錯,蕪湖~起飛

思路:

1.創建HashMap,鍵是編號,值是牌。
2.創建ArrayList,存儲編號。
3.創建花色數組和點數數組。
4.從0開始往HashMap裡面存儲編號,並存儲對應的牌。同時往ArrayList裡面存儲編號。
5.洗牌(洗的是編號),用Collections的shuffl()方法實現。
6.發牌(發的也是編號,為瞭保證編號是排序的,創建TreeSet集合。
7.定義方法看牌(遍歷TreeSet集合,獲取編號,到HashMap集合找對應的牌)
8.調用看牌方法

為瞭方便理解,我用圖形的方式來描述下過程:

具體代碼實現:

1.創建集合裝撲克牌

 
//創建HashMap集合   key是編號用Integer  value是牌用String
            HashMap<Integer,String>  hm=new HashMap<>();
            //創建ArrayList集合用來存儲編號
            ArrayList<Integer> list=new ArrayList<>();
            //創建花色數組和點數數組
            String [] color={"♠", "♦", "♥","♣"};
            String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
            //從0開始往HashMap集合裡面存儲編號,並存儲對應的牌。同時往ArrayList集合裡面存儲編號
            int index=0;
            //增強For循環存儲花色和點數
            for(String num:number){
                for(String col:color){

                    hm.put(index,col+num);
                    list.add(index);
                    index++;
                }
            }
           //52張牌存完瞭 還剩大小王  現在添加進去
            hm.put(index,"小王");
            list.add(index);
            index++;
            hm.put(index,"大王");
            list.add(index);

            //以上的操作實現瞭把54張撲克牌放入一個集合容器。
            

2.洗牌和發牌

   //洗牌(洗的是編號),用collections的shuffle()方法實現。
            Collections.shuffle(list);
            //發牌  用TreeSet接收  用三位玩傢名字命名
            TreeSet<Integer> PDD=new TreeSet<>();
            TreeSet<Integer> DaSiMa=new TreeSet<>();
            TreeSet<Integer> LuBenWei=new TreeSet<>();
            //三張底牌
            TreeSet<Integer> finalCard=new TreeSet<>();
            for(int x=0;x<list.size();x++){
                //定義一個變量接收索引
                int  a= list.get(x);
                //最後三個索引
                if(x>=list.size()-3){
              finalCard.add(a);
                }else if(x%3 == 0){
                    PDD.add(a);
                }else if(x%3 == 1){
                    DaSiMa.add(a);
                }else {
                    LuBenWei.add(a);
                }
            }

3.定義看牌方法

      //定義看牌的方法(遍歷TreeSet集合,獲取編號,到HashMap集合找對應的牌)
        public  static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String>  hm ){
            System.out.print(name+"的手牌為:");
            //遍歷牌 就是遍歷索引
            for(Integer key:ts){

                String poker = hm.get(key);
                System.out.print(poker+" ");
            }
            System.out.println();
        }

原碼:

    package 模擬鬥地主;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.TreeSet;
    /*需求:
        通過程序實現 鬥地主過程中的洗牌,發牌和看牌功能,並且為瞭方便看牌手牌要排序。
        思路:
        1:創建HashMap集合,鍵是編號,值是牌。
        2:創建Arraylist集合用於存儲編號。
        3:創建花色數組和點數數組。
        4:從0開始往HashMap集合裡面存儲編號,並存儲對應的牌。同時往ArrayList集合裡面存儲編號。
        5 :洗牌(洗的是編號),用collections的shuffle()方法實現。
        6:發牌(發的也是編號,為瞭保證編號是排序的,創建TreeSet集合接收
        7:定義方法看牌(遍歷TreeSet集合,獲取編號,到HashMap集合找對應的牌)
        8:調用方法看牌
        */
    public class ChinesePoker {
        public static void main(String[] args) {
            //創建HashMap集合   key是編號用Integer  value是牌用String
            HashMap<Integer,String>  hm=new HashMap<>();
            //創建ArrayList集合用來存儲編號
            ArrayList<Integer> list=new ArrayList<>();
            //創建花色數組和點數數組
            String [] color={"♠", "♦", "♥","♣"};
            String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
            //從0開始往HashMap集合裡面存儲編號,並存儲對應的牌。同時往ArrayList集合裡面存儲編號
            int index=0;
            //增強For循環存儲花色和點數
            for(String num:number){
                for(String col:color){

                    hm.put(index,col+num);
                    list.add(index);
                    index++;
                }
            }
           //52張牌存完瞭 還剩大小王  現在添加進去
            hm.put(index,"小王");
            list.add(index);
            index++;
            hm.put(index,"大王");
            list.add(index);
            //洗牌(洗的是編號),用collections的shuffle()方法實現。
            Collections.shuffle(list);
            //發牌  用TreeSet接收  用三位玩傢名字命名
            TreeSet<Integer> PDD=new TreeSet<>();
            TreeSet<Integer> DaSiMa=new TreeSet<>();
            TreeSet<Integer> LuBenWei=new TreeSet<>();
            //三張底牌
            TreeSet<Integer> finalCard=new TreeSet<>();
            for(int x=0;x<list.size();x++){
                //定義一個變量接收索引
                int  a= list.get(x);
                //最後三個索引
                if(x>=list.size()-3){
              finalCard.add(a);
                }else if(x%3 == 0){
                    PDD.add(a);
                }else if(x%3 == 1){
                    DaSiMa.add(a);
                }else {
                    LuBenWei.add(a);
                }
            }
            //調用看牌方法
            lookPoker("PDD",PDD,hm);
            lookPoker("大司馬",DaSiMa,hm);
            lookPoker("盧本偉",LuBenWei,hm);
            lookPoker("底牌",finalCard,hm);
        }

            //定義看牌的方法(遍歷TreeSet集合,獲取編號,到HashMap集合找對應的牌)
        public  static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String>  hm ){
            System.out.print(name+"的手牌為:");
            //遍歷牌 就是遍歷索引
            for(Integer key:ts){

                String poker = hm.get(key);
                System.out.print(poker+" ");
            }
            System.out.println();
        }
    }

以上就是使用JavaSE來模擬鬥地主的詳細內容,更多關於JavaSE鬥地主的資料請關註WalkonNet其它相關文章!

推薦閱讀:

    None Found