一个基于 JavaScript 的传统中国卡牌游戏,支持 AI 对战和本地多人游戏。
"交公粮"是一种经典的中国纸牌游戏,玩法类似于"斗地主",具有独特的地方规则和策略性。本项目提供完整的浏览器端游戏体验,支持智能 AI 对手。
- 🤖 智能 AI 对手 - 基于策略的 AI 决策系统
- 👥 多人支持 - 本地多人游戏模式
- 🎴 完整卡牌系统 - 支持各种牌型和规则判断
- 📱 响应式设计 - 适配桌面和移动设备
- 🔊 音效反馈 - 沉浸式游戏体验
访问 GitHub Pages 链接即可开始游戏: https://boathell.github.io/jiaogonglaing-games
# 克隆仓库
git clone https://github.com/boathell/jiaogonglaing-games.git
cd jiaogonglaing-games
# 启动本地服务器
python3 -m http.server 8000
# 打开浏览器访问
open http://localhost:8000/index.html- 前端: 原生 HTML5 + CSS3 + JavaScript (ES6+)
- 测试: Jest + jsdom
- 构建: 原生模块化架构,无需复杂构建工具
jiaogonglaing-games/
├── index.html # 游戏主入口
├── css/
│ └── style-new.css # 游戏样式
├── js/
│ ├── main-new.js # 主程序入口
│ ├── GameEngine.js # 游戏引擎核心
│ ├── AIManager.js # AI 管理模块
│ ├── UIManager-new.js # UI 管理模块
│ ├── CardManager.js # 卡牌管理模块
│ ├── EventBus.js # 事件总线
│ └── models/ # 数据模型
│ ├── Card.js
│ ├── Player.js
│ └── GameState.js
├── tests/ # 单元测试
├── .gitleaks.toml # 敏感信息扫描配置
├── .pre-commit-config.yaml # 代码提交前检查
└── SECURITY.md # 安全指南
# 安装依赖
npm install
# 运行测试
npm test
# 监视模式
npx jest --watch本项目配置了多层安全保护:
- Gitleaks - 检测 API 密钥、密码等敏感信息
- Pre-commit Hooks - 提交前自动安全检查
- Git Ignore - 防止敏感文件误提交
安装安全钩子:
./install-security-hooks.sh交公粮是流行于河南西南部的传统扑克牌游戏,与斗地主有相似之处,但规则独特。
- 参与人数: 三人游戏(一名真人玩家 + 两名电脑玩家)
- 使用牌具: 一副扑克牌(54张,含大小王)
- 发牌: 系统随机发给三名玩家各 18张牌
- 出牌: 轮流出牌,第一局随机决定谁先出牌
- 获胜: 最先出完手中所有牌的玩家获胜
| 牌型 | 说明 | 示例 |
|---|---|---|
| 单张 | 任意一张牌 | ♠3、♥A、大王 |
| 对子 | 两张相同点数的牌 | ♠3♥3、大小王(最大对子) |
| 三张 | 三张相同点数的牌 | ♠3♥3♣3 |
- ❌ 不能出顺子(如 3-4-5-6-7)
- ❌ 不能出连对(如 33-44-55)
- ❌ 不能出三带一/三带二
- ❌ 没有炸弹概念(四张相同点数只是普通牌型,不能压制其他牌)
- 单张: 大王 > 小王 > 2 > A > K > Q > J > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3(3最小)
- 对子: 按点数比较,大小王组成的对子最大
- 三张: 按点数比较,222最大,333最小
- 规则: 相同牌型才能比较大小,不同牌型不能互相压制
- 后出牌者必须出与前一家相同牌型且更大的牌,或者选择「不出」
- 当两家都选择「不出」时,由最后出牌的玩家继续先出牌
- 第一个人出完牌获胜后,剩下两人谁能压住最后出的牌型,就可以继续出牌;否则由下家顺风出牌
- 交粮: 每局结束后,输家需在下一局开始时将手中最大的牌交给赢家
- 还粮: 赢家收到「公粮」后,需返还一张较小的牌给输家:
- 电脑玩家: 自动选择手中最小的单牌作为还粮
- 真人玩家: 手动从手牌中选择一张牌作为还粮
- 出牌顺序: 交粮完成后,由输家先出牌
- 免交条件:
- 输家起到四张同数的牌或大小王,无需交粮,由赢家先出牌
- 输家手中最大的牌是 K,无需交粮,由赢家先出牌
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 打开 Pull Request
MIT License - 详见 LICENSE 文件
- 游戏规则参考传统中国民间玩法
- AI 算法基于启发式策略
Made with ❤️ by boathell