An open API service indexing awesome lists of open source software.

https://github.com/tian11111/doudizhu

使用 C 语言实现斗地主核心规则,结合 Emscripten 编译到 WebAssembly,在浏览器中提供交互式 Web UI 体验。
https://github.com/tian11111/doudizhu

beginner-friendly c c-language-doudizhu c-poker card-game console-game dou-dizhu

Last synced: 3 months ago
JSON representation

使用 C 语言实现斗地主核心规则,结合 Emscripten 编译到 WebAssembly,在浏览器中提供交互式 Web UI 体验。

Awesome Lists containing this project

README

          

# 斗地主(Fight the Landlord)

一个使用 **C 语言** 实现的简易斗地主项目,现已支持:

- **命令行版本运行**
- **Web UI 浏览器版本运行(基于 Emscripten 编译为 WebAssembly)**

项目适合作为:

- C 语言课程设计 / 小型项目练习
- 数据结构与游戏逻辑实现参考
- WebAssembly 前端交互实践
- 简单 AI 与纸牌规则系统开发示例

---

## 🎯 游戏简介

这是一个简易但完整的斗地主(Fight the Landlord)纸牌游戏实现。游戏遵循经典斗地主规则:

- 使用一副 **54 张扑克牌**(含大小王)
- 三名玩家:**一名地主,两名农民**
- 地主先出牌,农民合作对抗地主
- 谁先出完手牌即为胜利者

项目核心逻辑使用 **C 语言** 编写,最初运行于命令行终端;目前已扩展出 **Web UI 版本**,可以直接在浏览器中游玩,适合作为 C 语言学习、规则系统实现和 WebAssembly 项目实践参考。
![Uploading 屏幕截图_26-3-2026_19111_tian11111.github.io.jpg…]()

---

## 🧩 功能特性

### ✅ 标准牌型识别

支持以下合法出牌类型:

- 单张(SINGLE)
- 对子(PAIR)
- 三张(TRIPLE)
- 三带一(TRIPLE\_ONE)
- 顺子(STRAIGHT,5 张及以上连续点数)
- 炸弹(BOMB,四张相同)
- 王炸(ROCKET,大小王)
- 过牌(PASS)

### ✅ 出牌合法性校验

自动判断:

- 牌型是否合法
- 是否能够压制上一家的牌
- 王炸最大,炸弹可压制普通牌型

### ✅ 智能比较机制

根据斗地主规则进行出牌比较:

- 同类型比较点数
- 顺子要求长度一致且起始点更高
- 炸弹之间比较点数
- 王炸无敌

### ✅ 简单 AI 对手

电脑玩家采用基础策略:

- 优先尝试打出最小可压制牌
- 无法出牌时自动选择过牌
- 支持连续过牌后重置出牌权

### ✅ 完整游戏流程

支持完整流程:

**洗牌 → 发牌 → 随机定地主 → 轮流出牌 → 判断胜负**

### ✅ Web UI 支持

新增浏览器版本界面,支持:

- 网页端开始游戏
- 手牌点击选择
- 出牌 / 过牌操作
- 地主标记显示
- AI 手牌背面显示
- 中间出牌区显示
- AI 出牌与回合展示
- WebAssembly 方式运行 C 游戏逻辑

---

## 🖥️ Web UI 预览

当前 Web UI 已实现更接近斗地主游戏界面的布局,包括:

- 绿色牌桌风格界面
- 玩家 / AI 分区显示
- 手牌区与中间出牌区
- 地主身份标记
- AI 出牌展示
- 基础出牌动画与交互反馈

---

## 🛠️ 编译与运行

### 环境要求

- 支持 **C99** 或以上标准的编译器
- gcc / clang / MSVC
- Windows / Linux / macOS

### 1. 命令行版本

根据你使用的编译器进行编译,例如:

```bash
gcc 1.c -o game
./game