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

Java 實現斗地主發牌邏輯:54 張牌洗牌、三家各 17 張、留 3 張底牌

     編輯:程式設計疑難解答

核心邏輯

  1. 構建 54 張牌集合(含大小王)。
  2. Collections.shuffle 洗牌。
  3. 依次發牌:玩家 1、2、3 各 17 張,剩餘 3 張為底牌。
  4. 指定地主(可隨機或按規則)。

完整代碼

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("🃏"); // 大王(可區分顏色)

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

        // 3. 發牌
        List p1 = new ArrayList<>(), p2 = new ArrayList<>(), p3 = new ArrayList<>();
        for (int i = 0; i < 51; i++) {
            String card = deck.get(i);
            if (i % 3 == 0) p1.add(card);
            else if (i % 3 == 1) p2.add(card);
            else p3.add(card);
        }
        List bottom = deck.subList(51, 54);

        // 4. 排序輔助(可選)
        Comparator cardOrder = (a, b) -> rankValue(a) - rankValue(b);
        p1.sort(cardOrder); p2.sort(cardOrder); p3.sort(cardOrder); bottom.sort(cardOrder);

        // 5. 輸出
        System.out.println("玩家1(" + p1.size() + "): " + p1);
        System.out.println("玩家2(" + p2.size() + "): " + p2);
        System.out.println("玩家3(" + p3.size() + "): " + p3);
        System.out.println("底牌(" + bottom.size() + "): " + bottom);
    }

    static int rankValue(String card) {
        if (card.contains("🃏")) return 100;
        String r = card.substring(1);
        if ("3456789".contains(r)) return r.charAt(0) - '0';
        if (r.equals("10")) return 10;
        if (r.equals("J")) return 11;
        if (r.equals("Q")) return 12;
        if (r.equals("K")) return 13;
        if (r.equals("A")) return 14;
        if (r.equals("2")) return 15;
        return 0;
    }
}

參考資源

CSDN 完整項目下載:斗地主發牌源碼

總結

用 `List` 模擬牌堆,`Collections.shuffle` 洗牌,取模分配,最後排序輸出,即可實現斗地主核心發牌邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved