鬥牛/牛牛經典算法java版

鬥牛衆所周知的一款撲克牌遊戲,其核心規則是需要對牌面進行計算出牛幾或者牛牛的。我們看看程序上怎麼去實現算法

首先,鬥牛的規則是:

1.一副牌,去掉兩個王,總共52張牌,2-6個人玩,每人發5張牌。

2.5張牌中的任意3張加起來不能成爲10的倍數(如5,6,8,10,J)則是 無牛

3.張牌中的任意3張加起來爲10的倍數,但另外2張不爲10的倍數。至於到底是牛幾,就要看另外2張牌相加之後的個位數。(如5,6,7,9,J 爲牛7)

4.5張牌中的任意3張加起來爲10的倍數,且另外2張也爲10的倍數(如5,6,9,10,J)。

 弄清除基本規則後,直接上代碼,代碼中有註釋。

public static String syncBull(Integer[] cards) {
        // 計算總點數
        int sums = 0;
        for (int i = 0; i < cards.length; i++) {
            if (cards[i] > 10) {
                cards[i] = 10;
            }
            sums += cards[i];
        }
        //牛牛
        if (sums % 10 == 0) {
            return "牛牛🐮";
        }
        // 牛丁 ~ 牛九
        int bull = 0;
        for (int i = 0; i < cards.length - 2; i++) {
            int cardI = cards[i];
            for (int j = i + 1; j < cards.length; j++) {
                int cardJ = cards[j];
                for (int k = j + 1; k < cards.length; k++) {
                    int cardK = cards[k];
                    int total = cardI + cardJ + cardK;
                    if (total % 10 == 0) {
                        int n = (sums - total) % 10;
                        bull = bull < n ? n : bull;
                    }
                }
            }
        }
        if (bull == 0) {
            return "無牛🐮";
        } else {
            return "牛" + bull + "🐮";
        }
    }
輸入爲一個數組,即是五張牌。

Integer[] cards = new Integer[]{5, 4, 11, 10, 12};

這樣就實現了一個基本的牛牛核心算法。可能有些還有同花牛,順子牛,五小牛之類的。下次再補充哈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章