当前位置:首页 > JavaScript

js实现斗牛

2026-04-07 05:50:44JavaScript

实现斗牛游戏的基本逻辑

斗牛游戏的核心是计算5张牌的点数,判断是否有"牛"以及牛的大小。牌面点数计算规则:A为1点,2-9为对应点数,10/J/Q/K为10点。任意3张牌之和为10的倍数时,剩余2张牌之和的个位数即为"牛几"(若为0则为"牛牛")。

牌组初始化与洗牌

使用数组表示一副扑克牌,包含52张标准牌(不含大小王)。通过Fisher-Yates算法实现随机洗牌。

js实现斗牛

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);
}

判断牛的组合

遍历所有可能的3张牌组合,检查是否存在和为10的倍数的组合。

js实现斗牛

function calculateBull(cards) {
  const values = cards.map(card => getCardValue(card));

  // 检查所有可能的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) {
          // 计算剩余两张牌的点数和
          const remainingSum = values.reduce((acc, val, idx) => 
            idx === i || idx === j || idx === k ? acc : acc + val, 0);
          const bull = remainingSum % 10;
          return bull === 0 ? '牛牛' : `牛${bull}`;
        }
      }
    }
  }

  return '无牛';
}

完整游戏流程示例

初始化牌组、洗牌、发牌并计算结果的完整流程。

function playBullGame() {
  const deck = shuffleDeck(createDeck());
  const playerCards = deck.slice(0, 5);
  const result = calculateBull(playerCards);

  console.log('玩家牌组:', playerCards);
  console.log('计算结果:', result);

  return {
    cards: playerCards,
    result: result
  };
}

// 示例调用
playBullGame();

高级功能扩展

可以添加更多游戏功能,如多玩家支持、下注系统、特殊牌型判断等。

function compareResults(result1, result2) {
  const bullMap = {
    '无牛': 0,
    '牛1': 1,
    // ...其他牛等级
    '牛牛': 10
  };

  return bullMap[result1] > bullMap[result2] ? 1 : 
         bullMap[result1] < bullMap[result2] ? -1 : 0;
}

注意事项

  1. 牌面显示可以使用更友好的格式,如"♥A"表示红桃A
  2. 实际应用中应考虑前端显示与后端逻辑分离
  3. 多人游戏时需要同步各玩家的牌组状态
  4. 可以添加动画效果增强用户体验

标签: js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…