term-rex
Version:
Terminal-based dinosaur runner game
97 lines (67 loc) • 3.92 kB
Markdown
# Term-Rex 游戏开发笔记
## 添加大鸟障碍物
在原有的仙人掌和小鸟障碍物基础上,我们添加了第三种障碍物:大鸟。
### 实现步骤
1. 在 `config.go` 中添加大鸟的精灵图和相关配置:
- 创建 `bigBirdFrames` 精灵图数组
- 添加 `bigBirdProbability` 变量控制大鸟出现概率
- 设置 `bigBirdFlightRow` 常量定义大鸟飞行高度
2. 修改 `StageConfig` 结构体,添加 `BigBirdProb` 字段,并更新各阶段配置
3. 重构 `obstacle.go`,采用面向对象的设计:
- 创建 `IObstacle` 接口定义所有障碍物的共同行为
- 实现 `BaseObstacle` 基类包含共享功能
- 为每种障碍物类型(`Cactus`、`Bird`、`BigBird`)创建独立的结构体
- 实现 `ObstacleManager` 管理障碍物的生成和更新
4. 更新 `collision.go` 中的碰撞检测逻辑,使用多态方式处理不同类型的障碍物
5. 修改 `game.go`、`stage.go` 和 `update.go`,使用新的障碍物管理系统
### 大鸟特点
- 比小鸟更大的精灵图,占用更多屏幕空间
- 飞行高度比小鸟更高(`bigBirdFlightRow = 7`)
- 使用紫色(`termbox.ColorMagenta`)显示,区别于小鸟的黄色
- 随着游戏进程,出现概率逐渐增加
### 游戏平衡
为保持游戏平衡,我们设置了合理的大鸟出现概率:
- 初始阶段:5%
- 中期阶段:10%
- 高级阶段:20%
这确保了游戏难度随着分数增加而逐渐提高,但不会过于困难。
### 面向对象设计优势
重构后的代码具有以下优点:
1. 更好的可读性:每种障碍物类型的行为被封装在各自的结构体中
2. 更高的可维护性:添加新类型的障碍物只需创建新的结构体并实现接口
3. 减少条件判断:使用多态替代了大量的 if-else 语句
4. 单一职责原则:每个结构体只负责一种类型的障碍物
5. 开闭原则:系统对扩展开放,对修改封闭
## 优化游戏场景
为了提升游戏的视觉效果,我们对场景进行了以下优化:
### 1. 添加地面装饰
在地面下方添加了各种装饰元素,如点、短线和其他符号,使地面看起来更加自然:
- 实现了 `GroundDecoration` 结构体,包含位置和字符信息
- 在 `renderer.go` 中添加了 `InitGroundDecorations()` 函数,随机生成地面装饰
- 更新了 `DrawGround()` 和 `drawGroundPartial()` 方法,绘制地面装饰
### 2. 添加天空云朵
在天空中添加了漂浮的云朵,增加了场景的层次感:
- 创建了 `Cloud` 结构体和 `CloudManager` 类来管理多个云朵
- 设计了多种云朵形状的 ASCII 艺术图案
- 实现了云朵的随机生成、移动和绘制功能
- 云朵以不同的速度移动,营造出远近层次感
- 云朵均匀分布在整个天空区域,而不仅仅是恐龙头顶
### 实现细节
1. 云朵系统:
- 云朵以不同速度移动(0.2-0.5 单位/帧)
- 当云朵移出屏幕左侧时,会在右侧重新生成,并保持适当间距避免重叠
- 游戏开始时随机生成 3-5 朵云,确保它们之间有足够的空间
- 云朵高度随机分布在天空的不同位置(行号 1-3)
- 优化了云朵的生成和移动逻辑,避免闪烁和重叠问题
- 所有云朵相关的配置参数都集中在 config.go 文件中,便于调整
### 实现细节
1. 云朵系统:
- 云朵以不同速度移动(0.2-0.5 单位/帧)
- 当云朵移出屏幕左侧时,会在右侧重新生成
- 游戏开始时随机生成 3-5 朵云
- 云朵高度随机分布在天空的不同位置
2. 地面装饰:
- 使用 `.`, `,`, `'`, `` ` ``, `-` 等字符作为地面装饰
- 装饰元素随机分布在地面下方
- 当屏幕宽度变化时,会重新生成地面装饰
这些视觉元素的添加使游戏场景更加生动和有趣,提升了整体游戏体验。