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);
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章