斗地主游戏 - 功能清单
斗地主游戏 - 功能清单
核心游戏功能
基础规则
- 标准 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保存 - 配置、统计、历史、挑战进度、排行榜、回放均可跨会话保留