boardgame-phaser/packages/regicide-game/README.md

115 lines
3.1 KiB
Markdown
Raw Permalink Normal View History

2026-04-06 14:21:44 +08:00
# Regicide - 单人卡牌游戏
基于 Phaser 3 + boardgame-core 框架实现的 Regicide 合作卡牌游戏单人模式。
## 游戏简介
Regicide 是一款合作奇幻卡牌游戏使用标准扑克牌进行游戏。玩家需要击败12个强大的敌人4个J、4个Q、4个K来取得胜利。
## 游戏规则
### 目标
按任意顺序击败城堡牌堆中的所有12个敌人J/Q/K
### 设置
- **城堡牌堆**: 12张敌人卡4J、4Q、4K
- **酒馆牌堆**: 所有数字牌2-10和A
- **初始手牌**: 8张
- **小丑牌**: 2张用于重抽手牌
### 敌人属性
| 敌人 | HP | 反击伤害 | 分值 |
|------|----|----------|------|
| J | 20 | 10 | 10 |
| Q | 30 | 15 | 15 |
| K | 40 | 20 | 20 |
### 花色效果
- **红桃 ♥**: 从弃牌堆回收卡牌到酒馆牌堆
- **方片 ♦**: 抽取等量卡牌
- **梅花 ♣**: 攻击力翻倍
- **黑桃 ♠**: 减免反击伤害
### 游戏流程
1. **出牌阶段**: 打出一张或多张同点数的牌总点数≤10
2. **伤害结算**: 对敌人造成等同于牌面点数的伤害
3. **反击阶段**: 如果敌人未被击败,它会反击
4. **抵消反击**: 弃置点数总和≥反击伤害的牌
### 特殊规则
- **敌人免疫**: 每个敌人免疫与其花色相同的卡牌效果
- **组合牌**: 可打出多张同点数牌但总点数不能超过10
- **小丑牌**: 可弃光手牌并重新抽取8张整局限用2次
### 胜利等级
- 🥇 **金胜利**: 未使用小丑牌获胜
- 🥈 **银胜利**: 使用1张小丑牌获胜
- 🥉 **铜胜利**: 使用2张小丑牌获胜
## 运行游戏
```bash
# 安装依赖
pnpm install
# 启动开发服务器
cd packages/regicide-game
pnpm dev
# 构建生产版本
pnpm build
# 预览生产版本
pnpm preview
```
## 项目结构
```
packages/regicide-game/
├── src/
│ ├── game/
│ │ ├── types.ts # 类型定义
│ │ ├── card-utils.ts # 卡牌工具函数
│ │ └── regicide.ts # 游戏逻辑和命令
│ ├── scenes/
│ │ ├── GameScene.ts # 主游戏场景
│ │ └── effects.ts # 特效系统
│ └── ui/
│ └── App.tsx # Preact UI组件
├── index.html
├── package.json
└── vite.config.ts
```
## 技术栈
- **Phaser 3**: 游戏引擎
- **boardgame-core**: 状态管理Preact Signals + Mutative
- **boardgame-phaser**: Phaser 集成框架
- **Preact**: UI 组件
- **TypeScript**: 类型安全
- **Vite**: 构建工具
- **Tailwind CSS**: UI 样式
## 开发说明
### 命令系统
游戏使用 boardgame-core 的命令系统:
- `setup` - 初始化游戏
- `play <cardId>` - 打出单张卡牌
- `combo <cardIds>` - 打出组合牌
- `yield` - 放弃回合
- `counterattack <cardIds>` - 反击时弃牌
- `useJester` - 使用小丑牌重抽
### 状态管理
游戏状态使用 MutableSignal 响应式系统,通过 `game.produce()` 进行不可变更新。
### 场景系统
GameScene 继承自 GameHostScene使用 `spawnEffect``effect()` 实现响应式渲染。
## 许可证
MIT