|
|
||
|---|---|---|
| .. | ||
| public | ||
| src/game | ||
| README.md | ||
| index.html | ||
| package.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
| vitest.config.ts | ||
README.md
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 |
花色效果
- 红桃 ♥: 从弃牌堆回收卡牌到酒馆牌堆
- 方片 ♦: 抽取等量卡牌
- 梅花 ♣: 攻击力翻倍
- 黑桃 ♠: 减免反击伤害
游戏流程
- 出牌阶段: 打出一张或多张同点数的牌(总点数≤10)
- 伤害结算: 对敌人造成等同于牌面点数的伤害
- 反击阶段: 如果敌人未被击败,它会反击
- 抵消反击: 弃置点数总和≥反击伤害的牌
特殊规则
- 敌人免疫: 每个敌人免疫与其花色相同的卡牌效果
- 组合牌: 可打出多张同点数牌,但总点数不能超过10
- 小丑牌: 可弃光手牌并重新抽取8张(整局限用2次)
胜利等级
- 🥇 金胜利: 未使用小丑牌获胜
- 🥈 银胜利: 使用1张小丑牌获胜
- 🥉 铜胜利: 使用2张小丑牌获胜
运行游戏
# 安装依赖
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