js实现斗牛
斗牛游戏规则简介
斗牛是一种流行的扑克游戏,玩法简单刺激。每位玩家发5张牌,通过计算点数确定胜负。牌面点数:A为1点,2-9为对应点数,10/J/Q/K为10点。任意3张牌之和为10的倍数时称为"有牛",剩余2张牌之和的个位数为牛数(10的倍数为牛牛)。

实现思路分析
- 创建一副扑克牌,包含52张标准牌
- 洗牌算法随机打乱牌序
- 给玩家发5张牌
- 计算牌型(无牛/有牛/牛牛)
- 比较多个玩家的牌型确定胜负
核心代码实现
// 创建一副扑克牌
function createDeck() {
const suits = ['♥', '♦', '♠', '♣'];
const ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];
const deck = [];
suits.forEach(suit => {
ranks.forEach(rank => {
deck.push({suit, rank});
});
});
return deck;
}
// 洗牌算法
function shuffleDeck(deck) {
for (let i = deck.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[deck[i], deck[j]] = [deck[j], deck[i]];
}
return deck;
}
// 计算牌面点数
function getCardValue(card) {
const rank = card.rank;
if (rank === 'A') return 1;
if (['10', 'J', 'Q', 'K'].includes(rank)) return 10;
return parseInt(rank);
}
// 判断牛型
function calculateBull(cards) {
const values = cards.map(getCardValue);
// 检查所有可能的3张组合
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 = values[i] + values[j] + values[k];
if (sum % 10 === 0) {
// 计算剩余2张牌的和
const otherSum = values.reduce((acc, val, idx) =>
(idx === i || idx === j || idx === k) ? acc : acc + val, 0);
const bull = otherSum % 10;
return bull === 0 ? '牛牛' : `牛${bull}`;
}
}
}
}
return '无牛';
}
// 示例使用
const deck = shuffleDeck(createDeck());
const playerCards = deck.slice(0, 5);
console.log('玩家牌:', playerCards);
console.log('牌型:', calculateBull(playerCards));
牌型比较规则
- 有牛牌型 > 无牛牌型
- 牛牛 > 其他有牛牌型
- 同为有牛时比较牛数大小(牛9 > 牛8)
- 牛数相同时比较最大单牌(K > Q > J > 10 > 9 > ... > A)
- 最大单牌相同比较花色(黑桃 > 红桃 > 梅花 > 方块)
进阶功能建议
- 添加多个玩家支持
- 实现自动比牌逻辑
- 增加下注系统
- 添加UI界面显示牌面和结果
- 实现游戏回合制流程
这个实现完整覆盖了斗牛游戏的核心逻辑,通过组合数学计算牌型,并提供了后续扩展的基础架构。可根据实际需求调整牌型判断算法或添加更多游戏规则。






