当前位置:首页 > JavaScript

js实现麻将

2026-04-05 11:37:42JavaScript

麻将游戏实现概述

使用JavaScript实现麻将游戏需要处理洗牌、发牌、玩家操作、胡牌判定等核心逻辑。以下是关键实现步骤:

基础数据结构

麻将牌通常包含万、条、筒、字牌四类,共136张牌(部分规则使用144张)。可以用数组表示初始牌组:

js实现麻将

const tiles = [
  '1万', '2万', '3万', '4万', '5万', '6万', '7万', '8万', '9万',
  '1条', '2条', '3条', '4条', '5条', '6条', '7条', '8条', '9条',
  '1筒', '2筒', '3筒', '4筒', '5筒', '6筒', '7筒', '8筒', '9筒',
  '东', '南', '西', '北', '中', '发', '白'
];
// 每种牌4张
const fullDeck = [...tiles, ...tiles, ...tiles, ...tiles];

洗牌算法

使用Fisher-Yates洗牌算法实现随机排序:

function shuffle(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;
}

发牌逻辑

四人麻将通常每人13张牌,庄家14张:

js实现麻将

function dealTiles(deck) {
  const players = [[], [], [], []];
  for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 4; j++) {
      for (let k = 0; k < 4; k++) {
        players[k].push(deck.pop());
      }
    }
  }
  // 最后一轮每人一张
  for (let j = 0; j < 4; j++) {
    players[j].push(deck.pop());
  }
  // 庄家多拿一张
  players[0].push(deck.pop());
  return { players, remainingDeck: deck };
}

胡牌算法

实现七对、平胡等常见胡牌规则:

function checkWin(hand) {
  // 七对判定
  if (hand.length === 14) {
    const tileCount = {};
    hand.forEach(tile => {
      tileCount[tile] = (tileCount[tile] || 0) + 1;
    });
    return Object.values(tileCount).every(count => count === 2);
  }

  // 平胡判定(需要实现更复杂的牌型分析)
  return checkStandardWin(hand);
}

前端交互

使用DOM操作或Canvas实现界面:

// 示例:创建牌元素
function createTileElement(tile) {
  const div = document.createElement('div');
  div.className = 'tile';
  div.textContent = tile;
  div.addEventListener('click', () => handleTileClick(tile));
  return div;
}

完整流程示例

  1. 初始化牌组并洗牌
  2. 发牌给四位玩家
  3. 实现摸牌、打牌、吃碰杠等操作
  4. 实时检查胡牌条件
  5. 处理结算逻辑

性能优化建议

  • 使用Web Workers处理复杂计算
  • 采用对象池管理牌对象
  • 使用位运算加速牌型分析
  • 实现脏检查减少DOM操作

完整实现需要考虑具体麻将规则(如广东麻将、四川血战等),上述代码提供了基础框架。实际开发中还需加入网络通信模块实现多人对战功能。

标签: 麻将js
分享给朋友:

相关文章

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js实现文件夹

js实现文件夹

使用JavaScript创建文件夹 在浏览器端的JavaScript中无法直接操作文件系统创建文件夹,这是出于安全考虑。但在Node.js环境中可以通过文件系统模块(fs)实现。 Node.js中使…

js实现复制功能实现

js实现复制功能实现

使用document.execCommand方法(传统方式,已逐渐被弃用) 传统方式通过document.execCommand('copy')实现复制功能,需先选中文本。以下是一个完整示例: fu…

js 实现mvc

js 实现mvc

MVC 模式简介 MVC(Model-View-Controller)是一种软件设计模式,将应用程序分为三个核心组件:模型(Model)处理数据和业务逻辑,视图(View)负责展示数据,控制器(Con…