程序实现斗牛js

斗牛游戏规则简介
斗牛是一种流行的扑克游戏,玩家需要将手中的五张牌分成三张和两张两组,三张牌之和为10的倍数(即“有牛”),剩余两张牌之和的个位数即为牛数(如牛7、牛8等)。若无法分成10的倍数,则为“无牛”。

核心算法实现
以下是一个用JavaScript实现斗牛游戏逻辑的代码示例,包含发牌、计算牛数及判断胜负的功能:
// 生成一副扑克牌(不含大小王)
function createDeck() {
const suits = ['♥', '♦', '♠', '♣'];
const values = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];
const deck = [];
for (const suit of suits) {
for (const value of values) {
deck.push({ suit, value });
}
}
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;
}
// 计算牌的点数(A为1,JQK为10)
function getCardValue(card) {
const value = card.value;
if (['J', 'Q', 'K'].includes(value)) return 10;
if (value === 'A') return 1;
return parseInt(value);
}
// 判断牛数
function calculateBull(cards) {
const values = cards.map(getCardValue);
// 遍历所有三张牌的组合
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) {
const remainingSum = values.reduce((acc, val, idx) =>
idx !== i && idx !== j && idx !== k ? acc + val : acc, 0);
const bull = remainingSum % 10;
return bull === 0 ? '牛牛' : `牛${bull}`;
}
}
}
}
return '无牛';
}
// 示例使用
const deck = shuffleDeck(createDeck());
const playerCards = deck.slice(0, 5);
console.log('玩家牌:', playerCards);
console.log('结果:', calculateBull(playerCards));
功能扩展建议
- 多人游戏逻辑:可扩展为支持多个玩家比较牛数大小,牛数相同则比较最大单牌。
- 特殊牌型:增加“五花牛”(全为JQK)、“炸弹牛”(四张相同点数)等特殊牌型判断。
- 界面交互:使用HTML/CSS构建可视化界面,展示发牌过程和结果。
注意事项
- 牌值计算时需注意A为1点,J/Q/K为10点。
- 若三张牌之和为10的倍数且剩余两张之和也为10的倍数,称为“牛牛”。
- 无牛时需比较所有五张牌中最大的单牌决定胜负。
该实现覆盖了斗牛的核心规则,可根据实际需求进一步扩展交互或多人对战功能。






