js实现斗牛
实现斗牛游戏的JavaScript代码
斗牛是一种流行的扑克游戏,玩家需要将手中的五张牌分成三张和两张两组,三张牌的点数之和必须是10的倍数(称为"有牛"),剩余两张牌的点数之和的个位数即为"牛几"(如7点称为"牛七")。若无法分成这样的组合,则为"无牛"。
以下是一个完整的JavaScript实现:
// 定义牌型
const cardValues = {
'A': 1, '2': 2, '3': 3, '4': 4, '5': 5,
'6': 6, '7': 7, '8': 8, '9': 9, '10': 10,
'J': 10, 'Q': 10, 'K': 10
};
// 计算牛几
function calculateBull(cards) {
// 转换牌为点数
const points = cards.map(card => cardValues[card]);
// 检查所有可能的三张组合
for (let i = 0; i < 3; i++) {
for (let j = i + 1; j < 4; j++) {
for (let k = j + 1; k < 5; k++) {
const sum = points[i] + points[j] + points[k];
if (sum % 10 === 0) {
// 计算剩余两张牌的点数和
const remainingSum = points.reduce((total, val, index) =>
(index === i || index === j || index === k) ? total : total + val, 0);
const bull = remainingSum % 10;
return bull === 0 ? '牛牛' : `牛${bull}`;
}
}
}
}
return '无牛';
}
// 示例使用
const hand1 = ['A', '2', '3', '4', '5']; // 无牛
const hand2 = ['J', 'Q', 'K', '10', 'A']; // 牛牛
const hand3 = ['5', '5', '10', 'J', '3']; // 牛三
console.log(calculateBull(hand1)); // 输出: 无牛
console.log(calculateBull(hand2)); // 输出: 牛牛
console.log(calculateBull(hand3)); // 输出: 牛三
实现说明
-
牌值定义:使用对象
cardValues定义了每张牌对应的点数,A为1点,J/Q/K为10点,其他牌按面值计算。 -
核心算法:通过三重循环检查所有可能的三张牌组合,判断是否存在三张牌点数和为10的倍数。
-
结果计算:找到符合条件的组合后,计算剩余两张牌的点数和,取个位数作为"牛几"的结果。若和为10的倍数则返回"牛牛"。
-
无牛情况:若所有三张牌组合都无法满足条件,则返回"无牛"。
扩展功能
可以添加以下功能增强游戏体验:
- 洗牌和发牌功能
- 多个玩家比较大小的逻辑
- 图形界面展示
这个实现提供了斗牛游戏的核心算法,可以直接在浏览器或Node.js环境中运行。







