From f290b8cd7e40ed8688175fba312697f7da96a34e Mon Sep 17 00:00:00 2001 From: Olivier Gayot Date: Sun, 26 Oct 2014 18:15:21 +0000 Subject: game: Add a buildable version of the agme Signed-off-by: Olivier Gayot --- jouer.c | 222 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 jouer.c (limited to 'jouer.c') diff --git a/jouer.c b/jouer.c new file mode 100644 index 0000000..8ef1377 --- /dev/null +++ b/jouer.c @@ -0,0 +1,222 @@ +#include +#include +#include +#include "structures.h" +#include "constantes.h" +#include "prototypes.h" + +int Fjouer (SURFACES *surfaces, POSITIONS *positions, PERSONNAGES persos[],ENNEMIS ennemis[]) +{ + OBJET objets; + unsigned int continuer=1; + int selection=0; + int i; + SDL_Event event; + int Vtourallie=0; + int Vtourennemi=0; + int Vtour; + int Vnbennemis=0; + int page=0; + int nbactions=5; + unsigned int gagne,perdu; + if(surfaces->Pfondjeu!=NULL) + { + SDL_FreeSurface(surfaces->Pfondjeu); + surfaces->Pfondjeu=NULL; + } + Finitialiserpositionspersos(surfaces,positions); + Fblitterfond(surfaces); // on blit le fond du jeu + Fremplirobjets(&objets); // on monte les variables potions ether, etc + Fremplircompetencesallie(persos); // on initialise les pv, pm, xp etc DES PERSOS + Vnbennemis=Fcalculernbennemis(); // on tire aléatoirement le nombre d'ennemis présents dans le combat + Fchoisirtypeennemis(persos,surfaces,ennemis,Vnbennemis); // on choisit la classe des ennemis comme guerrier gobelin etc + Fremplirennemis(surfaces,Vnbennemis,ennemis); + Fblitterpersos(surfaces,positions,persos); // on blit les persos sur l'ecran + Fblitterennemis(surfaces,positions,ennemis,Vnbennemis); // idem pour les ennemis + Fremplircompetencesennemis(ennemis,Vnbennemis); // on initialise les pv, pm, exp, etc DES ENNEMIS + Vtour=(rand()%(1-0+1)+0); // on détermine aléatoirement si c'est les ennemis ou les persos qui tapent en premier + Fcolourselection(surfaces,persos,Vtourallie,positions); // on créé les surfaces rouges (pour le tour) + if(Vtour==ALLIE) + Fblitcoloredselection(surfaces,positions,Vtourallie,persos); + while (continuer) + { + if(Vtour==ALLIE) //si un player joue + { + while (persos[Vtourallie].etat==MORT) //si le perso selectionné est mort + { + if(Vtourallie<2) // si ce n'est pas le dernier + Vtourallie++; // on prend le perso suivant + else // sinon si c'est le dernier + Vtourallie=0; // on reprend le 1er + } + Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,ACTIONS,NULL); + SDL_WaitEvent(&event); + switch(event.type) + { + case SDL_KEYDOWN: + switch(event.key.keysym.unicode) + { + case SDLK_ESCAPE: + continuer=0; + break; + } + switch (event.key.keysym.sym) + { + case SDLK_UP: + if (selection!=0) + selection--; + else + selection=nbactions-1; + page=selection/3; + Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,ACTIONS,NULL); + break; + case SDLK_DOWN: + if (selection!=nbactions-1) + selection++; + else + selection=0; + page=selection/3; + Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,ACTIONS,NULL); + break; + case SDLK_RETURN: + if(selection==ATTAQUE) + Fattaquer(surfaces,positions,persos,&Vtourallie,ennemis,Vnbennemis,&Vtour); + else if(selection==MAGIE_BLANCHE) + Fselectionnermagieblanche (surfaces,positions,persos,&Vtourallie,ennemis,Vnbennemis,&Vtour); + else if(selection==MAGIE_NOIRE) + Fselectionnermagienoire (surfaces,positions,persos,&Vtourallie,ennemis,Vnbennemis,&Vtour); + else if(selection==TECHNIQUES){} + else if(selection==OBJETS) + Fselectionnerobjet(surfaces,positions,persos,&Vtourallie,ennemis,Vnbennemis,&objets,&Vtour); + break; + } + break; + } + } + else if(Vtour==ENNEMI) // sinon si c'est le cpu qui joue + { + while(ennemis[Vtourennemi].etat==MORT) + { + if(VtourennemiVpositionpersos[i].x=20; + positions->Vpositionpersos[1].y=YWIN/2-(surfaces->Tperso[1]->h/2); + positions->Vpositionpersos[0].y=positions->Vpositionpersos[1].y/2-surfaces->Tperso[0]->h/2; + positions->Vpositionpersos[2].y=YWIN-(20+surfaces->Tperso[2]->h); +} + +void Finitialiserpositionsennemis(SURFACES *surfaces,POSITIONS *positions,int Vnbennemis) +{ + if (Vnbennemis==0) + { + positions->Vpositionennemis[0].x=XWIN-20-surfaces->Tennemi[0]->w; + positions->Vpositionennemis[0].y=YWIN/2-surfaces->Tennemi[0]->h/2; + } + if (Vnbennemis==1) + { + positions->Vpositionennemis[0].x = XWIN - 20 - surfaces->Tennemi[0]->w; + positions->Vpositionennemis[0].y = YWIN/3 - surfaces->Tennemi[0]->h/2; + positions->Vpositionennemis[1].x = XWIN - 20 - surfaces->Tennemi[2]->w; + positions->Vpositionennemis[1].y = YWIN/3*2 - surfaces->Tennemi[1]->h/2; + } + else if (Vnbennemis==2) + { + positions->Vpositionennemis[1].x = XWIN - 20 - surfaces->Tennemi[1]->w; + positions->Vpositionennemis[1].y = YWIN/2 - surfaces->Tennemi[1]->h/2; + positions->Vpositionennemis[0].x = XWIN - 20 - surfaces->Tennemi[0]->w; + positions->Vpositionennemis[0].y = YWIN/4 - surfaces->Tennemi[1]->h/2; + positions->Vpositionennemis[2].x = XWIN - 20 - surfaces->Tennemi[2]->w; + positions->Vpositionennemis[2].y = YWIN/4*3 - surfaces->Tennemi[2]->h/2; + } + else if (Vnbennemis==3) + { + positions->Vpositionennemis[1].x = XWIN - 20 - surfaces->Tennemi[1]->w; + positions->Vpositionennemis[1].y = YWIN/5*2 - surfaces->Tennemi[1]->h/2; + positions->Vpositionennemis[2].x = XWIN - 20 - surfaces->Tennemi[2]->w; + positions->Vpositionennemis[2].y = YWIN/5*3 - surfaces->Tennemi[2]->h/2; + positions->Vpositionennemis[0].x = XWIN - surfaces->Tennemi[1]->w - surfaces->Tennemi[0]->w/2; + positions->Vpositionennemis[0].y = YWIN/5 -surfaces->Tennemi[0]->h/2; + positions->Vpositionennemis[3].x = XWIN - surfaces->Tennemi[2]->w - surfaces->Tennemi[3]->w/2; + positions->Vpositionennemis[3].y = YWIN/5*4 - surfaces->Tennemi[3]->h/2; + } + else if (Vnbennemis==4) + { + positions->Vpositionennemis[2].x = XWIN - 20 - surfaces->Tennemi[2]->w; + positions->Vpositionennemis[2].y = YWIN/2 - surfaces->Tennemi[2]->h/2; + positions->Vpositionennemis[1].x = XWIN - surfaces->Tennemi[2]->w - surfaces->Tennemi[1]->w/2; + positions->Vpositionennemis[1].y = YWIN/6*2 - surfaces->Tennemi[1]->h/2; + positions->Vpositionennemis[3].x = XWIN - surfaces->Tennemi[2]->w - surfaces->Tennemi[3]->w/2; + positions->Vpositionennemis[3].y = YWIN/6*4 - surfaces->Tennemi[3]->h/2; + positions->Vpositionennemis[0].x = XWIN - surfaces->Tennemi[2]->w - surfaces->Tennemi[1]->w - surfaces->Tennemi[0]->w/2; + positions->Vpositionennemis[0].y = YWIN/6 - surfaces->Tennemi[0]->h/2; + positions->Vpositionennemis[4].x = XWIN - surfaces->Tennemi[2]->w - surfaces->Tennemi[3]->w - surfaces->Tennemi[4]->w/2; + positions->Vpositionennemis[4].y = YWIN/6*5 - surfaces->Tennemi[4]->h/2; + } +} + +void Fremplirobjets(OBJET *objets) +{ + objets->potions=10; + objets->ethers=10; + objets->potionsplus=5; + objets->ethersplus=5; +} + + + + -- cgit v1.2.3