首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 實現鬥地主發牌邏輯:54 張牌洗牌分發 17 張留 3 張底牌

     編輯:程式設計疑難解答

核心邏輯

  1. 建立 54 張牌集合(含大小王)。
  2. 洗牌(`Collections.shuffle`)。
  3. 發牌:輪流給 3 位玩家各 17 張,剩 3 張為底牌。

完整代碼範例

import java.util.*;

public class DouDizhuDeal {
    public static void main(String[] args) {
        // 1. 生成牌
        List deck = new ArrayList<>();
        String[] suits = {"♠", "♥", "♣", "♦"};
        String[] ranks = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        for (String s : suits)
            for (String r : ranks)
                deck.add(s + r);
        deck.add("🃏"); // 小王
        deck.add("🃏"); // 大王(或用 Joker1/Joker2 区分)

        // 2. 洗牌
        Collections.shuffle(deck);

        // 3. 發牌
        List p1 = new ArrayList<>(), p2 = new ArrayList<>(), p3 = new ArrayList<>(), dipai = new ArrayList<>();
        for (int i = 0; i < deck.size(); i++) {
            if (i < 51) {
                switch (i % 3) {
                    case 0: p1.add(deck.get(i)); break;
                    case 1: p2.add(deck.get(i)); break;
                    case 2: p3.add(deck.get(i)); break;
                }
            } else {
                dipai.add(deck.get(i));
            }
        }

        // 4. 排序展示(按權重大小)
        Comparator cardOrder = (a, b) -> weight(a) - weight(b);
        p1.sort(cardOrder); p2.sort(cardOrder); p3.sort(cardOrder); dipai.sort(cardOrder);

        System.out.println("玩家1: " + p1);
        System.out.println("玩家2: " + p2);
        System.out.println("玩家3: " + p3);
        System.out.println("底牌: " + dipai);
    }

    static int weight(String card) {
        if (card.contains("🃏")) return card.equals("🃏") ? 100 : 101; // 簡化
        String rank = card.substring(1);
        String order = "345678910JQKA2";
        return order.indexOf(rank);
    }
}

關鍵點

  • `Collections.shuffle` 使用 Fisher-Yates 洗牌,隨機均勻。
  • 發牌用取模分配,保證平均。
  • 排序需定義牌權重(3 最小,2 最大,王最大)。
  • 實際遊戲還需加入叫地主、出牌驗證等邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved