古典的なヘビゲームをプログラムしようとしています。私は論理が機能しています(食べる、成長する、動くなど)。今度は素敵なグラフィックを追加したいと思います。これまでのところ、このコードで作成したいくつかの醜いグラフィックがあります: (疑似コード)
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() を持つクラス Drawable と、それぞれ独自の draw() メソッドを持つ派生クラス DrawableSnake、DrawableApple、DrawableWall、DrawableWhatever を追加したいと考えています。問題は、Tielable サブクラスをコレクション world_map から Drawable の適切なサブクラスに変換して、次のようにすることです。
void drawWorld(const std::vector<Tileable*> world_map) {
for each Tileable {
get drawable from tileable
drawable.draw()
}
}
RTTI で factory のようなものを使用することを考えています: (疑似コード)
Drawable convertToDrawable(Tileable* tileable){
if tileable is Apple return DrawableApple
if tileable is Wall return DrawableWall
etc.
}
RTTI を使用せずに、これを行うより良い方法はありますか?