Skip to content

hqlzz/ddz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎮 欢乐斗地主

一个采用欢乐斗地主经典布局风格的纯原生 HTML/CSS/JavaScript 斗地主小游戏。

🚀 最新更新 (v1.2.1)

🔥 紧急修复 - CSS布局问题

发布日期: 2025-10-21

修复内容:

  • 🐛 修复CSS gap负值bug - CSS的gap属性不支持负值,导致卡牌全部堆叠
  • 改用margin负值 - 正确实现卡牌重叠效果
  • 修复CSS语法错误 - 修复.bottom-cards-label缺少闭合括号
  • 🧹 清理重复CSS - 删除多处重复的样式定义
  • 🎯 优化显示效果 - 添加overflow: visible确保卡牌正确显示

影响范围:

  • ✅ 左侧玩家手牌现在正确重叠显示
  • ✅ 顶部玩家手牌现在正确重叠显示
  • ✅ 底部玩家手牌现在正确重叠显示
  • ✅ 所有出牌区域卡牌正确重叠显示
  • ✅ 底牌区域卡牌正确重叠显示

快速开始

运行游戏

Linux/Mac:

cd /workspaces/ddz
python3 -m http.server 8000

Windows:

cd \workspaces\ddz
python -m http.server 8000

然后访问:http://localhost:8000


./start.sh

完整的斗地主规则

Windows- ✅ 标准54张牌(含大小王)

start.bat- ✅ 叫地主、抢地主机制


  - 单张、对子、三张

---  - 三带一、三带对

  - 顺子、连对、飞机

## 🎯 游戏特色  - 炸弹、王炸

  - 四带二、四带两对

### 完整的斗地主规则

- ✅ 标准 54 张牌(含大小王)### 游戏功能

- ✅ 叫地主、抢地主机制- ✅ 人机对战(1个玩家 vs 2个AI)

- ✅ 15 种完整牌型识别- ✅ AI智能出牌

- ✅ 智能 AI 对战- ✅ 提示功能

- ✅ 倍数计算系统- ✅ 倍数计算

- ✅ 游戏结果显示

### 支持的牌型- ⭐ **倒计时系统**(新增)

| 牌型 | 示例 | 说明 |- ⭐ **消息提示**(新增)

|------|------|------|

| 单张 | 3 | 任意单牌 |### UI特性

| 对子 | 33 | 两张相同 |- ✅ 欢乐斗地主风格界面

| 三张 | 333 | 三张相同 |- ⭐ **独立出牌区域**(v1.2新增)

| 三带一 | 3334 | 三张+单张 |- ⭐ **优化的玩家布局**(v1.2优化)

| 三带对 | 33344 | 三张+对子 |- ⭐ **动态渐变背景**(v1.1优化)

| 顺子 | 34567 | 5张以上连续 |- ⭐ **3D卡牌效果**(v1.1优化)

| 连对 | 334455 | 3对以上连续 |- ⭐ **流畅的动画效果**(v1.1优化)

| 飞机 | 333444 | 连续的三张 |- ✅ 响应式设计

| 飞机带翅膀 | 33344456 | 飞机+单/对 |- ✅ 卡牌选择交互

| 炸弹 | 3333 | 四张相同 |- ⭐ **实时消息反馈**(v1.1新增)

| 王炸 | 小王大王 | 最大的牌 |

| 四带二 | 333345 | 四张+两单 |## 项目结构

| 四带两对 | 33334455 | 四张+两对 |

UI/UX 特性ddz/

  • 🎨 欢乐斗地主经典布局 - 左侧、上方、下方三个玩家位置├── index.html # 主页面

  • 🎯 中央出牌区域 - 三个玩家的出牌集中显示在中央├── css/

  • 倒计时系统 - 叫地主 15秒、抢地主 10秒、出牌 20秒│ └── style.css # 样式文件

  • 💬 Toast 消息提示 - 操作反馈及时清晰├── js/

  • 流畅动画 - 发牌、出牌、按钮等都有流畅动效│ ├── card.js # 扑克牌类

  • 🌈 动态渐变背景 - 5 色循环渐变,视觉舒适│ ├── player.js # 玩家类

│ ├── cardType.js # 牌型判断

---│ ├── ai.js # AI逻辑

│ ├── game.js # 游戏主逻辑

🎮 游戏操作│ ├── ui.js # UI控制

│ └── main.js # 入口文件

