当前位置:首页 > JavaScript

js实现斗牛

2026-03-15 12:23:54JavaScript

斗牛游戏规则简介

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

js实现斗牛

实现思路分析

  1. 创建一副扑克牌,包含52张标准牌
  2. 洗牌算法随机打乱牌序
  3. 给玩家发5张牌
  4. 计算牌型(无牛/有牛/牛牛)
  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));

牌型比较规则

  1. 有牛牌型 > 无牛牌型
  2. 牛牛 > 其他有牛牌型
  3. 同为有牛时比较牛数大小(牛9 > 牛8)
  4. 牛数相同时比较最大单牌(K > Q > J > 10 > 9 > ... > A)
  5. 最大单牌相同比较花色(黑桃 > 红桃 > 梅花 > 方块)

进阶功能建议

  1. 添加多个玩家支持
  2. 实现自动比牌逻辑
  3. 增加下注系统
  4. 添加UI界面显示牌面和结果
  5. 实现游戏回合制流程

这个实现完整覆盖了斗牛游戏的核心逻辑,通过组合数学计算牌型,并提供了后续扩展的基础架构。可根据实际需求调整牌型判断算法或添加更多游戏规则。

标签: js
分享给朋友:

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…