斗地主游戏 - 功能清单

核心游戏功能

基础规则

  • 标准 54 张牌(含大小王)斗地主规则
  • 三人对战:1 名地主 vs 2 名农民
  • 叫分系统:1/2/3 分竞叫,叫 3 分直接成为地主
  • 无人叫分时自动重新发牌
  • 完整牌型支持:单张、对子、三条、三带一/二、顺子、连对、飞机(带翅膀)、四带二、炸弹、火箭

计分系统

  • 基础分 × 叫分倍数 × 炸弹翻倍 × 春天翻倍
  • 春天检测:地主出完牌,农民一手未出
  • 反春天检测:地主只出一手牌即被农民打败

AI 系统

三档难度

  • 简单:随机性高,30% 概率随机不出牌,总是出最小的牌
  • 普通:基于牌型策略出牌,优先出三带、顺子等组合牌,保留控制牌
  • 困难:使用高级策略引擎(AdvancedAIStrategy),集成以下智能决策

高级 AI 策略(困难模式)

叫分决策 _hardBid

  • 评估手牌强度(evaluateHandStrength
  • 统计炸弹数量和火箭
  • 分析手牌结构:孤张数量、三条数量
  • 评估 2 和 A 的控制力:持有多张 2 和 A 增加叫分信心
  • 计算最少出牌手数:手数越少信心越高(≤5手 +2,≤7手 +1,≥10手 -1)
  • 位置优势:最后一个叫分的玩家有额外加成

出牌决策

  • AdvancedAIStrategy 引擎
    • evaluatePlayValue:综合评估每手牌的价值分数
      • 出牌前后的手数变化(权重 ×15)
      • 出完牌直接加 200 分(必出)
      • 低牌加分(<10 +5),高牌减分(≥2 -8)
      • 大组合牌(≥5张)额外加分
      • 出牌后剩余孤张越少越好
      • 剩余 ≤3 张时加 15 分鼓励积极出牌
    • selectOptimalFirstPlay:主动出牌时选择价值最高的组合
    • selectOptimalResponse:跟牌时综合考虑队友关系和敌方威胁

出牌评分系统 _scorePlay

  • 手数差评估:出完这手牌能减少多少步才能走完
  • 牌面值权重:低牌(<10) +6,中牌(<A) +3,A牌 -1,2牌 -5
  • 组合牌奖励:5张以上组合牌按张数加分
  • 手牌结构评估:出牌后如果产生低值孤张则扣分
  • 紧急度加成:剩余 ≤3 张 +15 分,敌方快赢时高牌也敢出

队友配合逻辑

  • 不管队友的牌:当队友出牌且自己的牌对手数减少没帮助时,选择不出
  • 队友接近胜利时让路_isTeammateCloseToWin 检测队友剩余 ≤2 张时主动放行
  • 敌方威胁检测_isEnemyCloseToWin 检测敌方剩余 ≤3 张时切换为激进模式
  • 炸弹使用决策shouldUseBomb 综合判断——自己牌少(≤4)必炸、敌方快赢必炸、正常情况保留炸弹

AI 记忆系统 AIMemory

  • 追踪所有已出牌记录(按点数统计剩余)
  • 记录每位玩家剩余牌数
  • 记录每位玩家的不出次数
  • 统计炸弹使用次数
  • 玩家风格估测:根据最近 10 手出牌分析对手是激进型/组合型/保守型/平衡型
  • 出牌趋势分析:计算对手最近的出牌速率(快速/中等/缓慢)
  • 剩余牌面分析:估算场上还剩哪些牌未出

AI 策略规划 AIStrategyAnalyzer

  • 规划完整出牌序列(飞机→顺子→连对→三带→对子→单张)
  • 识别关键牌(大小王、2、炸弹)
  • 分析弱点(孤张太多、低值孤张、无控制牌)

AI 性格系统 AIPersonality

  • 4 种性格类型:激进型 😈、谨慎型 🤔、策略型 🧐、幸运型 🍀
  • 每种性格有独立的:
    • 对话台词(出牌、不出、胜利、失败、炸弹、叫分等场景)
    • 风险容忍度和叫分激进度参数
    • 炸弹使用阈值
  • AIPersonalityManager 管理 8 个预设 AI 角色

托管模式

功能

  • 点击游戏界面顶部的 🤖 托管 按钮或按 T 键开启/关闭
  • 开启后 AI 自动帮玩家完成所有操作:
    • 自动叫分:使用困难 AI 策略评估手牌决定叫分
    • 自动出牌:使用困难 AI 策略决定出什么牌
    • 自动不出:当没有牌能管上时自动过牌
  • 随时可以按按钮或 T 键取消托管,恢复手动操作
  • 每局新游戏开始时自动关闭托管
  • 托管按钮激活时有发光脉冲动画指示状态

视觉特效系统

粒子系统 ParticleSystem

  • 爆炸效果(炸弹时触发)
  • 烟花效果(胜利时触发)
  • 彩纸飘落效果
  • 闪光粒子效果
  • 拖尾效果

屏幕效果

  • 屏幕闪光:screenFlash(颜色可配)
  • 屏幕震动:screenShake
  • 各种游戏事件特效:炸弹特效、火箭特效、大牌组合特效、胜利庆祝、失败动画、春天特效

文字效果 TextEffect

  • 浮动文字(上升并淡出)
  • 弹跳文字(放大后弹性缩回)

动作拖尾 MotionTrail

  • Canvas 绘制的运动轨迹效果

动态背景 BackgroundEffects

  • 星空效果
  • 雪花效果
  • 气泡效果

主题系统

多套配色主题 ThemeManager

  • 通过 CSS 变量切换全局配色
  • 主题选择器 UI(设置界面中)

桌面装饰 TableDecorator

  • 游戏桌面的装饰性图案

分数飘浮 ScoreFloater

  • 得分/失分时的飘浮数字动画

提示工具 TooltipManager

  • 上下文感知的悬浮提示

音效系统

基础音效 SoundManager

  • 出牌、发牌、炸弹、火箭、胜利、失败等基础音效

增强音效 EnhancedSoundManager

  • SynthEngine:基于 Web Audio API 合成各种音效
    • 点击音、出牌音、不出音、叫分音、轮到你音
    • 最后一张/两张牌警告音
    • 各牌型专属音效(顺子、飞机等)
    • 胜利/失败音效
  • BGMGenerator:背景音乐生成器

辅助工具

记牌器 CardCounter

  • 实时追踪每个点数的剩余数量
  • 颜色编码:已出完(灰色)、稀缺(橙色)、全在自己手中(绿色)
  • 可在设置中开启/关闭

手牌分析面板 HandAnalysisPanel

  • 分析当前手牌的组合(炸弹数、对子数、三条数等)
  • 手牌强度评估
  • 控制牌展示

牌面概率计算器 CardProbabilityCalculator

  • 估算打过对手的概率
  • 判断对手持有炸弹的可能性
  • 剩余最大牌分析
  • 出牌风险评估

智能提示系统 SmartHintSystem

  • 遍历所有可出牌组合
  • 循环提示功能(按 H 键或点击提示按钮)

回合计时器 TurnTimer

  • 圆形 SVG 进度条倒计时
  • 警告/紧急状态变色提示

游戏计时 GameClock

  • 追踪并显示整局游戏耗时

操作历史 ActionHistory

  • 滚动面板显示最近的出牌/不出记录

挑战系统 ChallengeMode

10 项挑战

| 挑战 | 描述 | 难度 | 奖励 | |——|——|——|——| | ⚡ 极速玩家 | 3 分钟内赢得一局 | 普通 | 500 | | 💣 炸弹大师 | 一局使用 2+ 个炸弹并获胜 | 困难 | 800 | | 🌸 完美清场 | 作为地主打出春天 | 困难 | 1500 | | 👑 逆转之王 | 手牌少于 5 张时用炸弹逆转 | 专家 | 1200 | | 🔥 五连胜 | 连续赢得 5 局 | 困难 | 1000 | | 🎯 无炸胜利 | 不使用炸弹/火箭获胜 | 普通 | 600 | | 🌾 农民英雄 | 作为农民连续赢 3 局 | 困难 | 900 | | 💰 高分玩家 | 单局 800 分以上 | 困难 | 700 | | 🏃 速战速决 | 10 手内出完所有牌 | 专家 | 1100 | | 🧠 完美预判 | 使用提示 ≤2 次并获胜 | 普通 | 500 |

每日挑战 DailyChallenge

  • 每天自动生成一个新挑战
  • 7 种每日挑战轮换

数据统计

综合数据 GameStatistics

  • 总局数、胜负场、胜率
  • 地主/农民分别的场次和胜率
  • 累计得分、最高单局得分
  • 炸弹/火箭使用次数
  • 春天/反春天次数
  • 连胜记录

排行榜 Leaderboard

  • Top 15 最高分排名(🥇🥈🥉)
  • 四大亮点卡片:最高分、平均分、最快胜利、最多炸弹
  • 按难度分布统计胜率

成就系统 AchievementNotifier

  • 达成条件时弹出成就通知动画

对局记录

历史记录 GameHistory

  • 完整保存每局的操作流程(发牌、叫分、出牌、过牌、胜负)
  • 支持查看和删除记录

回放系统 ReplayRecorder / ReplayPlayer

  • 录制完整游戏过程
  • 支持播放、暂停、快进(0.5x/1x/2x)
  • 逐帧前进/后退
  • 回放存储管理(最多 20 条)

UI/UX 功能

界面布局

  • 开始界面、设置界面、规则界面、游戏界面、结算界面
  • 数据统计界面、对局历史界面
  • 响应式设计适配不同屏幕

新手教程 TutorialManager

  • 多步骤引导式教程
  • UI 元素高亮指示

动画系统

  • 发牌动画、出牌动画、翻牌动画
  • 屏幕切换过渡动画
  • 叫分动画、过牌动画、胜利/失败动画
  • 春天/反春天特殊动画
  • CSS 关键帧动画库(animations.css)

快捷键

| 按键 | 功能 | |——|——| | Enter / Space | 出牌 | | P | 不出 | | H | 提示 | | T | 切换托管模式 | | Esc | 暂停/继续 | | 1/2/3/0 | 叫 1/2/3 分 / 不叫 |


AI 观战模式

  • 主菜单点击 👁 AI观战 进入
  • 三个 AI 玩家自动对战,玩家旁观
  • 从 AI 性格库中随机抽取两个有个性的 AI(带名字、头像、台词)
  • 观战时顶部显示对战双方信息横幅
  • AI 出牌/不出时会弹出个性化台词气泡
  • 随时可点击”退出观战”返回主菜单

段位/等级系统 RankSystem

7 个段位

| 段位 | 图标 | 最低等级 | 颜色 | |——|——|———-|——| | 青铜 | 🥉 | Lv.1 | 铜色 | | 白银 | 🥈 | Lv.5 | 银色 | | 黄金 | 🥇 | Lv.10 | 金色 | | 铂金 | 💎 | Lv.16 | 铂色 | | 钻石 | 💠 | Lv.23 | 钻石蓝 | | 大师 | 🏅 | Lv.31 | 红色 | | 王者 | 👑 | Lv.40 | 橙色 |

经验值规则

  • 每 100 EXP 升一级
  • 胜利:基础 30 EXP + 地主加 10 + 炸弹每个 5 + 春天 20 + 分数奖励
  • 失败:固定 10 EXP(保底 5)
  • 升级和段位晋升时有弹窗通知

UI 展示

  • 主菜单底部显示当前段位、等级、经验进度条
  • 游戏结束后弹出经验获得通知
  • 段位晋升时额外动画提示

AI 个性化表情系统

游戏中集成

  • 每局游戏随机分配两个有个性的 AI 对手(从 8 个预设角色中抽取)
  • AI 头像和名字会显示对应性格角色
  • 出牌时(35% 概率)弹出台词气泡:普通出牌/炸弹各有不同台词
  • 不出时(25% 概率)弹出不出台词
  • 游戏结束时:失败方的 AI 弹出失败感言
  • 气泡 2 秒后自动消失,带渐隐动画

托管模式增强

  • 自动连续对局:托管模式下游戏结束后 4 秒自动开始下一局
  • 适合挂机刷经验和段位
  • 取消托管后停止自动开局

技术架构

文件结构(27 个文件,15900+ 行)

index.html          — 主页面结构
css/
  style.css         — 核心样式和布局
  animations.css    — 动画关键帧
  components.css    — 组件样式(教程、统计、历史、挑战)
  themes.css        — 主题、计时器、记牌器、排行榜、回放等样式
js/
  constants.js      — 常量、配置、统计、事件系统
  card.js           — Card 类和 CardUtils 工具方法
  deck.js           — 牌组管理和 HandAnalyzer
  validator.js      — 出牌规则验证 CardValidator
  ai.js             — AI 决策(AIPlayer/AIMemory/AIStrategyAnalyzer/AdvancedAIStrategy)
  player.js         — Player 类和 PlayerManager
  game.js           — Game 主逻辑(含托管模式)
  app.js            — 应用入口和事件绑定
  renderer.js       — DOM 渲染
  animation.js      — 动画控制
  sound.js          — 音效引擎(SynthEngine/BGMGenerator)
  effects.js        — 粒子特效和视觉效果
  theme.js          — 主题管理和动态背景
  timer.js          — 计时器和操作历史
  card-counter.js   — 记牌器和概率计算
  history.js        — 对局历史记录
  tutorial.js       — 新手教程
  statistics-ui.js  — 统计面板和成就通知
  multiplayer-sim.js— 挑战模式和 AI 性格
  leaderboard.js    — 排行榜和每日挑战
  replay.js         — 回放录制和播放

数据持久化

  • 所有数据通过 localStorage 保存
  • 配置、统计、历史、挑战进度、排行榜、回放均可跨会话保留