基本流程├── images/ # 图片资源(头像等)

  1. 开始游戏 - 点击"开始游戏"按钮├── audio/ # 音效资源

  2. 发牌阶段 - 自动发牌,每人 17 张,3 张底牌└── README.md # 说明文档

  3. 叫地主 - 点击"叫地主"或"不叫"(15秒倒计时)```

  4. 抢地主 - 有人叫后可以抢(10秒倒计时)

  5. 出牌 - 地主先出,按规则出牌(20秒倒计时)## 快速开始

  6. 结算 - 一方出完所有牌即获胜

🚀 一键启动(推荐)

出牌操作

  • 选牌 - 点击卡牌选中(卡牌上浮),再次点击取消Windows用户

  • 出牌 - 选好牌后点击"出牌"按钮```bash

  • 提示 - 点击"提示"获取可出牌建议双击运行 start.bat

  • 不要 - 点击"不要"跳过本轮```

快捷提示Mac/Linux用户

  • 💡 卡牌上浮 = 已选中```bash

  • 💡 红色闪烁 = 倒计时紧急(≤5秒)./start.sh

  • 💡 金色边框 = 出牌区域有牌```

  • 💡 超时自动 = 不叫/不抢/不要

脚本会自动:

---- 检测Python环境

  • 启动HTTP服务器

📁 项目结构- 显示访问地址(包括局域网地址)

  • 自动打开浏览器(Windows)

ddz/---

├── index.html              # 游戏主页面

├── css/### 方式1:直接打开

│   └── style.css          # 完整样式表1. 下载项目文件

├── js/2. 用浏览器打开 `index.html` 即可开始游戏

│   ├── card.js            # 卡牌类

│   ├── player.js          # 玩家类### 方式2:使用本地服务器

│   ├── cardType.js        # 牌型识别(15种)```bash

│   ├── ai.js              # AI 决策引擎# 使用Python启动

│   ├── game.js            # 游戏流程控制python -m http.server 8000

│   ├── ui.js              # UI 渲染和交互

│   └── main.js            # 入口文件# 或使用Node.js的http-server

├── images/npx http-server

│   ├── avatar-player.svg  # 玩家头像```

│   └── avatar-farmer.svg  # 农民头像

├── audio/                 # 音效目录(预留)然后在浏览器访问 `http://localhost:8000`

├── start.sh               # Linux 启动脚本

├── start.bat              # Windows 启动脚本## 游戏玩法

└── README.md              # 本文档

```### 开始游戏

1. 点击"开始游戏"按钮

---2. 系统自动发牌(每人17张,留3张底牌)



## 🎨 设计风格### 叫地主阶段

- 根据手牌情况选择"叫地主"或"不叫"

### 布局特点- 可以叫1分、2分或3分

采用**欢乐斗地主**的经典三角形布局:- 叫3分直接成为地主

- **上方玩家**(AI 电脑玩家1)- 屏幕顶部居中

- **左侧玩家**(AI 电脑玩家2)- 屏幕左侧垂直居中### 抢地主阶段

- **下方玩家**(你)- 屏幕底部,手牌展开显示- 如果有人叫地主,其他玩家可以选择"抢地主"

- **中央区域** - 游戏信息、出牌区域、底牌展示- 抢地主会增加游戏倍数



### 视觉效果### 出牌阶段

- 🌈 多彩动态渐变背景(紫-蓝-青-绿-金)1. 地主获得3张底牌,优先出牌

- 🎴 3D 卡牌效果(阴影、圆角、高光)2. 点击手牌选择要出的牌(选中的牌会上浮)

- 💫 流畅动画(发牌、出牌、选牌)3. 点击"出牌"按钮出牌

- 💧 水波纹按钮效果4. 可以点击"提示"获取出牌建议

- ⏱️ 倒计时脉冲动画5. 点击"不要"跳过本轮

- 🔔 Toast 滑入滑出

### 胜利条件

---- 先出完所有手牌的一方获胜

- 地主胜利或农民胜利

## 💻 技术实现

## 牌型说明

### 技术栈

- **HTML5** - 语义化结构### 基础牌型

- **CSS3** - Flexbox、动画、渐变、毛玻璃- **单张**:任意一张牌

- **JavaScript ES6+** - 类、箭头函数、解构- **对子**:两张相同点数的牌

- **纯原生实现** - 零依赖,快速加载- **三张**:三张相同点数的牌



### 核心算法### 组合牌型

- **洗牌算法** - Fisher-Yates 随机洗牌- **三带一**:三张 + 一张单牌

- **牌型识别** - 正则+统计+连续性检测- **三带对**:三张 + 一个对子

- **AI 决策** - 手牌评估+牌型生成+压牌策略- **顺子**:五张及以上连续的牌(不含2和王)

- **出牌验证** - 规则引擎,类型和大小检查- **连对**:三对及以上连续的对子

- **飞机**:两个及以上连续的三张

### 性能优化- **飞机带翅膀**:飞机 + 等量单牌/对子

- CSS `transform` 硬件加速

- 事件委托减少监听器### 炸弹牌型

- DOM 操作批量化- **炸弹**:四张相同点数的牌

- 定时器及时清理- **王炸**:大王 + 小王(最大)



---## 牌力大小



## 🐛 常见问题点数:3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K < A < 2 < 小王 < 大王



### Q1: 游戏打不开?特殊规则:

**A**: 确保已启动 HTTP 服务器(需要 Python 3),然后访问 http://localhost:8000- 王炸 > 炸弹 > 其他牌型

- 相同牌型比点数大小

### Q2: 倒计时到 0 会怎样?- 不同牌型(非炸弹)不能比较

**A**: 自动执行默认操作(不叫/不抢/不要),避免卡住游戏流程

## AI策略

### Q3: AI 太强/太弱怎么办?

**A**: 可以编辑 `js/ai.js` 文件,调整评分权重参数AI根据手牌情况智能决策:

- **叫地主**:根据牌力(王、2、炸弹、三张等)评估

### Q4: 如何修改界面颜色?- **出牌**:

**A**: 编辑 `css/style.css`,搜索对应的颜色值(如 `#ffd700`)修改  - 优先出单张、对子等小牌

  - 保留炸弹和大牌

