Moteur 2d avec sdl (poo)

Description

Bonjour à tous !
Voici une nouvelle version de mon moteur 2D, toujours en utilisant la librairie SDL mais cette fois en programmant avec des classes. Il suffit de déziper tous les fichiers dans un même dossier et de lancer l'exécutable...

Je vous explique un peu le fonctionnement : la classe Map permet de créer le terrain, c'est-à-dire le sol, et les décors, comme les arbres, c'est-à-dire ce qu'on ne peut pas (normalement, vous allez comprendre pourquoi je dis ça !) traverser. Chacun de ces objets s'affiche tout seul par un simple appel de fonction. Le personnage est un objet à part, indépendant si on peut dire ça, et n'est pas créé ni affiché ni déplacé par le biais de la classe Map.

J'attends vos commentaires et surtout votre aide sur la gestion des personnages. Dans un jeu chaque perso est trop unique pour être créé à l'intérieur de ma classe Map (c'est pour ça que je les qualifie d'indépendants) mais je dois absolument accéder à certaines variables qui sont privées dans cette même classe, utiles pour gérer par exemple les collisions (qui, vous le remarquerez vous-même, sont inexistantes dans mon moteur... d'où le "normalement" de tout à l'heure ;))...
Je vous donne juste un aperçu des classes que j'ai créé, ci-dessous...

Source / Exemple :


class Terrain
{
  public:
    Terrain(int,int,char*);
    void Dessiner(SDL_Surface*,int,int);
  private:
    const static int W_TILE = 32;
    const static int H_TILE = 40;
    int XTerrain,YTerrain;
    SDL_Surface* SurfaceTerrain;
    SDL_Rect RectTerrain;
};

class Decor
{
  public:
    Decor(int,int,char*);
    void Dessiner(SDL_Surface*,int,int);
  private:
    const static int W_TILE = 32;
    const static int H_TILE = 40;
    int XDecor,YDecor;
    SDL_Surface* SurfaceDecor;
    SDL_Rect RectDecor;
};

class Perso
{
  public:
    Perso(int,int,char*);
    void DeplacerHaut(char*);
    void DeplacerDroite(char*);
    void DeplacerBas(char*);
    void DeplacerGauche(char*);
    void Dessiner(SDL_Surface*,int,int);
  private:
    const static int W_MAP = 40;
    const static int H_MAP = 24;
    const static int W_TILE = 32;
    const static int H_TILE = 40;
    int XPerso,YPerso;
    SDL_Surface* SurfacePerso;
    SDL_Rect RectPerso;
};

class Map
{
  public:
    Map(int,int);
    void AjouterTerrain(int,int,char*);
    void AjouterDecor(int,int,char*);
    void DeplacerCameraHaut();
    void DeplacerCameraDroite();
    void DeplacerCameraBas();
    void DeplacerCameraGauche();
    void Dessiner(SDL_Surface*);
    int XCam();
    int YCam();
  private:
    const static int W_MAP = 40;
    const static int H_MAP = 24;
    const static int W_ECRAN = 20;
    const static int H_ECRAN = 12;
    int XCamera, YCamera;
    Terrain* MapTerrain[W_MAP][H_MAP];
    Decor* MapDecor[W_MAP][H_MAP];
};

Conclusion :


J'explique vite fait les touches parce que c'est vraiment pas compliqué : flèches directionnelles pour faire bouger le perso et Echap pour quitter... voilà ;)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (Tijee)