summaryrefslogtreecommitdiff
path: root/jouer.c
diff options
context:
space:
mode:
Diffstat (limited to 'jouer.c')
-rw-r--r--jouer.c444
1 files changed, 222 insertions, 222 deletions
diff --git a/jouer.c b/jouer.c
index 8ef1377..f1efab7 100644
--- a/jouer.c
+++ b/jouer.c
@@ -1,222 +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;
-}
-
-
-
-
+#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;
+}
+
+
+
+