我正在尝试编写经典的蛇游戏。我有逻辑工作(吃饭,成长移动等)。现在我想添加一些漂亮的图形。到目前为止,我用这段代码制作了一些丑陋的图形:(伪代码)
void drawWorld(const std::vector<Tileable*> world_map) {
for each Tileable {
get position of Tileable
get color of Tileable
draw rectangle at position with color
}
}
Tileable 类表示 Snakes 地图上的对象 -> 苹果、墙壁甚至是蛇本身。它存储对象的位置,当蛇与对象等碰撞时会发生什么-> 逻辑。
但
如果苹果是圆形而不是矩形会更好吗?
所以我想用方法 .draw() 和派生类 DrawableSnake、DrawableApple、DrawableWall、DrawableWhatever 添加类 Drawable,每个类都有自己的 draw() 方法。问题是将 Tielable 子类从集合 world_map 转换为 Drawable 的适当子类,以具有如下内容:
void drawWorld(const std::vector<Tileable*> world_map) {
for each Tileable {
get drawable from tileable
drawable.draw()
}
}
我正在考虑使用带有 RTTI 的工厂之类的东西:(伪代码)
Drawable convertToDrawable(Tileable* tileable){
if tileable is Apple return DrawableApple
if tileable is Wall return DrawableWall
etc.
}
有没有更好的方法来做到这一点,而不使用 RTTI?