斗牛众所周知的一款扑克牌游戏,其核心规则是需要对牌面进行计算出牛几或者牛牛的。我们看看程序上怎么去实现算法
首先,斗牛的规则是:
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};
这样就实现了一个基本的牛牛核心算法。可能有些还有同花牛,顺子牛,五小牛之类的。下次再补充哈。