### Q5: 可以添加音效吗?  - 智能跟牌策略

**A**: 可以!在 `audio/` 目录放入音频文件,在 `js/ui.js` 中调用 `new Audio().play()`  - 队友出牌时适当放过



---## 技术实现



## 🎯 游戏技巧### 核心类

- **Card**:扑克牌类,管理牌的创建、洗牌、排序

### 地主策略- **Player**:玩家类,管理手牌和角色

- 💎 拿到王、炸弹、多个三张时积极叫地主- **CardType**:牌型分析类,判断和比较牌型

- 💎 先出小牌,后手大牌压制- **AI**:AI决策类,实现电脑玩家逻辑

- 💎 及时炸弹阻止农民跑牌- **Game**:游戏主逻辑,控制游戏流程

- **GameUI**:UI控制类,处理界面交互

### 农民策略

- 🌾 配合队友,不要单打独斗### 特色功能

- 🌾 记住队友出过的大牌1. **智能牌型识别**:自动识别所有标准牌型

- 🌾 适时使用炸弹帮助队友2. **AI出牌算法**:基于规则的AI决策系统

3. **提示系统**:为玩家推荐最优出牌方案

### 通用技巧4. **动画效果**:流畅的卡牌动画和过渡效果

- ⚡ 注意倒计时,避免超时自动跳过

- ⚡ 善用"提示"功能学习出牌## 浏览器兼容性

- ⚡ 观察对手剩余牌数,调整策略

支持现代浏览器:

---- Chrome 60+

- Firefox 60+

## 🚀 部署上线- Safari 12+

- Edge 79+

### 本地部署

已配置!直接运行启动脚本即可。## 后续优化方向



### 静态托管### 功能增强

本项目是纯静态网站,可直接部署到:- [ ] 添加音效系统(出牌、获胜音效等)

- **GitHub Pages** - 免费托管- [ ] 添加背景音乐

- **Vercel** - 一键部署- [ ] 记牌器功能

- **Netlify** - 拖拽上传- [ ] 历史记录

- **Nginx/Apache** - 自己的服务器- [ ] 难度选择(简单/中等/困难AI)



只需将整个项目文件夹上传即可,无需任何构建步骤。### UI优化

- [ ] 更多动画效果

---- [ ] 自定义主题

- [ ] 移动端适配优化

## 📊 项目数据- [ ] 全屏模式



- 代码行数: ~2,500 行### 玩法扩展

- 文件数量: 11 个核心文件- [ ] 欢乐豆系统

- 牌型种类: 15 种- [ ] 排行榜

- AI 策略: 多层决策树- [ ] 成就系统

- 浏览器支持: Chrome 90+, Firefox 88+, Safari 14+, Edge 90+- [ ] 多人联机对战

- [ ] 癞子斗地主模式

---

## 开发说明

## ⭐ 项目特色

### 代码结构

- ✅ **完整实现** - 所有斗地主规则100%实现- 采用面向对象设计

- ✅ **原生代码** - 零依赖,代码清晰易懂- 模块化开发,职责分离

- ✅ **经典布局** - 采用欢乐斗地主的三角形布局- 易于扩展和维护

- ✅ **智能 AI** - 具有挑战性的 AI 对手

- ✅ **精美 UI** - 流畅动画和舒适配色### 自定义开发

- ✅ **易于扩展** - 代码结构清晰,便于二次开发如需修改游戏逻辑:

- `card.js`:修改牌的定义

---- `cardType.js`:添加新牌型

- `ai.js`:调整AI策略

## 📝 更新日志- `game.js`:修改游戏规则

- `style.css`:调整UI样式

### v1.0.0 (初始版本)

- 完整的游戏逻辑实现## 许可证

- 15 种牌型识别

- AI 智能出牌MIT License



### v1.1.0## 作者

- 添加倒计时系统

- Toast 消息提示欢乐斗地主小游戏

- UI 大幅美化

---

### v1.2.0 (当前版本) ⭐

- **采用欢乐斗地主经典布局****开始享受游戏吧!祝你好运!🎮**
- 优化中央出牌区域
- 精简文档,保留核心

---

## 🎉 开始游戏

现在就启动服务器,体验经典的斗地主游戏吧!

```bash
python3 -m http.server 8000

访问 http://localhost:8000 开始游戏!


Made with ❤️ | 纯原生实现 | 欢乐斗地主风格

项目版本: v1.2.0 | 更新日期: 2025-10-21

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors