Historique des modifications - Message

Message #10718

Sujet: Sirius Engine - Un moteur de jeu simple et rapide


Type Date Auteur Contenu
Dernière modification 25-08-2012 22:35:08 bloupbloup
Objectif

Mon projet serait de créer une API assé complète de développement de jeu simple et rapide. Même si Irrlicht est vraiment simple d'utilisation je pense qu'on peut faire beaucoup plus simple, avec par exemple des classes unitée, terrain...

La première étape serait de créer un moteur de jeux (Sirius Engine) basé en Irrlicht et c++, fournissant des fonctions de haut niveau permettant de créerles éléments d'un jeu sans être noyé dans un code trop volumineux. Il gérera la physique, l'IA, le son... tout se qui est nécessaire a un jeu.

exemple :

Code c++ :

 
SUnity warrior;
warrior.loadSIRFile("media/sydney.sir");
warrior.add(this);

Ici on charge une unité a partir d'un fichier xml (.sir) et on l’ajoute sur la scène.

La deuxième étape serai de crée un éditeur de monde avec lequel on pourrais crée des scènes (terrain,unité, événement...) puis les sauvegarder pour enfin les utiliser avec Sirius Engine.

Sirius Engine

Pour vous donner une idée de l'organisation de Sirius Engine un petit schéma, un peu brouillon mais j'espère que vous comprenez le principe, il s'agit de tout centralisé dans une seule classe. Pour faire simple la classe application gère le menu et selon ce qu'il retourne lance une scène.




Pour être plus précis, la classe SiriusEngine inclura les autres classes du projet (SiriusScene,SiriusMenu...) et permettra de configurer tout ce qui est (driver,device). La classe SirusScene gérera tout ce qui est en rapport avec la scène (unité,environnement) en sachant que je considère qu'une scene a obligatoirement un seul terrain et un skydome. La classe SiriusMenu permettra de créer les menus du jeu. Et SiriusCore gérera tout ce qui la base de Sirius, comme les types, l'inclusion d'irrlicht et des principaux composants.

Lorsque quelqu'un voudra utiliser SiriusEngine il n'aura qu'a créer une classe Application qui héritera de SirusEngine. Toute les initialisations se feront dans la methode virtuelle « head » et le corp du programme dans la méthode virtuelle « body ». Il ne restera plus qu'à initialiser l'application avec la methode « start » et la lancer avec « run ».

La création d'une scene repose sur le même principe on crée une classe scene1 en incluant « SiriusEngine » et héritant de SirusScene, on initialise avec « head » et ensuite on utilise le « body ».

Extraits de code

SiriusEngine

Code c++ :

 
#ifndef SIRIUSENGINE_H
#define SIRIUSENGINE_H

#include "SiriusCore.h"
#include "SiriusScene.h"
#include "SiriusMenu.h"


namespace sir
{


    class SiriusEngine
    {

        public:
            SiriusEngine();
            virtual ~SiriusEngine();

        public:
            void setConfig(int screenX,int screenY,int engine);
            void start();
            virtual void head() {};
            virtual void body() {};

        public:
            EngineCore* getEngineCore() {return engineCore;}


        private:
            EngineCore* engineCore;

    };

}

#endif // SIRIUSENGINE_H


SiriusScene

Code c++ :


#ifndef SIRIUSSCENE_H
#define SIRIUSSCENE_H

#include "SiriusCore.h"


namespace sir
{

    class SiriusScene
    {
        public:
            SiriusScene();
            virtual ~SiriusScene();

        public:
            void start(EngineCore* pengineCore);
            void run();
            virtual void head() {};
            virtual void body() {};

        public:
            void loadTerrain(string file);
            void setTerrain();

        public:
            void useCameraFPS();

        public:
            irr::scene::ISceneManager * getSceneManager() {return sceneManager;}
            EngineCore* getEngineCore() {return engineCore;}
            scene::ICameraSceneNode* getCamera() {return  camera;}
            irr::scene::ITerrainSceneNode* getTerrain() {return  terrain;}



        private:
            irr::scene::ISceneManager *sceneManager;
            scene::ICameraSceneNode* camera;
            irr::scene::ITerrainSceneNode* terrain;
            EngineCore* engineCore;
            STerrain sceneTerrain;
            scene::ISceneNode* skybox;



    };

}

#endif // SIRIUSSCENE_H 


Main

Code c++ :


#include <iostream>
#include "include/Application.h"

using namespace std;

int main()
{
    Application app;
    app.setConfig(1280,720,OPENGL);
    app.start();

    return 0;
}
 


Application

Code c++ :


#ifndef APPLICATION_H
#define APPLICATION_H

#include <SiriusEngine.h>
#include "TestLevel.h"

using namespace sir;


