Java實現鬥地主遊戲

實現鬥地主遊戲,主要分爲:準備牌,洗牌,發牌,牌排序這四個步驟。

遊戲原理圖:

1.準備牌:
我們知道Java數組一旦創建就無法改變大小,而集合可以隨時改變,因此我們選型集合中的HashMap,利用鍵值對,一一對應(利用Map接口的HashMap類的鍵值對特性,利用鍵值來找到相應的value值)

/*
 * 1.準備牌:定義一個集合來存儲54張撲克牌
 * */
 // 創建map集合,鍵值對
 HashMap<Integer, String> pokers = new HashMap<>();
 // 創建List集合來存儲數字編號
 List<Integer> pokerNumber = new ArrayList<>();
 // 定義兩個數組或集合來分別存儲花色與數字
 String[] colors = {"♥","♣","♦","♠"};
 String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
 // 初始索引爲2,因爲大小王會佔據索引值0,1
 int index = 2;
 // 將兩組數組兩兩嵌套,組成一幅撲克牌
 for (String number:numbers) {
     for (String color:colors) {
         pokers.put(index,color+number);
         pokerNumber.add(index);
         index++;
     }
 }
 // 再把大王,小王存儲到pokers集合中,這就組成了一幅完整的牌了
 pokers.put(0,"redJoker");
 pokerNumber.add(0);
 pokers.put(1,"blackJoker");
 pokerNumber.add(1);

2.洗牌:

將完整的撲克牌就行洗牌,利用集合靜態方法Collections.shuffle(英文就有洗牌之意)
Collections.shuffle(pokerNumber);

3.發牌:

建立四個集合,分別存儲四個玩家的牌;遍歷pokers集合,獲取每一張牌;使用pokers集合的索引%3 個玩家輪流發牌;剩餘三張牌給底牌,注意:先判斷底牌索引(是否i>=51),否則牌就發完了。

  // 定義四個集合來存儲玩家的牌和底牌
   ArrayList<Integer> player1 = new ArrayList<Integer>();
   ArrayList<Integer> player2 = new ArrayList<Integer>();
   ArrayList<Integer> player3 = new ArrayList<Integer>();
   ArrayList<Integer> bottom = new ArrayList<Integer>();


   for(int i = 0;i<pokerNumber.size();i++){
       // 獲取每一張牌
       int p = pokerNumber.get(i);
       // 輪流發牌
       // 前三張作爲底牌
       if(i<3){
           bottom.add(p);
       }else if (i%3 == 0){
           player1.add(p);
       }else if (i%3 == 1){
           player2.add(p);
       }else {
           player3.add(p);
       }

   }

   // 對玩家手中的編號進行排序
   Collections.sort(player1);
   Collections.sort(player2);
   Collections.sort(player3);

5.排序玩家手中的牌:

    public static void look(String name,ArrayList<Integer> player,HashMap<Integer,String> pokers){
        System.out.print(name+":");
        // 遍歷ArrayList集合,獲取元素,作爲建,到Map集合中查找值
        for (Integer key:player) {
            String value = pokers.get(key);
            System.out.print(value+" ");
        }
        // 打印換行
        System.out.println();
    }

 /*
 * 4.看牌:就是將玩家手中的編號放到map集合中查找,根據鍵值對
 * */
 look("周潤發",player1, pokers);
 look("郭富城",player2, pokers);
 look("劉德華",player3, pokers);
 look("底牌",bottom, pokers);
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章