115 lines
3.1 KiB
Markdown
115 lines
3.1 KiB
Markdown
|
|
# 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
|