Pietro Lorefice
Pietro Lorefice

Reputation: 1487

Organization of code for a game using SDL

I've been using SDL for some days now, and I decided after following some tutorials to start developing my own clone of Galaga. However, I had some difficulty trying to find a proper layout for my code.

For example, I have a Spaceship class defined as follows:

class Spaceship : public Sprite
{
public:
    Spaceship(SDL_Surface *surface);
    Spaceship(const char *filename);

    void handleEvent(SDL_Event *event);
};

where Sprite is a base class that holds the position on the screen and so on. My constructor would be something like:

Spaceship::Spaceship(SDL_Surface *surface) :
    Sprite(surface)
{
    m_y = Game::screenHeight() - m_surface->h; //positions the ship at the bottom
}

From what I've seen it's not possible to use Game::screenWidth() [static class] because I'd need to include "game.h", which is basically the main game class and includes "spaceship.h", creating basically an infinite loop (I've tried using #ifndef etc. with no success).

Is it possible to achieve this kind of result?

EDIT: I found a way to overcome the problem (I just added the "game.h" include in the cpp file and not in the header file).

Upvotes: 2

Views: 1077

Answers (2)

Komi Golov
Komi Golov

Reputation: 3471

If you only want to store pointers or references to those objects, then you can forward-declare one or both of the classes with class Game; or class Spaceship;. This is also fine if they take these objects as parameters or return them (with some exceptions, afaik).

If you actually want both to have a member of the other, then this is not possible, as each object would then have a copy of itself inside it.

Upvotes: 2

Oleksandr Pryimak
Oleksandr Pryimak

Reputation: 1581

You need to break a cycle in your dependency graph.

For example, one can add a field to your Spaceship class which saves a screen height.

Upvotes: 0

Related Questions