Exemple de jeu : le RPG


  1. Présentation du jeu

  2. Les classes à créer

  3. Les fichiers de données à créer

  4. Le programme principal

    /**************************************************************************/
    /* MAIN (.cpp) */
    /* */
    /* Date : 27 Decembre 2000 */
    /* Projet: RPG Auteur: Akhres Nader */
    /* */
    /* */
    /* */
    /**************************************************************************/


    #include <malloc.h>
    #include <iostream.h>
    #include <stdlib.h>
    #include <stdio.h>


    #include "Espace.hxx"
    #include "Vector.hxx"
    #include "GrafboxSDL.hxx"
    #include "Anim_dat.hxx"
    #include "List_dat.hxx"
    #include "InputKBSDL.hxx"
    #include "InputMOUSESDL.hxx"
    #include "TimerSDL.hxx"
    #include "Tile_Map.hxx"
    #include "PathGrav.hxx" //chemins
    #include "PathPoint.hxx"
    #include "Police.hxx"
    #include "Node.hxx"
    #include "DialogueU7.hxx"
    #include "RezzoBoxSDL.hxx"
    #include "PointeurMouse.hxx"
    #include "View.hxx"
    #include "PlayerCharacter.hxx"



    #include "songroku.hxx" //les sprites presents
    #include "mouton.hxx"
    #include "garde.hxx"
    #include "inventaire.hxx"
    #include "objet.hxx"


    #define ID_CLIENT1 1


    #define LARGEUR 640
    #define HAUTEUR 480


    int main(int , char **)
    {



    Timer* my_timer = new TimerSDL() ; //timer !

    my_timer->set_rate(60*50); //résolution temporelle 60*50 Hz

    //initialisation du contexte graphique
    Grafbox* my_Grafbox = new GrafboxSDL(LARGEUR,HAUTEUR);


    my_Grafbox->init_graf();






    Police my_police("fonte.spr");

    //chargement des mosaiques
    Tile_Map* my_Tile_map =new Tile_Map("map_rpg.tle",my_Grafbox);
    //chargement de la map du RPG
    my_Tile_map->ReadMap("map_rgb.map");

    espace my_espace(my_Grafbox,my_timer,my_Tile_map); //déclaration de l'espace de
    //simulation et de son contexte graphique


    Actif::set_espace(&my_espace); // les actifs sont définis dans un espace donné




    //on charge les données graphiques en mémoire
    Liste_anim_data* SPRITE_SONGROKU = new Liste_anim_data("songroku.dat");
    Liste_anim_data* SPRITE_GARDE = new Liste_anim_data("songroku.dat");
    Liste_anim_data* SPRITE_MOUTON = new Liste_anim_data("mouton.dat");
    Liste_anim_data* SPRITE_POINTEUR = new Liste_anim_data("pointeur.dat");
    Liste_anim_data* SPRITE_DRAGOUROU = new Liste_anim_data("dragourou.dat");
    Liste_anim_data* SPRITE_INVENTAIRE = new Liste_anim_data("inventaire.dat");
    Liste_anim_data* SPRITE_EPEE = new Liste_anim_data("objet_epee.dat");
    Liste_anim_data* SPRITE_ECU = new Liste_anim_data("objet_ecu.dat");
    Liste_anim_data* SPRITE_AXE = new Liste_anim_data("objet_axe.dat");
    Liste_anim_data* SPRITE_HAULME = new Liste_anim_data("objet_haulme.dat");
    Liste_anim_data* SPRITE_FUTE = new Liste_anim_data("objet_fute.dat");
    Liste_anim_data* SPRITE_GROLLES = new Liste_anim_data("objet_grolles.dat");
    Liste_anim_data* SPRITE_ARMURE = new Liste_anim_data("objet_armure.dat");
    Liste_anim_data* SPRITE_BUTTON_QUIT = new Liste_anim_data("button_quit.dat");




    //initialise le mode graphique




    Actif * MySongroku;

    View * my_view = new View(ID_CLIENT1,&my_espace,my_espace.grafbox,0,0,0,0,LARGEUR/2,HAUTEUR);
    InputMOUSESDL* my_inputMouse = new InputMOUSESDL(&MySongroku,my_view);
    inventaire * mon_inventaire = new inventaire(50,50,1,SPRITE_INVENTAIRE,SPRITE_BUTTON_QUIT);


    MySongroku = new Songroku(320,200/2,1,SPRITE_SONGROKU,my_inputMouse,mon_inventaire);
    my_view->set_target(MySongroku);
    //on les ajoute dans le tableau d'actifs (x y vitesse)
    my_espace.add(MySongroku);
    Actif * MyGarde;
    MyGarde = new Garde(320*2,200*2,1,SPRITE_GARDE,new DialogueU7("mairpawn.dlg"),my_inputMouse,&my_police);
    my_espace.add(MyGarde);
    Actif * MyPointeur = new PointeurMouse(SPRITE_POINTEUR,my_inputMouse,my_view);
    my_espace.add(MyPointeur);


    PathPoint * my_path = new PathPoint("cercle.pat");

    Actif * MonMoutonTournant = new Mouton(10+20+30,100,1,SPRITE_MOUTON,my_input2,my_path);
    my_espace.add(MonMoutonTournant);
    my_espace.add(my_view);
    my_espace.add(mon_inventaire);
    my_espace.transvase_public_to_private(mon_inventaire,my_view->get_id_client());
    my_espace.transvase_public_to_private(mon_inventaire->button_quit_,my_view->get_id_client());
    my_espace.transvase_public_to_private(MyPointeur,my_view->get_id_client());

    objet * ecu = new objet(50,10,1,SPRITE_ECU,DOS);
    objet * fute = new objet(50,10,1,SPRITE_FUTE,JAMBES);
    objet * epee = new objet(50,10,1,SPRITE_EPEE,MAIN_DROITE);
    objet * axe = new objet(50,10,1,SPRITE_AXE,MAIN_GAUCHE);
    objet * grolles = new objet(50,10,1,SPRITE_GROLLES,PIEDS);
    objet * haulme = new objet(50,10,1,SPRITE_HAULME,TETE);
    objet * armure = new objet(50,10,1,SPRITE_ARMURE,TRONC);
    my_espace.add(ecu);
    my_espace.add(fute);
    my_espace.add(epee);
    my_espace.add(axe);
    my_espace.add(grolles);
    my_espace.add(haulme);
    my_espace.add(armure);

    my_espace.transvase_public_to_private(ecu,my_view->get_id_client());
    my_espace.transvase_public_to_private(fute,my_view->get_id_client());
    my_espace.transvase_public_to_private(epee,my_view->get_id_client());
    my_espace.transvase_public_to_private(axe,my_view->get_id_client());
    my_espace.transvase_public_to_private(grolles,my_view->get_id_client());
    my_espace.transvase_public_to_private(haulme,my_view->get_id_client());
    my_espace.transvase_public_to_private(armure,my_view->get_id_client());

    ((PlayerCharacter *) MySongroku)->set_dos(ecu);
    ((PlayerCharacter *) MySongroku)->set_jambes(fute);
    ((PlayerCharacter *) MySongroku)->set_main_droite(epee);
    ((PlayerCharacter *) MySongroku)->set_main_gauche(axe);
    ((PlayerCharacter *) MySongroku)->set_pieds(grolles);
    ((PlayerCharacter *) MySongroku)->set_tete(haulme);
    ((PlayerCharacter *) MySongroku)->set_tronc(armure);

    /* boucle principale du jeu */

    for(;;)
    {
    my_timer->set_reftime(); //debut du code sous controle du timer

    my_espace.step(); //active tous les actifs

    my_espace.grafbox->put_text(50+LARGEUR/2,HAUTEUR-50,"http://tdrgame.free.fr",&my_police,my_view->largeur_,my_view->hauteur_);


    my_espace.grafbox->copy_virtual_to_screen(); //recopie a l'ecran

    my_timer->wait_while(15);//attend de maniere a avoir 5 fps
    if (my_input->go_escape()) //je me barre du jeu !
    break;
    }

    my_espace.grafbox->init_text(); //reviens au mode texte

    delete my_espace.tile_map;
    delete my_input;
    delete my_input2;


    delete my_espace.grafbox;
    delete my_espace.timer;


    return(0);
    }





  5. Screenshots

    je suis perdu!


    et bla bla bla!