2014-02-05 8 views
-1

Так я создаю простую игру карту инициализирован следующим образом:C++ массив с несколькими объектами

char map[MAP_SIZE][MAP_SIZE]; 

Теперь, как вы можете видеть, сейчас это просто символ. Проблема в том, что я хочу, чтобы на карте были разные объекты. Это то, что я сделал до сих пор, но я хотел посмотреть, был ли более эффективный способ (который, вероятно, есть).

class Treasure{}; 
class Chest{}; 
class Enemy{}; 
class Grunt : public Enemy{}; 
class Lieutenant : public Enemy{}; 
class Boss : public Enemy{}; 
class Final_Boss : public Enemy{}; 
class Secret_Room{}; 
class Map_Level{}; 

struct Entity 
{ 
    char display_char; //Simple character that is displayed on the the map 
    Treasure *t; 
    Chest *c; 
    Grunt *g; 
    Lieutenant *l; 
    Boss *b; 
    Final_Boss *f; 
    Secret_Room *s; 
    Map_Level *u; 
    Map_Level *d; 
}; 

Entity map[MAP_SIZE][MAP_SIZE]; 

Я думал о только проверка display_char и в зависимости от того, что это, просто удалив указатели объекта не нужно, но это, кажется, как много ненужной работы. Я надеюсь, что этот вопрос достаточно ясен и будет признателен за любую помощь в выяснении наилучшего способа сделать это.

+3

Вы можете иметь все, что наследовать от базового класса 'Entity' и просто' Карта сущности [] [] ' – yizzlez

+0

' boost :: variant'? – Borgleader

+4

@awesomeyi: Ну, это должны быть указатели Entity, или вы будете нарезать. –

ответ

0

Предполагая, что вы хотите только один враг на map вход, вы могли бы просто иметь Enemy * вместо того, чтобы весь список Grunt, Lieutenant и т.д.

+0

Это дало мне представление, которое поможет мне значительно. Спасибо за помощь!! – user3276472

Смежные вопросы