Я использую SDL уже несколько дней, и после нескольких уроков я решил начать разработку собственного клона Galaga. Однако у меня возникли трудности с поиском правильного макета для моего кода.
Например, у меня есть класс Космического корабля, определенный следующим образом:
class Spaceship : public Sprite
{
public:
Spaceship(SDL_Surface *surface);
Spaceship(const char *filename);
void handleEvent(SDL_Event *event);
};
где Sprite - базовый класс, который удерживает позицию на экране и т. Д.
Мой конструктор будет что-то вроде:
Spaceship::Spaceship(SDL_Surface *surface) :
Sprite(surface)
{
m_y = Game::screenHeight() - m_surface->h; //positions the ship at the bottom
}
Из того, что я видел, невозможно использовать Game :: screenWidth () [статический класс], потому что мне нужно было бы включить "game.h", который в основном является основным классом игры и включает в себя "Spacehip.h". ", создавая в основном бесконечный цикл (я пытался использовать #ifndef и т. д., но безуспешно).
Итак, вот мои вопросы:
- Можно ли достичь такого результата?
- Если это не так, как мне организовать свой код, чтобы избежать подобных проблем? Должен ли я создать класс Screen, который я использую для хранения информации об экране и т. Д., И включить его как из game.h, так и Spacehip.h?
РЕДАКТИРОВАТЬ: Я нашел способ преодолеть первую проблему (я просто добавил «game.h», включенный в файл cpp, а не в файл заголовка). Тем не менее, я все еще задаюсь вопросом, каков лучший выбор дизайна в этом случае.