class Application: public SiriusEngine
{
    public:
        Application();
        virtual ~Application();
        virtual void body();


    private:
        TestLevel testLevel;

};

#endif // APPLICATION_H
 


TestLevel

Code c++ :


#ifndef TESTLEVEL_H
#define TESTLEVEL_H

#include <SiriusEngine.h>

using namespace sir;

class TestLevel: public SiriusScene
{
    public:
        TestLevel();
        virtual ~TestLevel();
        virtual void head();
        virtual void body();

    private:
        SUnity warrior;



};

#endif // TESTLEVEL_H


Expériences

Je n'es pas beaucoup, d'expérience pour des projet de groupe cependant, j'ai déja travailler avec une équipe de développement pour un projet de 6 mois dans le cadre de mon BTS IRIST.
J'ai ue plusieurs projet solo pour les étude, siteweb, jeu caml en licence.
J'ai également beaucoup programmer au tout début sur Dark Basic Pro, une expérience assé sympathique je connais la bête maintenant^^
Sinon j'ai installer après une grande bataille ogre... mais j'ai préférer Irrlicht, plus simple et je trouve qu'il se valle quoi qu'en on dise... les graphique sont similaire voir mieux je trouve.
J'ai inclus irrlicht dans Qt pour crée un éditeur (C'est d'ici que vien l'idée de se projet) bien évidemment, j'ai pas ue envie de continuer, car je voulais crée l'engine avant. http://irrlicht.sourceforge.net/forum/viewtopic.php?t=46360&amp;p=268640
J'ai crée pas mal de mini jeux sur dark basic pro qui n'on jamais abouti sauf 1 ou 2.

