marco-deusebio/shadowbound-rpg
GitHub: marco-deusebio/shadowbound-rpg
一个用 C++17 编写的控制台回合制 RPG 游戏,用于演示面向对象编程和游戏系统设计。
Stars: 0 | Forks: 0
# 暗影束缚
**暗影束缚**是一款基于控制台、回合制的RPG游戏,使用**C++17**编写,是一个面向对象的编程项目。
在精心设计的敌人阵容中战斗,管理技能与状态效果,通过装备和消耗品升级你的英雄,在营地休整,并准备与**深渊领主**进行最终对决。
## 亮点
## 概述
在《暗影束缚》中,你将引导一位英雄经历一系列遭遇战,赚取经验值和金币,购买升级,管理消耗品,并在战斗之间提升属性。
该项目强调:
- 面向对象设计
- 继承与多态
- 模块化游戏系统
- 用于存档和概要的文件 I/O
- 可复用的基于类的架构
## 主菜单
```
1. New Game
2. Load Game
3. Delete Save
4. Quit
```
## 核心功能
### 战斗系统
- 回合制战斗系统
- 带有暴击的基础攻击
- 用于减少所受伤害的防御动作
- 基于冷却时间的技能系统
- 敌人特定的行为和攻击逻辑
- 战斗后的经验值、金币和物品奖励
### 状态效果
- 燃烧
- 中毒
- 眩晕
- 再生
- 虚弱
- 护盾
### 技能
- 力量打击
- 火球术
- 治疗术
- 盾牌猛击
- 毒素打击
- 闪电箭
### 物品
当前的消耗品包括:
- 生命药水
- 高级生命药水
- 解毒剂
- 净化药水
物品栏支持堆叠显示,例如:
```
Health Potion x3
Antidote x1
```
### 装备
- 武器
- 护甲
- 更换装备前需确认
装备显示示例:
```
Bronze Sword +6 Attack
Steel Sword +18 Attack
Knight Armor +60 Max HP
```
## 营地
在战斗间隙,玩家可以:
- 访问商店
- 休息
- 使用物品
- 训练攻击力或最大生命值
- 查看英雄状态
- 保存游戏
- 继续冒险
## 难度选择
支持的难度模式:
- 简单
- 普通
- 困难
难度影响:
- 敌人生命值
- 敌人攻击力
- 营地休息费用
- 训练费用
## 敌人阵容
当前敌人包括:
- 哥布林
- 墓土士兵
- 毒蛛
- 火焰小鬼
- 兽人
- 黑刃游荡者
- 花岗岩守护者
- 霜之怨灵
- 血裔守卫
- 森林巨魔
- 黑暗法师
- 深渊领主 *(最终首领)*
每个敌人都有其独特的属性、行为、奖励和战斗风格。
## 项目结构
```
Shadowbound/
├── main.cpp
├── GameTypes/
│ └── DamageType.h
├── Game/
│ ├── Game.h
│ └── Game.cpp
├── Characters/
│ ├── Character.h
│ ├── Character.cpp
│ ├── Player.h
│ ├── Player.cpp
│ ├── Hero.h
│ ├── Hero.cpp
│ ├── Berserker.h
│ ├── Berserker.cpp
│ ├── Reaper.h
│ ├── Reaper.cpp
│ ├── Rogue.h
│ ├── Rogue.cpp
│ ├── Sorcerer.h
│ ├── Sorcerer.cpp
│ ├── Spellblade.h
│ ├── Spellblade.cpp
│ ├── Templar.h
│ |── Templar.cpp
| ├── Warrior.h
│ └── Warrior.cpp
├── Enemies/
│ ├── Enemy.h
│ ├── Enemy.cpp
│ ├── Goblin.h
│ ├── Goblin.cpp
│ ├── GraveboundSoldier.h
│ ├── GraveboundSoldier.cpp
│ ├── VenomSpider.h
│ ├── VenomSpider.cpp
│ ├── FlameImp.h
│ ├── FlameImp.cpp
│ ├── Orc.h
│ ├── Orc.cpp
│ ├── BlackbladeRogue.h
│ ├── BlackbladeRogue.cpp
│ ├── GraniteGuardian.h
│ ├── GraniteGuardian.cpp
│ ├── FrostWraith.h
│ ├── FrostWraith.cpp
│ ├── SanguineWarden.h
│ ├── SanguineWarden.cpp
│ ├── ForestTroll.h
│ ├── ForestTroll.cpp
│ ├── DarkMage.h
│ ├── DarkMage.cpp
│ ├── AbyssalOverlord.h
│ └── AbyssalOverlord.cpp
├── Battle/
│ ├── BattleSystem.h
│ └── BattleSystem.cpp
├── Abilities/
│ ├── Ability.h
│ ├── Ability.cpp
│ ├── PowerStrike.h
│ ├── PowerStrike.cpp
│ ├── Fireball.h
│ ├── Fireball.cpp
│ ├── Heal.h
│ ├── Heal.cpp
│ ├── ShieldBash.h
│ ├── ShieldBash.cpp
│ ├── PoisonStrike.h
│ ├── PoisonStrike.cpp
│ ├── LightningBolt.h
│ └── LightningBolt.cpp
├── StatusEffects/
│ ├── StatusEffect.h
│ ├── BurnEffect.h
│ ├── BurnEffect.cpp
│ ├── PoisonEffect.h
│ ├── PoisonEffect.cpp
│ ├── RegenEffect.h
│ ├── RegenEffect.cpp
│ ├── StunEffect.h
│ ├── StunEffect.cpp
│ ├── WeakenEffect.h
│ ├── WeakenEffect.cpp
│ ├── ShieldEffect.h
│ └── ShieldEffect.cpp
├── Items/
│ ├── Item.h
│ ├── Item.cpp
│ ├── Inventory.h
│ ├── Inventory.cpp
│ ├── HealthPotion.h
│ ├── HealthPotion.cpp
│ ├── GreaterHealthPotion.h
│ ├── GreaterHealthPotion.cpp
│ ├── Antidote.h
│ ├── Antidote.cpp
│ ├── CleansingPotion.h
│ |── CleansingPotion.cpp
| ├── Item.h
│ ├── Item.cpp
│ ├── Antidote.h
│ ├── Antidote.cpp
│ ├── Elixir.h
│ ├── Elixir.cpp
│ ├── IronskinTonic.h
│ ├── IronskinTonic.cpp
│ ├── RejuvenationTonic.h
│ ├── RejuvenationTonic.cpp
| ├── Remedy.h
│ └── Remedy.cpp
├── Equipment/
│ ├── Equipment.h
│ ├── Equipment.cpp
│ ├── Weapon.h
│ ├── Weapon.cpp
│ ├── Armor.h
│ └── Armor.cpp
├── Locations/
│ ├── Shop.h
│ ├── Shop.cpp
│ ├── Camp.h
│ └── Camp.cpp
└── Saves/
├── save_slot_1.txt
├── save_slot_2.txt
├── save_slot_3.txt
└── adventure_summary.txt
```
## 主要系统
### 游戏系统
`Game` 类管理整体进度和冒险流程,包括:
- 主菜单
- 新游戏设置
- 加载和删除存档选项
- 难度选择
- 遭遇战进度
- 冒险结果和概要输出
### 战斗系统
`BattleSystem` 类处理回合制战斗,包括:
- 玩家回合
- 敌人回合
- 技能选择
- 物品使用
- 防御
- 状态效果处理
- 经验值和金币奖励
- 物品掉落
### 玩家与英雄
`Player` 类存储共享的进度系统,例如:
- 等级
- 经验值
- 金币
- 物品栏
- 装备
- 数据存档与加载
`Hero` 类定义了可玩角色,并拥有英雄的技能。
### 敌人
`Enemy` 基类支持:
- 经验值奖励
- 金币奖励
- 物品掉落
- 通过 `takeTurn` 进行的 AI 行为
- 伤害弱点与抗性
具体的敌人子类会覆盖其行为,以创造独特的战斗模式。
## 存档系统
共有 3 个存档位,并支持删除。
存档位文件示例:
```
save_slot_1.txt
save_slot_2.txt
save_slot_3.txt
```
保存的数据包括:
- 已击败的敌人数量
- 最终首领完成状态
- 英雄等级
- 经验值
- 金币
- 生命值与最大生命值
- 攻击力
- 装备的武器
- 装备的护甲
- 装备加成
- 物品栏物品
- 难度
游戏还会为每个存档位生成一份冒险概要。
冒险概要文件示例:
```
adventure_summary.txt
```
## 构建与运行
### 选项一:Xcode
1. 在 Xcode 中打开项目
2. 确保每个 `.cpp` 文件都包含在目标中
3. 构建并运行
**提醒:**
`项目目标 -> 构建阶段 -> 编译源代码`
所有 `.cpp` 文件都应出现在 **编译源代码** 列表中。
头文件 **无需** 添加到此处。
### 选项二:终端
从项目根目录使用兼容 C++17 的编译器进行编译:
```
clang++ -std=c++17 \
-I. \
-IGameTypes \
-IGame \
-ICharacters \
-IEnemies \
-IBattle \
-IAbilities \
-IStatusEffects \
-IItems \
-IEquipment \
-ILocations \
main.cpp \
Game/*.cpp \
Characters/*.cpp \
Enemies/*.cpp \
Battle/*.cpp \
Abilities/*.cpp \
StatusEffects/*.cpp \
Items/*.cpp \
Equipment/*.cpp \
Locations/*.cpp \
-o shadowbound
```
运行可执行文件:
```
./shadowbound
```
## 使用的 C++ 概念
本项目演示了:
- 类与对象
- 封装
- 继承
- 多态
- 虚函数
- 抽象基类
- `std::vector`
- `std::unique_ptr`
- `std::function`
- Lambda 表达式
- 文件输入/输出
- 随机数生成
- 枚举与枚举类
- 面向对象的游戏架构
## 未来改进
可能的未来升级包括:
- 在战斗菜单中添加技能描述
- 更多伤害类型
- 更多敌人技能
- 扩展的首领阶段
- 更多装备等级
- 商店物品出售功能
- 存档文件版本控制
- 随机遭遇战
- 任务系统
- 多个可玩职业
- 更好的 UI 格式化
- 单元测试
## 注意
暗影束缚目前是一个**可玩的控制台 RPG 原型**,专注于回合制战斗和面向对象的 C++ 设计。
该项目功能完备且模块化,有持续扩展和打磨的空间。
## 许可证
本项目是开源的,可供公众使用。
## 截图
标签:C++17项目, C++编程, RPG游戏, 商店, 回合制战斗, 多态性, 存档, 战斗系统, 控制台应用, 敌人AI, 文件I/O, 最终Boss, 游戏开发, 物品管理, 状态效果, 继承, 能力系统, 英雄成长, 装备系统, 资源管理, 进度系统, 难度选择, 面向对象设计