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

115 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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