Et une petite vidéo en bonus tongue (l'organisation du code a un peu changer)
http://www.youtube.com/watch?v=Y_S49474ntk


Conclusion

Je sais que ce projet peut paraître peu un fou, mais j'aime a pensé qu'il est réalisable, je ne suis pas un professionnel de ce genre de choses juste un étudiant en Licence qui se débrouille un peu en c++, Irrlicht et Qt (pour l'éditeur) et qui se dit... why not ?

Je ne sais pas combien de programmeur seront nécessaire, 4 ou 5 je pense. Je recherche plus tot des gens qui connaisse Irrlicht, c++ et vus que je ne m'y connais pas trop: les moteur physique, d'IA ... que l'on peu inclure a Irrlicht bien évidement.

Donc si vous êtes intéressé dite le moi:)
Création du message 25-08-2012 19:30:25 bloupbloup
Objectif

Mon projet serait de créer une API assé complète de développement de jeu simple et rapide. Même si Irrlicht est vraiment simple d'utilisation je pense qu'on peut faire beaucoup plus simple, avec par exemple des classes unitée, terrain...

La première étape serait de créer un moteur de jeux (Sirius Engine) basé en Irrlicht et c++, fournissant des fonctions de haut niveau permettant de créerles éléments d'un jeu sans être noyé dans un code trop volumineux. Il gérera la physique, l'IA, le son... tout se qui est nécessaire a un jeu.

exemple :

Code c++ :

 
SUnity warrior;
warrior.loadSIRFile("media/sydney.sir");
warrior.add(this);

Ici on charge une unité a partir d'un fichier xml (.sir) et on l’ajoute sur la scène.

La deuxième étape serai de crée un éditeur de monde avec lequel on pourrais crée des scènes (terrain,unité, événement...) puis les sauvegarder pour enfin les utiliser avec Sirius Engine.

Sirius Engine

Pour vous donner une idée de l'organisation de Sirius Engine un petit schéma, un peu brouillon mais j'espère que vous comprenez le principe, il s'agit de tout centralisé dans une seule classe. Pour faire simple la classe application gère le menu et selon ce qu'il retourne lance une scène.




Pour être plus précis, la classe SiriusEngine inclura les autres classes du projet (SiriusScene,SiriusMenu...) et permettra de configurer tout ce qui est (driver,device). La classe SirusScene gérera tout ce qui est en rapport avec la scène (unité,environnement) en sachant que je considère qu'une scene a obligatoirement un seul terrain et un skydome. La classe SiriusMenu permettra de créer les menus du jeu. Et SiriusCore gérera tout ce qui la base de Sirius, comme les types, l'inclusion d'irrlicht et des principaux composants.

Lorsque quelqu'un voudra utiliser SiriusEngine il n'aura qu'a créer une classe Application qui héritera de SirusEngine. Toute les initialisations se feront dans la methode virtuelle « head » et le corp du programme dans la méthode virtuelle « body ». Il ne restera plus qu'à initialiser l'application avec la methode « start » et la lancer avec « run ».

La création d'une scene repose sur le même principe on crée une classe scene1 en incluant « SiriusEngine » et héritant de SirusScene, on initialise avec « head » et ensuite on utilise le « body ».

Extraits de code

SiriusEngine

Code c++ :

 
#ifndef SIRIUSENGINE_H
#define SIRIUSENGINE_H

#include "SiriusCore.h"
#include "SiriusScene.h"
#include "SiriusMenu.h"


namespace sir
{


    class SiriusEngine
    {

        public:
            SiriusEngine();
            virtual ~SiriusEngine();

        public:
            void setConfig(int screenX,int screenY,int engine);
            void start();
            virtual void head() {};
            virtual void body() {};

        public:
            EngineCore* getEngineCore() {return engineCore;}


        private:
            EngineCore* engineCore;

    };

}

#endif // SIRIUSENGINE_H


SiriusScene

Code c++ :


#ifndef SIRIUSSCENE_H
#define SIRIUSSCENE_H

#include "SiriusCore.h"


namespace sir
{

    class SiriusScene
    {
        public:
            SiriusScene();
            virtual ~SiriusScene();

        public:
            void start(EngineCore* pengineCore);
            void run();
            virtual void head() {};
            virtual void body() {};

        public:
            void loadTerrain(string file);
            void setTerrain();

        public:
            void useCameraFPS();

        public:
            irr::scene::ISceneManager * getSceneManager() {return sceneManager;}
            EngineCore* getEngineCore() {return engineCore;}
            scene::ICameraSceneNode* getCamera() {return  camera;}
            irr::scene::ITerrainSceneNode* getTerrain() {return  terrain;}



        private:
            irr::scene::ISceneManager *sceneManager;
            scene::ICameraSceneNode* camera;
            irr::scene::ITerrainSceneNode* terrain;
            EngineCore* engineCore;
            STerrain sceneTerrain;
            scene::ISceneNode* skybox;



    };

}

#endif // SIRIUSSCENE_H 


Main

Code c++ :


#include <iostream>
#include "include/Application.h"

using namespace std;

int main()
{
    Application app;
    app.setConfig(1280,720,OPENGL);
    app.start();

    return 0;
}
 


Application

Code c++ :


#ifndef APPLICATION_H
#define APPLICATION_H

#include <SiriusEngine.h>
#include "TestLevel.h"

using namespace sir;


class Application: public SiriusEngine
{
    public:
        Application();
        virtual ~Application();
        virtual void body();


    private:
        TestLevel testLevel;

};

#endif // APPLICATION_H
 


TestLevel

Code c++ :


#ifndef TESTLEVEL_H
#define TESTLEVEL_H

#include <SiriusEngine.h>

using namespace sir;

class TestLevel: public SiriusScene
{
    public:
        TestLevel();
        virtual ~TestLevel();
        virtual void head();
        virtual void body();

    private:
        SUnity warrior;



};

#endif // TESTLEVEL_H


Expériences

Je n'es pas beaucoup, d'expérience pour des projet de groupe cependant, j'ai déja travailler avec une équipe de développement pour un projet de 6 mois dans le cadre de mon BTS IRIST.
J'ai ue plusieurs projet solo pour les étude, siteweb, jeu caml en licence.
J'ai également beaucoup programmer au tout début sur Dark Basic Pro, une expérience assé sympathique je connais la bête maintenant^^
Sinon j'ai installer après une grande bataille ogre... mais j'ai préférer Irrlicht, plus simple et je trouve qu'il se valle quoi qu'en on dise... les graphique sont similaire voir mieux je trouve.
J'ai inclus irrlicht dans Qt pour crée un éditeur (C'est d'ici que vien l'idée de se projet) bien évidemment, j'ai pas ue envie de continuer, car je voulais crée l'engine avant. http://irrlicht.sourceforge.net/forum/viewtopic.php?t=46360&amp;p=268640
J'ai crée pas mal de mini jeux sur dark basic pro qui n'on jamais abouti sauf 1 ou 2.

Et une petite vidéo en bonus tongue (l'organisation du code a un peu changer)
http://www.youtube.com/watch?v=Y_S49474ntk


Conclusion

Je sais que ce projet peut paraître peu un fou, mais j'aime a pensé qu'il est réalisable, je ne suis pas un professionnel de ce genre de choses juste un étudiant en Licence qui se débrouille un peu en c++, Irrlicht et Qt (pour l'éditeur) et qui se dit... why not ?

Je ne sais pas combien de programmeur seront nécessaire, 4 ou 5 je pense. Je recherche plus tot des gens qui connaisse Irrlicht, c++ et vus que je ne m'y connais pas trop: les moteur physique, d'IA ... que l'on peu inclure a Irrlicht bien évidement.

Donc si vous êtes intéressé dite le moi:)

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
565 invités en ligne
membre en ligne: -
RSS Feed