Bomberman en c++ et sdl, moteur terminé mais a améliorer, sans bugs connus.

Description

Bonjour à toutes et à tous, voici le premier code que j'offre a la communauté et j'espère que sa ne sera pas le dernier :)
Je vous est concocté un petit jeu en 2D, réplique du célèbre Bomberman, sauf que celui là s'appelle Bobyman (très original ^^)
Le code est plutôt bien structuré il me semble, c'est mon premier jeu avec un moteur plus ou moins complet, j'en avait fais pas mal pas complet avant enfaite ^^
Les caractéristiques du jeu :
- Gestion de menus, transitions (entre menu et partie), et de parties (quand vous jouez)
- Une campagne solo, ou vous affronterez des marmottes plutôt énervés, des élémentaires d'eau et de feu (très élémentaires :D)
- Un mode multijoueurs de 2 à 4 joueurs (pas d'IA pour ce mode, à implémenter si sa vous dis, les fonctions sont déjâ crées, plus qu'à les enrichires ;) )
- Les maps de la campagne solo sont chargés à partir de fichiers et les maps multi sont générées aléatoirements.
Il existe 3 mondes différents (seuls les textures et les monstres changent vraiment)
- La difficulté du jeu est plutôt élevé, en solo vous ne disposez que de 3 vies non récupérables et les maps sont riches en monstres :D
- L'IA est assez simpliste mais sa peut vous donnez l'idée de comment sa marche :P
- Vous pouvez éditer vos propres niveaux simplement avec le bloc-note (lisez d'abord le fichier "editor readme.txt" situé dans le dossier "resource\scenario"

Le développement de ce jeu est arrété, il n'avait pas pour objectifs d'être finis, c'était plus pour se poser les bonnes questions à propos de la conception de jeu.

Mais n'hésitez surtout pas à me donner plein de feedbacks et à poser des questions !!!

J'ai compilé sous Codeblocks sous Windows, pour passer sous Linux il doit vraiment pas falloir grand chose. Après si vous voulez changer de compilateur c'est plus délicat parce qu'il faut connaitre les librairies appelées.

Autre chose, les graphismes sont sommaires, le but de ce projet était orienté programmation, donc la campagne solo n'a pas de scénario, les transitions (j'ai quand même mis en place un système de slide qui change au bout d'un temps, on peut mettre plusieurs slides a la suite dans une transition donc) sont le plus concis possible et les graphismes des carreaux composants les cartes sont un peu pompés :P

La version téléchargeable sur ce site est limité aux seules sources, aucune autres ressources. Donc si vous prenez les bibliothèques adéquates (SDL, SDL_Image, FMOD) vous pourrez compilez, mais sans les images le programme risque fort de planter. C'est pourquoi je vous propose aussi de le télécharger directement à cette adresse :
http://gamesangel.free.fr/bobyman/BobyMan_Full.zip (faites attention il y a un espace en trop, je ne sais pas pourquoi il est rajouté automatiquement mais n'oubliez pas de l'enlever !)
Cette archive contient le jeu complet source + executable + librairie SDL, SDL_Image et FMOD, vous n'avez rien a faire, logiquement vous avez juste a ouvrir le projet (fichier Bomberman.cbp (ouai bomberman :p) ) avec Codeblocks et a appuyer sur F9 pour compiler :)
Ou bien vous pouvez lancer directement les 2 executables, un en fullscreen l'autre en windowed, c'est plus convivial.

Ci-dessous la source de engine.h pour vous mettre l'eau a la bouche (mmmmh xD)

Source / Exemple :


#ifndef _ENGINE_
#define _ENGINE_

/// @brief Classe ENGINE, Le moteur de l'application
class ENGINE
{
    private :

        /// @brief la frame en cours de traitement
        FRAME*          m_fFrame;
        /// @brief la couleur de fond par defaut
        SDL_Color       m_cBackgroundColor;

    public :

        //VARIABLES//
        /// @brief La largeur de l'ecran
        INT     m_iScreenWidth;
        /// @brief La hauteur de l'ecran
        INT     m_iScreenHeight;
        /// @brief La profondeur des couleurs
        INT     m_iColorDepth;
        /// @brief Mode plein ecran ou fenetre
        BOOL    m_bFullScreen;
        /// @brief Titre de l'application
        CHAR*   m_pTitle;
        /// @brief Le tableau contenant les entrees clavier (aussi souris)
        TOOLS::INPUT   m_iInput[323];
        /// @brief Le temps ecoule entre deux frames
        INT     m_iTimeElapsed;
        /// @brief Le temps depuis que l'application a ete lancee
        INT     m_iTime;

        //PARAMETRE DU JEU//
        /// @brief le nombre de joueur pour une partie multijoueur
        UINT            m_uNumPlayer;
        /// @brief le nombre de vie restante pour une partie en solo
        UINT            m_uPlayerLife;

        /// @brief doit on quitter le programme ?
        BOOL m_bExit;

        //METHODES//
        /// @brief Preinitialisation
        RESULT OneTimeSceneInit();
        /// @brief Initialisation
        virtual RESULT Init();
        /// @brief Gestion des entrees
        virtual RESULT Input();
        /// @brief Animation
        virtual RESULT FrameMove(INT iTimeElapsed);
        /// @brief Affichage
        virtual RESULT FrameRender(SDL_Surface* sScreen);
        /// @brief Destruction
        virtual RESULT Destroy();

        /// @brief Obtenir le nombre de joueurs (humains)
        UINT            getPlayerNumber()                                    {return m_uNumPlayer;}
        /// @brief Obtenir le nombre de vies restantes
        UINT            getPlayerLife()                                      {return m_uPlayerLife;}
        /// @brief Obtenir la frame en cours de traitement
        FRAME*&         getFrame()                                           {return m_fFrame;}
        /// @brief Definir le nombre de joueurs (humains)
        VOID            setPlayerNumber(UINT uNumPlayer)                     {m_uNumPlayer=uNumPlayer;}
        /// @brief Definir le nombre de vies restantes
        VOID            setPlayerLife(UINT uPlayerLife)                      {m_uPlayerLife=uPlayerLife;}
        /// @brief Definir la frame en cours de traitement
        VOID            setFrame(FRAME* fFrame)                              {m_fFrame=fFrame;}
        /// @brief Definir si on doit quitter l'application ou pas
        VOID            setExit(BOOL bExit)                                  {m_bExit=bExit;}

};

#endif

Conclusion :


Amusez-vous bien ;)

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.