summaryrefslogtreecommitdiff
path: root/jouer.c
diff options
context:
space:
mode:
Diffstat (limited to 'jouer.c')
-rw-r--r--jouer.c222
1 files changed, 222 insertions, 0 deletions
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 <stdlib.h>
+#include <stdio.h>
+#include <SDL/SDL.h>
+#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(Vtourennemi<Vnbennemis)
+ Vtourennemi++;
+ else if(Vtourennemi=Vnbennemis)
+ Vtourennemi=0;
+ }
+ Factionennemi(&Vtourennemi,surfaces,positions,ennemis,persos,Vnbennemis,&Vtour,Vtourallie);
+ } // les actions sont faites
+
+
+ // on vérifie à présent si on a gagné ou si on a perdu !
+ gagne=1;
+ perdu=1;
+ for(i=0;i<=Vnbennemis;i++)
+ {
+ if(ennemis[i].etat==VIE)
+ gagne=0;
+ }
+ for(i=0;i<3;i++)
+ {
+ if(persos[i].etat==VIE)
+ perdu=0;
+ }
+
+ // la y'a des trucs a mettre pour si on gagne ou on perd parce que sa fait assez pitié :p
+ if(perdu)
+ {
+ SDL_Delay(2000);
+ continuer=0;
+ }
+ else if(gagne)
+ {
+ SDL_Delay(2000);
+ continuer=0;
+ }
+ }
+ return 0;
+}
+
+void Fchoisirtypeennemis (PERSONNAGES persos[],SURFACES *surfaces,ENNEMIS ennemis[],int Vnbennemis)
+{
+ int moyenne=0;
+ int i;
+ for (i=0;i<3;i++)
+ moyenne+=persos[i].nv;
+ moyenne/=3;
+ if(moyenne<5)
+ {
+ for (i=0;i<=Vnbennemis;i++)
+ ennemis[i].classe=GUERRIER_GOBELIN; // pour l'instant pas d'autres choix xD
+ }
+}
+
+void Finitialiserpositionspersos (SURFACES *surfaces,POSITIONS *positions)
+{
+ int i;
+
+ for (i=0;i<3;i++)
+ positions->Vpositionpersos[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;
+}
+
+
+
+