当前位置:首页 > JavaScript

js实现斗牛

2026-02-02 12:17:56JavaScript

实现斗牛游戏的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)); // 输出: 牛三

实现说明

  1. 牌值定义:使用对象cardValues定义了每张牌对应的点数,A为1点,J/Q/K为10点,其他牌按面值计算。

  2. 核心算法:通过三重循环检查所有可能的三张牌组合,判断是否存在三张牌点数和为10的倍数。

  3. 结果计算:找到符合条件的组合后,计算剩余两张牌的点数和,取个位数作为"牛几"的结果。若和为10的倍数则返回"牛牛"。

  4. 无牛情况:若所有三张牌组合都无法满足条件,则返回"无牛"。

扩展功能

可以添加以下功能增强游戏体验:

js实现斗牛

  • 洗牌和发牌功能
  • 多个玩家比较大小的逻辑
  • 图形界面展示

这个实现提供了斗牛游戏的核心算法,可以直接在浏览器或Node.js环境中运行。

标签: js
分享给朋友:

相关文章

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现防洪

js实现防洪

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

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…