summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile30
-rw-r--r--actions.c536
-rw-r--r--blits.c400
-rw-r--r--competences.c120
-rw-r--r--constantes.h169
-rw-r--r--ia.c66
-rw-r--r--images/Thumbs.dbbin0 -> 50176 bytes
-rw-r--r--images/chasseur.jpgbin0 -> 7089 bytes
-rw-r--r--images/gobelin.bmpbin0 -> 35278 bytes
-rw-r--r--images/jeu/Thumbs.dbbin0 -> 27648 bytes
-rw-r--r--images/jeu/active.bmpbin0 -> 406 bytes
-rw-r--r--images/jeu/cadre_actions.bmpbin0 -> 117326 bytes
-rw-r--r--images/jeu/cadre_actions_select.bmpbin0 -> 32346 bytes
-rw-r--r--images/jeu/cadre_actions_unactive.bmpbin0 -> 32346 bytes
-rw-r--r--images/jeu/cadre_cible.bmpbin0 -> 265934 bytes
-rw-r--r--images/jeu/curseur.bmpbin0 -> 6854 bytes
-rw-r--r--images/jeu/curseurpersos.bmpbin0 -> 6854 bytes
-rw-r--r--images/jeu/desactive.bmpbin0 -> 406 bytes
-rw-r--r--images/jeu/mort.bmpbin0 -> 17854 bytes
-rw-r--r--images/jeu/textures/Thumbs.dbbin0 -> 19456 bytes
-rw-r--r--images/jeu/textures/background.jpgbin0 -> 226634 bytes
-rw-r--r--images/jeu/textures/floor.jpgbin0 -> 3171 bytes
-rw-r--r--images/map/coffre.bmpbin0 -> 12342 bytes
-rw-r--r--images/map/mur.bmpbin0 -> 12342 bytes
-rw-r--r--images/map/perso.bmpbin0 -> 12342 bytes
-rw-r--r--images/map/sol.bmpbin0 -> 12342 bytes
-rw-r--r--images/menu_choix_classe/Thumbs.dbbin0 -> 29696 bytes
-rw-r--r--images/menu_choix_classe/paladin.bmpbin0 -> 2359350 bytes
-rw-r--r--images/menu_choix_classe/pretre.bmpbin0 -> 2359350 bytes
-rw-r--r--images/menu_choix_classe/rien.bmpbin0 -> 2359350 bytes
-rw-r--r--images/menu_choix_classe/voleur.bmpbin0 -> 2359350 bytes
-rw-r--r--images/menu_principal/Thumbs.dbbin0 -> 59904 bytes
-rw-r--r--images/menu_principal/fond.bmpbin0 -> 2359350 bytes
-rw-r--r--images/menu_principal/jouer.bmpbin0 -> 2359350 bytes
-rw-r--r--images/menu_principal/options.bmpbin0 -> 2359350 bytes
-rw-r--r--images/menu_principal/quitter.bmpbin0 -> 2359350 bytes
-rw-r--r--images/menu_principal/rien.bmpbin0 -> 2359350 bytes
-rw-r--r--images/paladin.bmpbin0 -> 93174 bytes
-rw-r--r--images/prêtre.bmpbin0 -> 66018 bytes
-rw-r--r--images/sorcier.jpgbin0 -> 12804 bytes
-rw-r--r--images/voleur.bmpbin0 -> 91358 bytes
-rw-r--r--jouer.c222
-rw-r--r--magies.c255
-rw-r--r--main.c382
-rw-r--r--map.c130
-rw-r--r--menuchoixpersos.c154
-rw-r--r--menuoptions.c10
-rw-r--r--menuprincipal.c86
-rw-r--r--prototypes.h61
-rw-r--r--structures.h119
50 files changed, 2740 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..689b79f
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,30 @@
+CC ?= gcc
+CFLAGS += -W -Wall -std=c99 -Wextra `sdl-config --cflags`
+LDFLAGS += `sdl-config --libs` -lSDL_image -lSDL_ttf
+NAME = a.out
+SRC = $(wildcard *.c)
+
+all: depend $(NAME)
+
+depend: .depend
+
+.depend: $(SRC)
+ @$(RM) .depend
+ @$(CC) $(CFLAGS) -MM $^ > .depend
+
+include .depend
+
+OBJ = $(SRC:.c=.o)
+
+$(NAME): $(OBJ)
+ $(CC) -o $@ $^ $(LDFLAGS)
+
+clean:
+ $(RM) $(OBJ)
+
+fclean: clean
+ $(RM) $(NAME)
+
+re: fclean all
+
+.PHONY: all depend clean fclean all re
diff --git a/actions.c b/actions.c
new file mode 100644
index 0000000..ebf3af8
--- /dev/null
+++ b/actions.c
@@ -0,0 +1,536 @@
+#include <SDL/SDL.h>
+#include "structures.h"
+#include "constantes.h"
+#include "prototypes.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+void Fattaquer(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,int *Vtour)
+{
+ int max;
+ int min;
+ unsigned int continuer = 1;
+ int degats;
+ unsigned int Bdegats=DEGATS;
+ int clan=ENNEMI;
+ int selection = 0;
+ SDL_Event event;
+ int delay=1;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadreactions,surfaces->Pecran,&positions->Vpositioncadreactions);
+ while(ennemis[selection].etat==MORT)
+ selection++;
+ Fchangercurseurennemis (surfaces,positions,selection,ennemis);
+ while (continuer)
+ {
+ SDL_Flip (surfaces->Pecran);
+ SDL_WaitEvent (&event);
+ switch (event.type)
+ {
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym)
+ {
+ case SDLK_ESCAPE:
+ delay=0;
+ continuer = 0;
+ if(clan==ENNEMI)
+ {
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);
+ }
+ else
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);
+ SDL_Flip (surfaces->Pecran);
+ break;
+ SELECTION_CIBLE()
+ case SDLK_RETURN:
+ continuer=0;
+ max=Fcalculerdegats(persos,Vtourallie,&min,ennemis,selection,clan,TYPE_ATTAQUE);
+ degats=(rand()%(max-min+1))+min;
+ if(degats<0)
+ degats=0;
+ if(clan==ENNEMI) // si l'action se fait sur un ennemi
+ {
+ if(Bdegats==DEGATS) // si on inflige des degats
+ ennemis[selection].pv-=degats; // on vire des pv
+ else // si c'est un soin pour x raison
+ ennemis[selection].pv+=degats; // on rajoute des pv
+ if(ennemis[selection].pv<=0)
+ {
+ ennemis[selection].pv=0;
+ ennemis[selection].etat=MORT;
+ positions->Vpositionmort.x=positions->Vpositionennemis[selection].x+surfaces->Tennemi[selection]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionennemis[selection].y+surfaces->Tennemi[selection]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ else if(ennemis[selection].pv>ennemis[selection].pvinitiaux)
+ ennemis[selection].pv=ennemis[selection].pvinitiaux;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);
+ }
+ else // sinon si on actionne sur un allié
+ {
+ if(Bdegats==DEGATS)
+ persos[selection].pv-=degats;
+ else
+ persos[selection].pv+=degats;
+ if(persos[selection].pv<=0)
+ {
+ persos[selection].pv=0;
+ persos[selection].etat=MORT;
+ positions->Vpositionmort.x=positions->Vpositionpersos[selection].x+surfaces->Tperso[selection]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionpersos[selection].y+surfaces->Tperso[selection]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ else if(persos[selection].pv>persos[selection].pvinitiaux)
+ persos[selection].pv=persos[selection].pvinitiaux;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);
+ }
+ if(Bdegats==DEGATS)
+ Fafficherdegats (surfaces,positions,degats,clan,selection,persos);
+ else
+ Faffichersoins (surfaces,positions,degats,clan,selection,persos);
+ if(clan==ENNEMI) // si l'ennemi est visé
+ {
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);
+ SDL_Flip (surfaces->Pecran); // on supprime le cadre cible de l'ecran
+ }
+ if (*Vtourallie==2)
+ {
+ inverse(Vtour);
+ *Vtourallie=0;
+ }
+ else
+ {
+ (*Vtourallie)++;
+ Fblitterpersos(surfaces,positions,persos);
+ Fblitcoloredselection(surfaces,positions,*Vtourallie,persos);
+ }
+ break;
+ }
+ break;
+
+ }
+ }
+ if (delay)
+ SDL_Delay(1000);
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats);
+ SDL_Flip(surfaces->Pecran);
+}
+
+int Fcalculerdegats(PERSONNAGES persos[],int *Vtourallie,int *min,ENNEMIS ennemis[],int selection,int camp,int type)
+{
+ unsigned int degats;
+ int max;
+ int taux;
+
+ if(type==TYPE_ATTAQUE)
+ {
+ if(camp==ENNEMI)
+ degats=persos[*Vtourallie].force*60-ennemis[selection].defense*50;
+ else
+ degats=persos[*Vtourallie].force*60-persos[selection].defense*50;
+ }
+ else
+ {
+ if(camp==ENNEMI)
+ degats=persos[*Vtourallie].magie*60-ennemis[selection].defensemagique*50;
+ else
+ degats=persos[*Vtourallie].magie*60-persos[selection].defensemagique*50;
+ }
+ taux=degats/4;
+ max=degats+taux;
+ *min=degats-taux;
+
+ return max;
+}
+
+void Fselectionnermagienoire(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,int *Vtour)
+{
+ SDL_Event event;
+ unsigned int continuer=1;
+ int nbactions=5;
+ unsigned int element;
+ int page=0;
+ int selection=0;
+
+ while (continuer)
+ {
+ Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,MAGIE_NOIRE,NULL);
+ SDL_WaitEvent (&event);
+ switch (event.type)
+ {
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym)
+ {
+ case SDLK_ESCAPE:
+ continuer=0;
+ break;
+ case SDLK_UP:
+ if(selection!=0)
+ selection--;
+ else
+ selection=nbactions-1;
+ page=selection/3;
+ Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,MAGIE_NOIRE,NULL);
+ break;
+ case SDLK_DOWN:
+ if (selection!=nbactions-1)
+ selection++;
+ else
+ selection=0;
+ page=selection/3;
+ Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,MAGIE_NOIRE,NULL);
+ break;
+ case SDLK_RETURN:
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats);
+ SDL_Flip(surfaces->Pecran);
+ continuer=Fmagieelement(surfaces,positions,persos,Vtourallie,ennemis,Vnbennemis,selection,Vtour);
+ break;
+ }
+ }
+ }
+}
+
+void Fselectionnermagieblanche(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,int *Vtour)
+{
+ int continuer=1;
+ int nbactions=1;
+ int page=0;
+ int selection=0;
+ SDL_Event event;
+
+ while (continuer)
+ {
+ Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,MAGIE_BLANCHE,NULL);
+ SDL_WaitEvent (&event);
+ switch (event.type)
+ {
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym)
+ {
+ case SDLK_ESCAPE:
+ continuer=0;
+ break;
+ case SDLK_UP:
+ if (selection!=0)
+ selection--;
+ else
+ selection=nbactions-1;
+ page=selection/3;
+ Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,MAGIE_BLANCHE,NULL);
+ break;
+ case SDLK_DOWN:
+ if(selection!=nbactions-1)
+ selection++;
+ else
+ selection=0;
+ page=selection/3;
+ Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,MAGIE_BLANCHE,NULL);
+ break;
+ case SDLK_RETURN:
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats);
+ SDL_Flip(surfaces->Pecran);
+ if(selection==SOIN)
+ continuer=Fmagiesoin(surfaces,positions,persos,Vtourallie,ennemis,Vnbennemis,Vtour);
+ break;
+ }
+ }
+ }
+}
+
+void Fselectionnerobjet(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,OBJET *objets,int*Vtour)
+{
+ SDL_Event event;
+ unsigned int continuer=1;
+ int nbactions=4;
+ int page=0;
+ int selection=0;
+
+ while (continuer)
+ {
+ Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,OBJETS,objets);
+ SDL_WaitEvent (&event);
+ switch (event.type)
+ {
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym)
+ {
+ case SDLK_ESCAPE:
+ continuer=0;
+ break;
+ case SDLK_UP:
+ if(selection!=0)
+ selection--;
+ else
+ selection=nbactions-1;
+ page=selection/3;
+ Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,OBJETS,objets);
+ break;
+ case SDLK_DOWN:
+ if (selection!=nbactions-1)
+ selection++;
+ else
+ selection=0;
+ page=selection/3;
+ Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,OBJETS,objets);
+ break;
+ case SDLK_RETURN:
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats);
+ SDL_Flip(surfaces->Pecran);
+ if(page==0)
+ {
+ if(selection==POTION)
+ continuer=Fpotion(surfaces,positions,persos,Vtourallie,ennemis,Vnbennemis,objets,selection,Vtour);
+ else if(selection==ETHER)
+ continuer=Fether(surfaces,positions,persos,Vtourallie,ennemis,Vnbennemis,objets,selection,Vtour);
+ else if(selection==POTIONPLUS)
+ continuer=Fpotion(surfaces,positions,persos,Vtourallie,ennemis,Vnbennemis,objets,selection,Vtour);
+ }
+ else if(page==1)
+ {
+ if(selection==ETHERPLUS)
+ continuer=Fether(surfaces,positions,persos,Vtourallie,ennemis,Vnbennemis,objets,selection,Vtour);
+ }
+ break;
+ }
+ }
+ }
+}
+
+int Fpotion(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,OBJET *objets,int type,int*Vtour)
+{
+ if(type==POTION&&objets->potions<=0)
+ return 1;
+ else if(type==POTIONPLUS&&objets->potionsplus<=0)
+ return 1;
+ else
+ {
+ int continuer=1;
+ SDL_Event event;
+ int selection=0;
+ int delay=1;
+ int soins=0;
+ int Bdegats=SOINS;
+ int clan=ALLIE;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadreactions,surfaces->Pecran,&positions->Vpositioncadreactions);
+ while(persos[selection].etat==MORT)
+ selection++;
+ Fchangercurseurpersos (surfaces,positions,selection,persos);
+ while(continuer)
+ {
+ SDL_WaitEvent(&event);
+ switch(event.type)
+ {
+ case SDL_KEYDOWN:
+ switch(event.key.keysym.sym)
+ {
+ case SDLK_ESCAPE:
+ delay=0;
+ continuer = 0;
+ if(clan==ENNEMI)
+ {
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);
+ }
+ else
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);
+ SDL_Flip (surfaces->Pecran);
+ break;
+ SELECTION_CIBLE()
+ case SDLK_RETURN:
+ if(type==POTION)
+ soins=1000;
+ else if(type==POTIONPLUS)
+ soins=4000;
+ if(clan==ENNEMI)
+ {
+ if(Bdegats==DEGATS)
+ ennemis[selection].pv-=soins;
+ else
+ ennemis[selection].pv+=soins;
+ if(ennemis[selection].pv<=0)
+ {
+ ennemis[selection].pv=0;
+ ennemis[selection].etat=MORT;
+ positions->Vpositionmort.x=positions->Vpositionennemis[selection].x+surfaces->Tennemi[selection]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionennemis[selection].y+surfaces->Tennemi[selection]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ else if(ennemis[selection].pv>ennemis[selection].pvinitiaux)
+ ennemis[selection].pv=ennemis[selection].pvinitiaux;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);
+ }
+ else
+ {
+ if(Bdegats==DEGATS)
+ persos[selection].pv-=soins;
+ else
+ persos[selection].pv+=soins;
+ if(persos[selection].pv<=0)
+ {
+ persos[selection].pv=0;
+ persos[selection].etat=MORT;
+ positions->Vpositionmort.x=positions->Vpositionpersos[selection].x+surfaces->Tperso[selection]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionpersos[selection].y+surfaces->Tperso[selection]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ else if(persos[selection].pv>persos[selection].pvinitiaux)
+ persos[selection].pv=persos[selection].pvinitiaux;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);
+ }
+ if(Bdegats==DEGATS)
+ Fafficherdegats (surfaces,positions,soins,clan,selection,persos);
+ else
+ Faffichersoins (surfaces,positions,soins,clan,selection,persos);
+ if(clan==ENNEMI)
+ {
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);
+ SDL_Flip (surfaces->Pecran);
+ }
+ if (*Vtourallie==2)
+ {
+ *Vtourallie=0;
+ inverse(Vtour);
+ }
+ else
+ {
+ Fblitcoloredselection(surfaces,positions,*Vtourallie,persos);
+ (*Vtourallie)++;
+ }
+ continuer=0;
+ if(type==POTION)
+ objets->potions--;
+ else if(type==POTIONPLUS)
+ objets->potionsplus--;
+ break;
+ }
+ break;
+ }
+ }
+ if (delay)
+ SDL_Delay(1000);
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats);
+ SDL_Flip(surfaces->Pecran);
+ return continuer;
+ }
+}
+
+int Fether(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,OBJET *objets,int type,int *Vtour)
+{
+ if(type==ETHER&&objets->ethers<=0)
+ return 1;
+ else if(type==ETHERPLUS&&objets->ethersplus<=0)
+ return 1;
+ else
+ {
+ int continuer=1;
+ SDL_Event event;
+ int delay=1;
+ int selection=0;
+ int soins=0;
+ int Bdegats=SOINS;
+ int clan=ALLIE;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadreactions,surfaces->Pecran,&positions->Vpositioncadreactions);
+ while(persos[selection].etat==MORT)
+ selection++;
+ Fchangercurseurpersos (surfaces,positions,selection,persos);
+ while(continuer)
+ {
+ SDL_WaitEvent(&event);
+ switch(event.type)
+ {
+ case SDL_KEYDOWN:
+ switch(event.key.keysym.sym)
+ {
+ case SDLK_ESCAPE:
+ delay=0;
+ continuer = 0;
+ if(clan==ENNEMI)
+ {
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);
+ }
+ else
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);
+ SDL_Flip (surfaces->Pecran);
+ break;
+ SELECTION_CIBLE()
+ case SDLK_RETURN:
+ if(type==ETHER)
+ soins=10;
+ else if(type==ETHERPLUS)
+ soins=40;
+ if(clan==ENNEMI)
+ {
+ if(Bdegats==DEGATS)
+ ennemis[selection].pm-=soins;
+ else
+ ennemis[selection].pm+=soins;
+ if(ennemis[selection].pm<=0)
+ {
+ ennemis[selection].pm=0;
+ ennemis[selection].etat=MORT;
+ positions->Vpositionmort.x=positions->Vpositionennemis[selection].x+surfaces->Tennemi[selection]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionennemis[selection].y+surfaces->Tennemi[selection]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ else if(ennemis[selection].pm>ennemis[selection].pminitiaux)
+ ennemis[selection].pm=ennemis[selection].pminitiaux;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);
+ }
+ else
+ {
+ if(Bdegats==DEGATS)
+ persos[selection].pm-=soins;
+ else
+ persos[selection].pm+=soins;
+ if(persos[selection].pm<=0)
+ {
+ persos[selection].pm=0;
+ persos[selection].etat=MORT;
+ positions->Vpositionmort.x=positions->Vpositionpersos[selection].x+surfaces->Tperso[selection]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionpersos[selection].y+surfaces->Tperso[selection]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ else if(persos[selection].pm>persos[selection].pminitiaux)
+ persos[selection].pm=persos[selection].pminitiaux;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);
+ }
+ if(Bdegats==DEGATS)
+ Fafficherdegats (surfaces,positions,soins,clan,selection,persos);
+ else
+ Faffichersoins (surfaces,positions,soins,clan,selection,persos);
+ if(clan==ENNEMI)
+ {
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);
+ SDL_Flip (surfaces->Pecran);
+ }
+ if (*Vtourallie==2)
+ {
+ *Vtourallie=0;
+ inverse(Vtour);
+ }
+ else
+ {
+ (*Vtourallie)++;
+ Fblitcoloredselection(surfaces,positions,*Vtourallie,persos);
+ }
+ continuer=0;
+ if(type==ETHER)
+ objets->ethers--;
+ else if(type==ETHERPLUS)
+ objets->ethersplus--;
+ break;
+ }
+ break;
+ }
+ }
+ if (delay)
+ SDL_Delay(1000);
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats);
+ SDL_Flip(surfaces->Pecran);
+ return continuer;
+ }
+}
+
+
+
diff --git a/blits.c b/blits.c
new file mode 100644
index 0000000..7722a9a
--- /dev/null
+++ b/blits.c
@@ -0,0 +1,400 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <SDL/SDL.h>
+#include "structures.h"
+#include "constantes.h"
+#include "prototypes.h"
+#include <SDL/SDL_ttf.h>
+#include <SDL/SDL_image.h>
+#include <string.h>
+
+void Fblitterennemis (SURFACES *surfaces, POSITIONS *positions,ENNEMIS ennemis[],int Vnbennemis)
+{
+ int i;
+ Finitialiserpositionsennemis (surfaces,positions,Vnbennemis);
+ for (i = 0;i <= Vnbennemis;i++)
+ SDL_BlitSurface (surfaces->Tennemi[i],NULL,surfaces->Pecran,&positions->Vpositionennemis[i]);
+ SDL_Flip (surfaces->Pecran);
+}
+
+void Fblitterpersos (SURFACES *surfaces, POSITIONS *positions, PERSONNAGES persos[])
+{
+ int i;
+ for(i=0;i<3;i++)
+ {
+ if(persos[i].classe==PALADIN)
+ SDL_BlitSurface(surfaces->Ppaladin,NULL,surfaces->Pecran,&positions->Vpositionpersos[i]);
+ else if(persos[i].classe==PRETRE)
+ SDL_BlitSurface (surfaces->Ppretre,NULL,surfaces->Pecran,&positions->Vpositionpersos[i]);
+ else if(persos[i].classe==VOLEUR)
+ SDL_BlitSurface(surfaces->Pvoleur,NULL,surfaces->Pecran,&positions->Vpositionpersos[i]);
+ if(persos[i].etat==MORT)
+ {
+ positions->Vpositionmort.x=positions->Vpositionpersos[i].x+surfaces->Tperso[i]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionpersos[i].y+surfaces->Tperso[i]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ Fblitterpmpvpersos(surfaces,positions,persos,i);
+ }
+}
+
+void Fchangercurseurennemis (SURFACES *surfaces, POSITIONS *positions,int selection,ENNEMIS ennemis[])
+{
+ SDL_Color couleur={120,0,0,0};
+ TTF_Font *police=NULL;
+ char chaine[100];
+ if (surfaces->Pnomcible!=NULL)
+ {
+ SDL_FreeSurface (surfaces->Pnomcible);
+ surfaces->Pnomcible=NULL;
+ }
+ police=TTF_OpenFont("C://Windows//Fonts//times.ttf",20);
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);
+ SELECTION (0,ENNEMI)
+ SELECTION (1,ENNEMI)
+ SELECTION (2,ENNEMI)
+ SELECTION (3,ENNEMI)
+ SELECTION (4,ENNEMI)
+ if (ennemis[selection].classe==GUERRIER_GOBELIN)
+ sprintf(chaine,"GUERRIER GOBELIN");
+ surfaces->Pnomcible = TTF_RenderText_Blended (police,chaine,couleur);
+ positions->Vpositionnomcible.x = positions->Vpositioncadrecible.x+surfaces->Pcadrecible->w/2-surfaces->Pnomcible->w/2;
+ positions->Vpositionnomcible.y = positions->Vpositioncadrecible.y + 10;
+ Fblitteractivedesactive (surfaces,positions,ennemis,selection);
+ Fblitterpvcible (surfaces,positions,ennemis,selection);
+ Fblitterpmcible (surfaces,positions,ennemis,selection);
+ SDL_BlitSurface (surfaces->Pnomcible,NULL,surfaces->Pecran,&positions->Vpositionnomcible);
+ SDL_Flip (surfaces->Pecran);
+ TTF_CloseFont(police);
+}
+
+void Fchangercurseurpersos (SURFACES *surfaces, POSITIONS *positions,int selection,PERSONNAGES persos[])
+{
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);
+ SDL_Flip (surfaces->Pecran);
+ SELECTION (0,ALLIE)
+ SELECTION (1,ALLIE)
+ SELECTION (2,ALLIE)
+ SELECTION (3,ALLIE)
+ SELECTION (4,ALLIE)
+ SDL_Flip (surfaces->Pecran);
+}
+
+void Fchangeractionselectionnee(SURFACES *surfaces, POSITIONS *positions,int selection,int page,int nbactions,int type,OBJET *objets)
+{
+ int i;
+ TTF_Font *police=NULL;
+ SDL_Color couleur={0,0,0,0};
+ char chaine[3][50];
+ police=TTF_OpenFont ("C://Windows//Fonts//TIMESBI.TTF",20);
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositioncadreactions,surfaces->Pecran,&positions->Vpositioncadreactions);
+ SDL_BlitSurface (surfaces->Pcadreactions,NULL,surfaces->Pecran,&positions->Vpositioncadreactions);
+ for(i=0;i<nbactions;i++)
+ {
+ if (selection==i)
+ SDL_BlitSurface (surfaces->Pactionselectionnee,NULL,surfaces->Pecran,&positions->Vpositionactionselectionnee[selection-page*3]);
+ }
+ for(i=0;i<3;i++)
+ {
+ if(surfaces->Pnomactions[i]!=NULL)
+ {
+ SDL_FreeSurface(surfaces->Pnomactions[i]);
+ surfaces->Pnomactions[i]=NULL;
+ }
+ }
+ if(type==ACTIONS)
+ {
+ if(page==0)
+ {
+ ECRIRE("ATTAQUE",0);
+ ECRIRE("MAGIE BLANCHE",1);
+ ECRIRE("MAGIE NOIRE",2);
+ }
+ else if(page==1)
+ {
+ ECRIRE("TECHNIQUES",0);
+ ECRIRE("OBJETS",1);
+ }
+ }
+ else if(type==MAGIE_BLANCHE)
+ {
+ if (page==0)
+ {
+ ECRIRE("SOIN",0);
+ }
+ }
+ else if(type==MAGIE_NOIRE)
+ {
+ if(page==0)
+ {
+ ECRIRE("FEU",0);
+ ECRIRE("GLACE",1);
+ ECRIRE("EAU",2);
+ }
+ else if(page==1)
+ {
+ ECRIRE("TONNERRE",0);
+ ECRIRE("CHOC",1);
+ }
+ }
+ else if(type==OBJETS)
+ {
+ if(page==0)
+ {
+ ECRIRE("POTION",0);
+ ECRIRE("ETHER",1);
+ ECRIRE("POTION +",2);
+ sprintf(chaine[0],"%d",objets->potions);
+ surfaces->Pquantite[0]=TTF_RenderText_Blended(police,chaine[0],couleur);
+ sprintf(chaine[1],"%d",objets->ethers);
+ surfaces->Pquantite[1]=TTF_RenderText_Blended(police,chaine[1],couleur);
+ sprintf(chaine[2],"%d",objets->potionsplus);
+ surfaces->Pquantite[2]=TTF_RenderText_Blended(police,chaine[2],couleur);
+ SDL_BlitSurface(surfaces->Pquantite[0],NULL,surfaces->Pecran,&positions->Vpositionquantite[0]);
+ SDL_BlitSurface(surfaces->Pquantite[1],NULL,surfaces->Pecran,&positions->Vpositionquantite[1]);
+ SDL_BlitSurface(surfaces->Pquantite[2],NULL,surfaces->Pecran,&positions->Vpositionquantite[2]);
+ }
+ else if(page==1)
+ {
+ ECRIRE("ETHER +",0);
+ sprintf(chaine[0],"%d",objets->ethersplus);
+ surfaces->Pquantite[0]=TTF_RenderText_Blended(police,chaine[0],couleur);
+ SDL_BlitSurface(surfaces->Pquantite[0],NULL,surfaces->Pecran,&positions->Vpositionquantite[0]);
+ }
+ }
+ if (page==nbactions/3)
+ {
+ if(3*(page+1)-nbactions==1)
+ SDL_BlitSurface (surfaces->Pactiondesactivee,NULL,surfaces->Pecran,&positions->Vpositionactionselectionnee[2]);
+ if(3*(page+1)-nbactions==2)
+ {
+ SDL_BlitSurface (surfaces->Pactiondesactivee,NULL,surfaces->Pecran,&positions->Vpositionactionselectionnee[2]);
+ SDL_BlitSurface (surfaces->Pactiondesactivee,NULL,surfaces->Pecran,&positions->Vpositionactionselectionnee[1]);
+ }
+ }
+ SDL_Flip(surfaces->Pecran);
+ TTF_CloseFont (police);
+}
+
+void Fafficherdegats (SURFACES *surfaces, POSITIONS *positions, int degats,int clan, int cible,PERSONNAGES persos[])
+{
+ char chaine[10];
+ TTF_Font *police = NULL;
+ SDL_Color fg = {210,0,0,0};
+ if(surfaces->Pnbdegats != NULL)
+ {
+ SDL_FreeSurface (surfaces->Pnbdegats);
+ surfaces->Pnbdegats=NULL;
+ }
+ sprintf (chaine,"%d ", degats);
+ police = TTF_OpenFont ("C://Windows//Fonts//TIMES.TTF", 30
+);
+ TTF_SetFontStyle(police,TTF_STYLE_BOLD);
+ surfaces->Pnbdegats = TTF_RenderText_Blended(police,chaine,fg);
+ if(clan==ENNEMI)
+ {
+ positions->Vpositiondegats.x=positions->Vpositionennemis[cible].x-30-surfaces->Pnbdegats->w;
+ positions->Vpositiondegats.y=positions->Vpositionennemis[cible].y+surfaces->Tennemi[cible]->h/2-surfaces->Pnbdegats->h/2;
+ }
+ else
+ {
+ positions->Vpositiondegats.x=positions->Vpositionpersos[cible].x+surfaces->Tperso[cible]->w+30;
+ positions->Vpositiondegats.y=positions->Vpositionpersos[cible].y+surfaces->Tperso[cible]->h/2-surfaces->Pnbdegats->h/2;
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositionpvpersos[cible],surfaces->Pecran,&positions->Vpositionpvpersos[cible]);
+ Fblitterpersos(surfaces,positions,persos);
+ }
+ positions->Vpositiondegats.w=surfaces->Pnbdegats->w;
+ positions->Vpositiondegats.h=surfaces->Pnbdegats->h;
+ SDL_BlitSurface (surfaces->Pnbdegats,NULL,surfaces->Pecran,&positions->Vpositiondegats);
+ SDL_Flip (surfaces->Pecran);
+ TTF_CloseFont (police);
+}
+
+void Faffichersoins (SURFACES *surfaces, POSITIONS *positions, int degats,int clan, int cible,PERSONNAGES persos[])
+{
+ char chaine[10];
+ TTF_Font *police = NULL;
+ SDL_Color fg = {80,255,80,0};
+
+ if (surfaces->Pnbdegats != NULL)
+ {
+ SDL_FreeSurface (surfaces->Pnbdegats);
+ surfaces->Pnbdegats=NULL;
+ }
+ sprintf (chaine,"%d", degats);
+ police = TTF_OpenFont ("C://Windows//Fonts//TIMES.TTF", 30);
+ TTF_SetFontStyle(police,TTF_STYLE_BOLD);
+ surfaces->Pnbdegats = TTF_RenderText_Blended (police,chaine,fg);
+ if(clan==ENNEMI)
+ {
+ positions->Vpositiondegats.x=positions->Vpositionennemis[cible].x-30-surfaces->Pnbdegats->w;
+ positions->Vpositiondegats.y=positions->Vpositionennemis[cible].y+surfaces->Tennemi[cible]->h/2-surfaces->Pnbdegats->h/2;
+ }
+ else
+ {
+ positions->Vpositiondegats.x=positions->Vpositionpersos[cible].x+surfaces->Tperso[cible]->w+30;
+ positions->Vpositiondegats.y=positions->Vpositionpersos[cible].y+surfaces->Tperso[cible]->h/2-surfaces->Pnbdegats->h/2;
+
+ }
+ positions->Vpositiondegats.w=surfaces->Pnbdegats->w;
+ positions->Vpositiondegats.h=surfaces->Pnbdegats->h;
+ SDL_BlitSurface (surfaces->Pnbdegats,NULL,surfaces->Pecran,&positions->Vpositiondegats);
+ SDL_Flip (surfaces->Pecran);
+
+ TTF_CloseFont (police);
+}
+
+void Fblitteractivedesactive (SURFACES *surfaces,POSITIONS *positions,ENNEMIS ennemis[],int selection)
+{
+ int i;
+
+ for (i=0;i<4;i++)
+ {
+ if(ennemis[selection].sensibilite[i] == ACTIVE)
+ SDL_BlitSurface (surfaces->Pactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i]);
+ else
+ SDL_BlitSurface (surfaces->Pdesactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i]);
+ }
+ for (i=0;i<4;i++)
+ {
+ if(ennemis[selection].resistance[i] == ACTIVE)
+ SDL_BlitSurface (surfaces->Pactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+4]);
+ else
+ SDL_BlitSurface (surfaces->Pdesactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+4]);
+ }
+ for(i=0;i<4;i++)
+ {
+ if (ennemis[selection].invulnerabilite[i] == ACTIVE)
+ SDL_BlitSurface (surfaces->Pactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+8]);
+ else
+ SDL_BlitSurface (surfaces->Pdesactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+8]);
+ }
+ for (i=0;i<4;i++)
+ {
+ if (ennemis[selection].absorbtion[i] == ACTIVE)
+ SDL_BlitSurface (surfaces->Pactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+12]);
+ else
+ SDL_BlitSurface (surfaces->Pdesactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+12]);
+ }
+}
+
+void Fblitterpvcible (SURFACES *surfaces,POSITIONS *positions,ENNEMIS ennemis[],int selection)
+{
+ TTF_Font *police = NULL;
+ SDL_Color couleur = {132,215,107,0};
+ char chaine[50];
+
+ if (surfaces->Ppvcible != NULL)
+ {
+ SDL_FreeSurface (surfaces->Ppvcible);
+ surfaces->Ppvcible=NULL;
+ }
+ if (ennemis[selection].pv<0)
+ ennemis[selection].pv=0;
+ sprintf (chaine,"%d/%d",ennemis[selection].pv,ennemis[selection].pvinitiaux);
+ police=TTF_OpenFont ("C://Windows//Fonts//TIMESBI.TTF",18);
+ surfaces->Ppvcible=TTF_RenderText_Blended (police,chaine,couleur);
+ SDL_BlitSurface (surfaces->Ppvcible,NULL,surfaces->Pecran,&positions->Vpositionpvcible);
+ TTF_CloseFont (police);
+}
+
+void Fblitterpmcible (SURFACES *surfaces,POSITIONS *positions,ENNEMIS ennemis[],int selection)
+{
+ TTF_Font *police = NULL;
+ SDL_Color couleur = {132,215,107,0};
+ char chaine[50];
+
+ if (surfaces->Ppmcible != NULL)
+ {
+ SDL_FreeSurface (surfaces->Ppmcible);
+ surfaces->Ppvcible=NULL;
+ }
+ sprintf (chaine,"%d/%d",ennemis[selection].pm,ennemis[selection].pminitiaux);
+ police=TTF_OpenFont ("C://Windows//Fonts//TIMESBI.TTF",18);
+ surfaces->Ppmcible=TTF_RenderText_Blended (police,chaine,couleur);
+ SDL_BlitSurface (surfaces->Ppmcible,NULL,surfaces->Pecran,&positions->Vpositionpmcible);
+ TTF_CloseFont (police);
+}
+
+void Fblitterpmpvpersos(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int selection)
+{
+ TTF_Font *police=NULL;
+ SDL_Color fg={132,215,107,0},bg={100,0,0,0};
+ char chaine[2][50];
+ police=TTF_OpenFont("C://WINDOWS//Fonts//TIMESBI.TTF",18);
+ sprintf(chaine[0],"PV %d/%d ",persos[selection].pv,persos[selection].pvinitiaux);
+ surfaces->Ppvpersos=TTF_RenderText_Shaded(police,chaine[0],fg,bg);
+ sprintf(chaine[1],"PM %d/%d ",persos[selection].pm,persos[selection].pminitiaux);
+ surfaces->Ppmpersos=TTF_RenderText_Shaded(police,chaine[1],fg,bg);
+ positions->Vpositionpvpersos[selection].x=(positions->Vpositionpersos[selection].x+surfaces->Tperso[selection]->w/2-surfaces->Ppvpersos->w/2);
+ positions->Vpositionpmpersos[selection].x=(positions->Vpositionpersos[selection].x+surfaces->Tperso[selection]->w/2-surfaces->Ppmpersos->w/2);
+ positions->Vpositionpvpersos[selection].y=(positions->Vpositionpersos[selection].y+surfaces->Tperso[selection]->h-surfaces->Ppvpersos->h-surfaces->Ppmpersos->h);
+ positions->Vpositionpmpersos[selection].y=(positions->Vpositionpersos[selection].y+surfaces->Tperso[selection]->h-surfaces->Ppmpersos->h);
+ SDL_BlitSurface(surfaces->Ppvpersos,NULL,surfaces->Pecran,&positions->Vpositionpvpersos[selection]);
+ SDL_BlitSurface(surfaces->Ppmpersos,NULL,surfaces->Pecran,&positions->Vpositionpmpersos[selection]);
+ positions->Vpositionpvpersos[selection].w=surfaces->Ppvpersos->w;
+ positions->Vpositionpvpersos[selection].h=surfaces->Ppvpersos->h;
+ positions->Vpositionpmpersos[selection].w=surfaces->Ppmpersos->w;
+ positions->Vpositionpmpersos[selection].h=surfaces->Ppmpersos->h;
+
+ TTF_CloseFont(police);
+}
+
+void Fblitterfond(SURFACES* surfaces)
+{
+ SDL_Rect position;
+ position.x=0;
+ position.y=0;
+ surfaces->Pfondjeu=IMG_Load("images/jeu/textures/background.jpg");
+ SDL_BlitSurface(surfaces->Pfondjeu,NULL,surfaces->Pecran,&position);
+ SDL_Flip(surfaces->Pecran);
+}
+
+void Fcolourselection(SURFACES* surfaces, PERSONNAGES persos[],int Vtourallie,POSITIONS* positions)
+{
+ int x=0;
+ int i;
+ int y=0;
+ int tampon;
+ Uint32 pixel;
+ Uint8 r,g,b,a;
+ int ajout=30;
+ for(i=0;i<3;i++)
+ {
+ tampon=0;
+ SDL_LockSurface(surfaces->Tperso[i]);
+ for(y=0;y<surfaces->Tperso[i]->h;y++)
+ {
+ for(x=0;x<surfaces->Tperso[i]->w;x++)
+ {
+ pixel=obtenirPixel(surfaces->Tperso[i],x,y);
+ SDL_GetRGBA(pixel,surfaces->Pecran->format,&r,&g,&b,&a);
+ tampon=(int)r+ajout;
+ if(tampon>255)
+ tampon=255;
+ else if(tampon<0)
+ tampon=0;
+ r=(Uint8)tampon;
+ pixel=SDL_MapRGBA(surfaces->Pecran->format,r,g,b,a);
+ definirPixel(surfaces->Tperso[i],x,y,pixel);
+ }
+ }
+ SDL_UnlockSurface(surfaces->Tperso[i]);
+ SDL_SetColorKey(surfaces->Tperso[i],SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,r,g,b));
+ }
+ SDL_Flip(surfaces->Pecran);
+
+}
+
+void Fblitcoloredselection (SURFACES surfaces[],POSITIONS positions[],int Vtourallie,PERSONNAGES persos[])
+{
+ SDL_BlitSurface(surfaces->Tperso[Vtourallie],NULL,surfaces->Pecran,&positions->Vpositionpersos[Vtourallie]);
+ Fblitterpmpvpersos(surfaces,positions,persos,Vtourallie);
+ SDL_Flip(surfaces->Pecran);
+}
+
+
+
+
+
+
diff --git a/competences.c b/competences.c
new file mode 100644
index 0000000..5d97b4a
--- /dev/null
+++ b/competences.c
@@ -0,0 +1,120 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <SDL/SDL.h>
+#include "structures.h"
+#include "constantes.h"
+#include "prototypes.h"
+
+void Fremplircompetencesennemis (ENNEMIS ennemis[],int Vnbennemis)
+{
+ int i, y;
+ unsigned int sensibilite;
+ unsigned int max = 8, min = 0;
+
+ for (i=0;i<=Vnbennemis;i++)
+ {
+ if(ennemis[i].classe==GUERRIER_GOBELIN)
+ {
+ ennemis[i].force = 15;
+ ennemis[i].magie = 0;
+ ennemis[i].defense = 10;
+ ennemis[i].defensemagique = 5;
+ ennemis[i].pv = 1000;
+ ennemis[i].pm = 0;
+ ennemis[i].pminitiaux = 0;
+ ennemis[i].pvinitiaux = 1000;
+ ennemis[i].etat = VIE;
+ for (y=0;y<4;y++)
+ {
+ sensibilite = (rand() % (max - min + 1)) + min;
+ if (sensibilite == SENSIBILITE)
+ {
+ ennemis[i].sensibilite[y] = ACTIVE;
+ ennemis[i].resistance[y] = DESACTIVE;
+ ennemis[i].invulnerabilite[y] = DESACTIVE;
+ ennemis[i].absorbtion[y] = DESACTIVE;
+ }
+ else if (sensibilite == RESISTANCE)
+ {
+ ennemis[i].resistance[y] = ACTIVE;
+ ennemis[i].sensibilite[y] = DESACTIVE;
+ ennemis[i].invulnerabilite[y] = DESACTIVE;
+ ennemis[i].absorbtion[y] = DESACTIVE;
+ }
+ else if (sensibilite == INVULNERABILITE)
+ {
+ ennemis[i].resistance[y] = DESACTIVE;
+ ennemis[i].sensibilite[y] = DESACTIVE;
+ ennemis[i].invulnerabilite[y] = ACTIVE;
+ ennemis[i].absorbtion[y] = DESACTIVE;
+ }
+ else if (sensibilite == ABSORBTION)
+ {
+ ennemis[i].sensibilite[y] = DESACTIVE;
+ ennemis[i].resistance[y] = DESACTIVE;
+ ennemis[i].invulnerabilite[y] = DESACTIVE;
+ ennemis[i].absorbtion[y] = ACTIVE;
+ }
+ else
+ {
+ ennemis[i].sensibilite[y] = DESACTIVE;
+ ennemis[i].resistance[y] = DESACTIVE;
+ ennemis[i].invulnerabilite[y] = DESACTIVE;
+ ennemis[i].absorbtion[y] = DESACTIVE;
+ }
+ }
+ }
+ }
+}
+
+void Fremplircompetencesallie (PERSONNAGES persos[])
+{
+ int i;
+
+ for(i=0;i<3;i++)
+ {
+ if(persos[i].classe==PALADIN)
+ {
+ persos[i].xp = 0;
+ persos[i].nv = 0;
+ persos[i].force = 20;
+ persos[i].magie = 5;
+ persos[i].defense = 15;
+ persos[i].defensemagique = 10;
+ persos[i].pv = 1500;
+ persos[i].pvinitiaux = 1500;
+ persos[i].pminitiaux = 40;
+ persos[i].pm = 40;
+ persos[i].etat = VIE;
+ }
+ else if (persos[i].classe == PRETRE)
+ {
+ persos[i].xp = 0;
+ persos[i].nv = 0;
+ persos[i].force = 5;
+ persos[i].magie = 20;
+ persos[i].defense = 10;
+ persos[i].defensemagique = 20;
+ persos[i].pv = 1000;
+ persos[i].pvinitiaux = 1000;
+ persos[i].pminitiaux = 40;
+ persos[i].pm = 40;
+ persos[i].etat = VIE;
+ }
+ else if (persos[i].classe == VOLEUR)
+ {
+ persos[i].xp = 0;
+ persos[i].nv = 0;
+ persos[i].force = 14;
+ persos[i].magie = 11;
+ persos[i].defense = 15;
+ persos[i].defensemagique = 15;
+ persos[i].pv = 1250;
+ persos[i].pvinitiaux = 1250;
+ persos[i].pminitiaux = 40;
+ persos[i].pm = 40;
+ persos[i].etat = VIE;
+ }
+ }
+}
+
diff --git a/constantes.h b/constantes.h
new file mode 100644
index 0000000..9607c66
--- /dev/null
+++ b/constantes.h
@@ -0,0 +1,169 @@
+#ifndef CONSTANTES_H
+#define CONSTANTES_H
+#define JOUER 0
+#define OPTIONS 1
+#define QUITTER 2
+#define XWIN 1024
+#define YWIN 768
+#define PALADIN 0
+#define PRETRE 1
+#define VOLEUR 2
+#define GUERRIER_GOBELIN 10
+#define VIE 1
+#define MORT 0
+
+//type de sort
+#define FEU 0
+#define GLACE 1
+#define EAU 2
+#define TONNERRE 3
+#define CHOC 4
+#define NON_ELEMENTAIRE 4
+#define SOIN 0
+
+//caractéristiques
+#define SENSIBILITE 1
+#define RESISTANCE 2
+#define INVULNERABILITE 3
+#define ABSORBTION 4
+
+//active / desactivé
+#define ACTIVE 1
+#define DESACTIVE 0
+
+
+#define ATTAQUE 0
+#define MAGIE_BLANCHE 1
+#define MAGIE_NOIRE 2
+#define TECHNIQUES 3
+#define OBJETS 4
+#define POTION 0
+#define ETHER 1
+#define POTIONPLUS 2
+#define ETHERPLUS 3
+#define ACTIONS 5
+#define DEGATS 0
+#define SOINS 1
+#define ALLIE 1
+#define ENNEMI 0
+#define TYPE_ATTAQUE 0
+#define TYPE_MAGIE 1
+
+
+#define SELECTION(nb,nb2) if (selection == nb)\
+ {\
+ if(nb2==ALLIE)\
+ {\
+ positions->Vpositioncurseurallies.x = positions->Vpositionpersos[nb].x + 20 + surfaces->Tperso[nb]->w;\
+ positions->Vpositioncurseurallies.y = positions->Vpositionpersos[nb].y + surfaces->Tperso[nb]->h/2 - surfaces->Pcurseurallies->h/2;\
+ SDL_BlitSurface (surfaces->Pcurseurallies,NULL,surfaces->Pecran,&positions->Vpositioncurseurallies);\
+ }\
+ else\
+ {\
+ SDL_BlitSurface (surfaces->Pcadrecible,NULL,surfaces->Pecran,&positions->Vpositioncadrecible);\
+ positions->Vpositioncurseurennemis.x=positions->Vpositionennemis[nb].x-20-surfaces->Pcurseurennemis->w;\
+ positions->Vpositioncurseurennemis.y=positions->Vpositionennemis[nb].y+surfaces->Tennemi[nb]->h/2 - surfaces->Pcurseurennemis->h/2;\
+ SDL_BlitSurface (surfaces->Pcurseurennemis,NULL,surfaces->Pecran,&positions->Vpositioncurseurennemis);\
+ }\
+ }
+#define ECRIRE(texte,id)sprintf(chaine[id],texte);\
+ surfaces->Pnomactions[id]=TTF_RenderText_Blended(police,chaine[id],couleur);\
+ SDL_BlitSurface (surfaces->Pnomactions[id],NULL,surfaces->Pecran,&positions->Vpositionnomactions[id]);
+
+//map
+#define SOL 0
+#define MUR 1
+#define COFFRE 2
+#define GUS 3
+
+
+
+#define SELECTION_CIBLE() case SDLK_RIGHT:\
+ if(clan==ALLIE)\
+ {\
+ selection=0;\
+ while(ennemis[selection].etat==MORT)\
+ selection++;\
+ inverse(&clan);\
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);\
+ Fchangercurseurennemis (surfaces,positions,selection,ennemis);\
+ }\
+ break;\
+ case SDLK_LEFT:\
+ if(clan==ENNEMI)\
+ {\
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);\
+ selection=0;\
+ while(persos[selection].etat==MORT)\
+ selection++;\
+ inverse(&clan);\
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);\
+ Fchangercurseurpersos(surfaces,positions,selection,persos);\
+ }\
+ break;\
+ case SDLK_UP:\
+ if(clan==ENNEMI)\
+ {\
+ if (selection!=0)\
+ selection--;\
+ else\
+ selection=Vnbennemis;\
+ while(ennemis[selection].etat==MORT)\
+ {\
+ if(selection!=0)\
+ selection--;\
+ else\
+ selection=Vnbennemis;\
+ }\
+ Fchangercurseurennemis (surfaces,positions,selection,ennemis);\
+ }\
+ else\
+ {\
+ if (selection!=0)\
+ selection--;\
+ else\
+ selection=2;\
+ while(persos[selection].etat==MORT)\
+ {\
+ if(selection!=0)\
+ selection--;\
+ else\
+ selection=2;\
+ }\
+ Fchangercurseurpersos(surfaces,positions,selection,ennemis);\
+ }\
+ break;\
+ case SDLK_DOWN:\
+ if(clan==ENNEMI)\
+ {\
+ if(selection!=Vnbennemis)\
+ selection++;\
+ else\
+ selection=0;\
+ while(ennemis[selection].etat==MORT)\
+ {\
+ if(selection!=Vnbennemis)\
+ selection++;\
+ else\
+ selection=0;\
+ }\
+ Fchangercurseurennemis(surfaces,positions,selection,ennemis);\
+ }\
+ else\
+ {\
+ if(selection!=2)\
+ selection++;\
+ else\
+ selection=0;\
+ while(persos[selection].etat==MORT)\
+ {\
+ if(selection!=2)\
+ selection++;\
+ else\
+ selection=0;\
+ }\
+ Fchangercurseurpersos(surfaces,positions,selection,ennemis);\
+ }\
+ break;
+
+#endif
diff --git a/ia.c b/ia.c
new file mode 100644
index 0000000..cfd0bce
--- /dev/null
+++ b/ia.c
@@ -0,0 +1,66 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <SDL/SDL.h>
+#include "constantes.h"
+#include "structures.h"
+#include "prototypes.h"
+#include <time.h>
+
+void Factionennemi(int* Vtourennemi,SURFACES* surfaces,POSITIONS* positions, ENNEMIS ennemis[], PERSONNAGES persos[],int Vnbennemis,int*Vtour,int Vtourallie)
+{
+ int target,degats;
+
+ target=Fchoosetargetallie(persos);
+ degats=Fgeneratedegats(persos, ennemis,*Vtourennemi,target);
+ persos[target].pv=persos[target].pv-degats;
+ do
+ {
+ if(*Vtourennemi<Vnbennemis)
+ (*Vtourennemi)++;
+ else if(*Vtourennemi==Vnbennemis)
+ {
+ *Vtourennemi=0;
+ inverse(Vtour);
+ }
+ }while(ennemis[*Vtourennemi].etat==MORT);
+ if(persos[target].pv<=0)
+ {
+ persos[target].pv=0;
+ persos[target].etat=MORT;
+ positions->Vpositionmort.x=positions->Vpositionpersos[target].x+surfaces->Tperso[target]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionpersos[target].y+surfaces->Tperso[target]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ Fafficherdegats(surfaces,positions,degats,ALLIE,target,persos);
+ SDL_Delay(1000);
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats);
+ if(*Vtour==ALLIE)
+ Fblitcoloredselection(surfaces,positions,Vtourallie,persos);
+ SDL_Flip(surfaces->Pecran);
+}
+
+int Fchoosetargetallie(PERSONNAGES persos[])
+{
+ int min=0,max=2,target;
+
+ do
+ {
+ target=(rand()%(max-min+1)+min);
+ }while(persos[target].etat==MORT);
+ return target;
+}
+
+int Fgeneratedegats(PERSONNAGES persos[],ENNEMIS ennemis[],int Vtourennemi,int target)
+{
+ int degats,taux,min,max;
+
+ degats=ennemis[Vtourennemi].force*60-persos[target].defense*50;
+ taux=degats/4;
+ min=degats-taux;
+ max=degats+taux;
+ degats=(rand()%(max-min+1)+min);
+ if(degats<0)
+ degats=0;
+
+ return degats;
+}
diff --git a/images/Thumbs.db b/images/Thumbs.db
new file mode 100644
index 0000000..140b739
--- /dev/null
+++ b/images/Thumbs.db
Binary files differ
diff --git a/images/chasseur.jpg b/images/chasseur.jpg
new file mode 100644
index 0000000..fd37506
--- /dev/null
+++ b/images/chasseur.jpg
Binary files differ
diff --git a/images/gobelin.bmp b/images/gobelin.bmp
new file mode 100644
index 0000000..a30e46a
--- /dev/null
+++ b/images/gobelin.bmp
Binary files differ
diff --git a/images/jeu/Thumbs.db b/images/jeu/Thumbs.db
new file mode 100644
index 0000000..ebb07a6
--- /dev/null
+++ b/images/jeu/Thumbs.db
Binary files differ
diff --git a/images/jeu/active.bmp b/images/jeu/active.bmp
new file mode 100644
index 0000000..5813b79
--- /dev/null
+++ b/images/jeu/active.bmp
Binary files differ
diff --git a/images/jeu/cadre_actions.bmp b/images/jeu/cadre_actions.bmp
new file mode 100644
index 0000000..e825007
--- /dev/null
+++ b/images/jeu/cadre_actions.bmp
Binary files differ
diff --git a/images/jeu/cadre_actions_select.bmp b/images/jeu/cadre_actions_select.bmp
new file mode 100644
index 0000000..da27bda
--- /dev/null
+++ b/images/jeu/cadre_actions_select.bmp
Binary files differ
diff --git a/images/jeu/cadre_actions_unactive.bmp b/images/jeu/cadre_actions_unactive.bmp
new file mode 100644
index 0000000..482e8cd
--- /dev/null
+++ b/images/jeu/cadre_actions_unactive.bmp
Binary files differ
diff --git a/images/jeu/cadre_cible.bmp b/images/jeu/cadre_cible.bmp
new file mode 100644
index 0000000..3c300a8
--- /dev/null
+++ b/images/jeu/cadre_cible.bmp
Binary files differ
diff --git a/images/jeu/curseur.bmp b/images/jeu/curseur.bmp
new file mode 100644
index 0000000..573e50b
--- /dev/null
+++ b/images/jeu/curseur.bmp
Binary files differ
diff --git a/images/jeu/curseurpersos.bmp b/images/jeu/curseurpersos.bmp
new file mode 100644
index 0000000..3e17320
--- /dev/null
+++ b/images/jeu/curseurpersos.bmp
Binary files differ
diff --git a/images/jeu/desactive.bmp b/images/jeu/desactive.bmp
new file mode 100644
index 0000000..f50555e
--- /dev/null
+++ b/images/jeu/desactive.bmp
Binary files differ
diff --git a/images/jeu/mort.bmp b/images/jeu/mort.bmp
new file mode 100644
index 0000000..002a88b
--- /dev/null
+++ b/images/jeu/mort.bmp
Binary files differ
diff --git a/images/jeu/textures/Thumbs.db b/images/jeu/textures/Thumbs.db
new file mode 100644
index 0000000..64cb745
--- /dev/null
+++ b/images/jeu/textures/Thumbs.db
Binary files differ
diff --git a/images/jeu/textures/background.jpg b/images/jeu/textures/background.jpg
new file mode 100644
index 0000000..7d505fd
--- /dev/null
+++ b/images/jeu/textures/background.jpg
Binary files differ
diff --git a/images/jeu/textures/floor.jpg b/images/jeu/textures/floor.jpg
new file mode 100644
index 0000000..12b7f35
--- /dev/null
+++ b/images/jeu/textures/floor.jpg
Binary files differ
diff --git a/images/map/coffre.bmp b/images/map/coffre.bmp
new file mode 100644
index 0000000..388013d
--- /dev/null
+++ b/images/map/coffre.bmp
Binary files differ
diff --git a/images/map/mur.bmp b/images/map/mur.bmp
new file mode 100644
index 0000000..2b65539
--- /dev/null
+++ b/images/map/mur.bmp
Binary files differ
diff --git a/images/map/perso.bmp b/images/map/perso.bmp
new file mode 100644
index 0000000..66a2dd6
--- /dev/null
+++ b/images/map/perso.bmp
Binary files differ
diff --git a/images/map/sol.bmp b/images/map/sol.bmp
new file mode 100644
index 0000000..bfbf94e
--- /dev/null
+++ b/images/map/sol.bmp
Binary files differ
diff --git a/images/menu_choix_classe/Thumbs.db b/images/menu_choix_classe/Thumbs.db
new file mode 100644
index 0000000..b1266ac
--- /dev/null
+++ b/images/menu_choix_classe/Thumbs.db
Binary files differ
diff --git a/images/menu_choix_classe/paladin.bmp b/images/menu_choix_classe/paladin.bmp
new file mode 100644
index 0000000..f291a26
--- /dev/null
+++ b/images/menu_choix_classe/paladin.bmp
Binary files differ
diff --git a/images/menu_choix_classe/pretre.bmp b/images/menu_choix_classe/pretre.bmp
new file mode 100644
index 0000000..4b46ac4
--- /dev/null
+++ b/images/menu_choix_classe/pretre.bmp
Binary files differ
diff --git a/images/menu_choix_classe/rien.bmp b/images/menu_choix_classe/rien.bmp
new file mode 100644
index 0000000..891df39
--- /dev/null
+++ b/images/menu_choix_classe/rien.bmp
Binary files differ
diff --git a/images/menu_choix_classe/voleur.bmp b/images/menu_choix_classe/voleur.bmp
new file mode 100644
index 0000000..cb9d833
--- /dev/null
+++ b/images/menu_choix_classe/voleur.bmp
Binary files differ
diff --git a/images/menu_principal/Thumbs.db b/images/menu_principal/Thumbs.db
new file mode 100644
index 0000000..0111b94
--- /dev/null
+++ b/images/menu_principal/Thumbs.db
Binary files differ
diff --git a/images/menu_principal/fond.bmp b/images/menu_principal/fond.bmp
new file mode 100644
index 0000000..9465ed1
--- /dev/null
+++ b/images/menu_principal/fond.bmp
Binary files differ
diff --git a/images/menu_principal/jouer.bmp b/images/menu_principal/jouer.bmp
new file mode 100644
index 0000000..beddec3
--- /dev/null
+++ b/images/menu_principal/jouer.bmp
Binary files differ
diff --git a/images/menu_principal/options.bmp b/images/menu_principal/options.bmp
new file mode 100644
index 0000000..b3e4c6f
--- /dev/null
+++ b/images/menu_principal/options.bmp
Binary files differ
diff --git a/images/menu_principal/quitter.bmp b/images/menu_principal/quitter.bmp
new file mode 100644
index 0000000..e79a4b9
--- /dev/null
+++ b/images/menu_principal/quitter.bmp
Binary files differ
diff --git a/images/menu_principal/rien.bmp b/images/menu_principal/rien.bmp
new file mode 100644
index 0000000..2689816
--- /dev/null
+++ b/images/menu_principal/rien.bmp
Binary files differ
diff --git a/images/paladin.bmp b/images/paladin.bmp
new file mode 100644
index 0000000..1e5fa82
--- /dev/null
+++ b/images/paladin.bmp
Binary files differ
diff --git a/images/prêtre.bmp b/images/prêtre.bmp
new file mode 100644
index 0000000..a6c4802
--- /dev/null
+++ b/images/prêtre.bmp
Binary files differ
diff --git a/images/sorcier.jpg b/images/sorcier.jpg
new file mode 100644
index 0000000..a144eb7
--- /dev/null
+++ b/images/sorcier.jpg
Binary files differ
diff --git a/images/voleur.bmp b/images/voleur.bmp
new file mode 100644
index 0000000..ee13c99
--- /dev/null
+++ b/images/voleur.bmp
Binary files differ
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;
+}
+
+
+
+
diff --git a/magies.c b/magies.c
new file mode 100644
index 0000000..112506f
--- /dev/null
+++ b/magies.c
@@ -0,0 +1,255 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <SDL/SDL.h>
+#include "structures.h"
+#include "constantes.h"
+#include "prototypes.h"
+
+int Fmagieelement (SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis, int element,int *Vtour)
+{
+ int max;
+ int min;
+ unsigned int continuer = 1;
+ int degats;
+ int selection = 0;
+ int delay=1;
+ unsigned int Bdegats=DEGATS;
+ int clan=ENNEMI;
+ SDL_Event event;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadreactions,surfaces->Pecran,&positions->Vpositioncadreactions);
+ while(ennemis[selection].etat==MORT)
+ selection++;
+ Fchangercurseurennemis (surfaces,positions,selection,ennemis);
+ while (continuer)
+ {
+ SDL_Flip (surfaces->Pecran);
+ SDL_WaitEvent (&event);
+ switch (event.type)
+ {
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym)
+ {
+ case SDLK_ESCAPE:
+ continuer = 0;
+ if(clan==ENNEMI)
+ {
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);
+ }
+ else
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);
+ SDL_Flip (surfaces->Pecran);
+ break;
+ SELECTION_CIBLE()
+ case SDLK_RETURN:
+ continuer=0;
+ max=Fcalculerdegats(persos,Vtourallie,&min,ennemis,selection,clan,TYPE_MAGIE);
+ degats=(rand()%(max-min+1))+min;
+ if(degats<0)
+ degats=0;
+ if(element!=NON_ELEMENTAIRE)
+ {
+ if (ennemis[selection].resistance[element]==ACTIVE)
+ degats/=2;
+ else if(ennemis[selection].sensibilite[element]==ACTIVE)
+ degats*=2;
+ else if(ennemis[selection].invulnerabilite[element]==ACTIVE)
+ degats=0;
+ else if(ennemis[selection].absorbtion[element]==ACTIVE)
+ inverse(&Bdegats);
+ }
+ if(clan==ENNEMI)
+ {
+ if(Bdegats==DEGATS)
+ ennemis[selection].pv-=degats;
+ else
+ ennemis[selection].pv+=degats;
+ if(ennemis[selection].pv<=0)
+ {
+ ennemis[selection].pv=0;
+ ennemis[selection].etat=MORT;
+ positions->Vpositionmort.x=positions->Vpositionennemis[selection].x+surfaces->Tennemi[selection]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionennemis[selection].y+surfaces->Tennemi[selection]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ else if(ennemis[selection].pv>ennemis[selection].pvinitiaux)
+ ennemis[selection].pv=ennemis[selection].pvinitiaux;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);
+ }
+ else
+ {
+ if(Bdegats==DEGATS)
+ persos[selection].pv-=degats;
+ else
+ persos[selection].pv+=degats;
+ if(persos[selection].pv<=0)
+ {
+ persos[selection].pv=0;
+ persos[selection].etat=MORT;
+ positions->Vpositionmort.x=positions->Vpositionpersos[selection].x+surfaces->Tperso[selection]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionpersos[selection].y+surfaces->Tperso[selection]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ else if(persos[selection].pv>persos[selection].pvinitiaux)
+ persos[selection].pv=persos[selection].pvinitiaux;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);
+ }
+ if(Bdegats==DEGATS)
+ Fafficherdegats (surfaces,positions,degats,clan,selection,persos);
+ else
+ Faffichersoins (surfaces,positions,degats,clan,selection,persos);
+ if(clan==ENNEMI)
+ {
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);
+ SDL_Flip (surfaces->Pecran);
+ }
+ if (*Vtourallie==2)
+ {
+ inverse(Vtour);
+ *Vtourallie=0;
+ }
+ else
+ {
+ (*Vtourallie)++;
+ Fblitterpersos(surfaces,positions,persos);
+ Fblitcoloredselection(surfaces,positions,*Vtourallie,persos);
+ }
+ break;
+ }
+ break;
+ }
+ }
+ if (delay)
+ SDL_Delay(1000);
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats);
+ SDL_Flip(surfaces->Pecran);
+ return continuer;
+ return 0;
+}
+
+int Fmagiesoin(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,int *Vtour)
+{
+ unsigned int continuer=1;
+ SDL_Event event;
+ int max;
+ int min;
+ int soins;
+ int clan=ALLIE;
+ int delay=1;
+ int selection=0;
+ int Bdegats=SOINS;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadreactions,surfaces->Pecran,&positions->Vpositioncadreactions);
+ while(persos[selection].etat==MORT)
+ selection++;
+ Fchangercurseurpersos (surfaces,positions,selection,persos);
+ while(continuer)
+ {
+ SDL_WaitEvent(&event);
+ switch(event.type)
+ {
+ case SDL_KEYDOWN:
+ switch(event.key.keysym.sym)
+ {
+ case SDLK_ESCAPE:
+ continuer = 0;
+ if(clan==ENNEMI)
+ {
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);
+ }
+ else
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);
+ SDL_Flip (surfaces->Pecran);
+ break;
+ SELECTION_CIBLE()
+ case SDLK_RETURN:
+ max=Fcalculersoins(persos,Vtourallie,&min,ennemis,selection);
+ soins=(rand()%(max-min+1))+min;
+ if(soins<0)
+ soins=0;
+ if(clan==ENNEMI)
+ {
+ if(Bdegats==DEGATS)
+ ennemis[selection].pv-=soins;
+ else
+ ennemis[selection].pv+=soins;
+ if(ennemis[selection].pv<=0)
+ {
+ ennemis[selection].pv=0;
+ ennemis[selection].etat=MORT;
+ positions->Vpositionmort.x=positions->Vpositionennemis[selection].x+surfaces->Tennemi[selection]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionennemis[selection].y+surfaces->Tennemi[selection]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ else if(ennemis[selection].pv>ennemis[selection].pvinitiaux)
+ ennemis[selection].pv=ennemis[selection].pvinitiaux;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);
+ }
+ else
+ {
+ if(Bdegats==DEGATS)
+ persos[selection].pv-=soins;
+ else
+ persos[selection].pv+=soins;
+ if(persos[selection].pv<=0)
+ {
+ persos[selection].pv=0;
+ persos[selection].etat=MORT;
+ positions->Vpositionmort.x=positions->Vpositionpersos[selection].x+surfaces->Tperso[selection]->w/2-surfaces->Pmort->w/2;
+ positions->Vpositionmort.y=positions->Vpositionpersos[selection].y+surfaces->Tperso[selection]->h/2-surfaces->Pmort->h/2;
+ SDL_BlitSurface(surfaces->Pmort,NULL,surfaces->Pecran,&positions->Vpositionmort);
+ }
+ else if(persos[selection].pv>persos[selection].pvinitiaux)
+ persos[selection].pv=persos[selection].pvinitiaux;
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);
+ }
+ if(Bdegats==DEGATS)
+ Fafficherdegats (surfaces,positions,soins,clan,selection,persos);
+ else
+ Faffichersoins (surfaces,positions,soins,clan,selection,persos);
+ if(clan==ENNEMI)
+ {
+ SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);
+ SDL_Flip (surfaces->Pecran);
+ }
+ if (*Vtourallie==2)
+ {
+ *Vtourallie=0;
+ inverse(Vtour);
+ }
+ else
+ {
+ (*Vtourallie)++;
+ Fblitterpersos(surfaces,positions,persos);
+ Fblitcoloredselection(surfaces,positions,*Vtourallie,persos);
+ }
+ continuer=0;
+ break;
+ }
+ break;
+ }
+ }
+ if (delay)
+ SDL_Delay(1000);
+ SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats);
+ SDL_Flip(surfaces->Pecran);
+ return continuer;
+}
+
+int Fcalculersoins(PERSONNAGES persos[],int *Vtourallie,int *min,ENNEMIS ennemis[],int selection)
+{
+ unsigned int soins;
+ int max;
+ int taux;
+
+ soins=persos[*Vtourallie].magie*20;
+ taux=soins/4;
+ max=soins+taux;
+ *min=soins-taux;
+
+ return max;
+}
+
+
+
+
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..3406771
--- /dev/null
+++ b/main.c
@@ -0,0 +1,382 @@
+/* ********************************************************************
+ WARCRAFT BATTLE : Jeu au tour par tour similaire à Final Fantasy
+ développé entièrement par moi :p pour le plaisir^^
+ Je sais c'est du beau quand même sa fait plaisir de faire un programme
+ assez complet avec pour seule aide un clavier et une souris (et encore là
+ j'ai pas de souris je programme sur pc portable xD)
+ Enfin bref voilà ma création :)
+ Fais en bon usage et bon jeu à toi ;)
+
+PS : Et surtout copyright :p pas touche à mon code pas de désassemblage ni rien
+hein ;) MON PROGRAMME ! :o)
+
+@+++ amuse toi bien */
+
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <SDL/SDL.h>
+#include "structures.h"
+#include "constantes.h"
+#include <SDL/SDL_image.h>
+#include <SDL/SDL_ttf.h>
+#include "prototypes.h"
+#include <time.h>
+
+int main (int argc, char *argv[])
+{
+ srand (time(NULL));
+ SURFACES surfaces;
+ POSITIONS positions;
+ Finitialisersurfaces (&surfaces);
+ if (SDL_Init (SDL_INIT_VIDEO) == -1)
+ {
+ fprintf(stderr, "Erreur lors de l'ouverture de la SDL : %s", SDL_GetError());
+ exit (EXIT_FAILURE);
+ }
+ surfaces.Pecran = SDL_SetVideoMode (XWIN,YWIN,32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_NOFRAME|SDL_FULLSCREEN);
+ if (surfaces.Pecran == NULL)
+ {
+ fprintf(stderr,"Impossible de charger la mémoire vidéo : %s", SDL_GetError());
+ exit (EXIT_FAILURE);
+ }
+ SDL_EnableUNICODE (1);
+ TTF_Init();
+ SDL_WM_SetCaption ("WARCRAFT BATTLE",NULL);
+ SDL_ShowCursor(SDL_DISABLE);
+ Fchargerimages (&surfaces);
+ Finitialiserpositions (&positions,&surfaces);
+ Fmenuprincipal (&surfaces, &positions);
+
+
+ //une fois le jeu quitté
+ Fdechargerimages (&surfaces);
+ SDL_EnableUNICODE (0);
+ TTF_Quit();
+ SDL_Quit();
+
+
+ return 0;
+}
+
+void Finitialisersurfaces (SURFACES *surfaces)
+{
+ int i;
+ surfaces->Pcurseurennemis=NULL;
+ surfaces->Pcurseurallies=NULL;
+ surfaces->Pchoixvoleur=NULL;
+ surfaces->Pchoixpretre=NULL;
+ surfaces->Pchoixpaladin=NULL;
+ surfaces->Pecran=NULL;
+ surfaces->Pgobelin=NULL;
+ surfaces->Ppaladin=NULL;
+ surfaces->Ppretre=NULL;
+ surfaces->Pvoleur=NULL;
+ surfaces->Pmenujouer=NULL;
+ surfaces->Pmenuoptions=NULL;
+ surfaces->Pmenuquitter=NULL;
+ surfaces->Pfondjeu=NULL;
+ surfaces->Ppvpersos=NULL;
+ surfaces->Ppmpersos=NULL;
+ for (i=0;i<3;i++)
+ surfaces->Tperso[i]=NULL;
+ for (i=0;i<5;i++)
+ surfaces->Tennemi[i]=NULL;
+ for (i=0;i<3;i++)
+ surfaces->Pnomactions[i]=NULL;
+ surfaces->Ptextechoixmenu=NULL;
+ surfaces->Pnbdegats=NULL;
+ surfaces->Pcadrecible=NULL;
+ surfaces->Pnomcible=NULL;
+ surfaces->Pactive=NULL;
+ surfaces->Pdesactive=NULL;
+ surfaces->Ppvcible=NULL;
+ surfaces->Ppmcible=NULL;
+ surfaces->Pcadreactions=NULL;
+ surfaces->Pactionselectionnee=NULL;
+ surfaces->Pactiondesactivee=NULL;
+ surfaces->Pmort=NULL;
+ for (i=0;i<3;i++)
+ surfaces->Pquantite[i]=NULL;
+}
+
+void Finitialiserpositions (POSITIONS *positions, SURFACES *surfaces)
+{
+ int i,y=0,z=0;
+ positions->Vpositionmenu.x = 0;
+ positions->Vpositionmenu.y = 0;
+ positions->Vpositionmenupretre.x = XWIN/2 - surfaces->Ppretre->w/2;
+ positions->Vpositionmenupretre.y = YWIN - 20 - surfaces->Ppretre->h;
+ positions->Vpositionmenupaladin.x = positions->Vpositionmenupretre.x/2 - surfaces->Ppaladin->w/2;
+ positions->Vpositionmenupaladin.y = YWIN - 20 - surfaces->Ppaladin->h;
+ positions->Vpositionmenuvoleur.x = XWIN/4*3 - surfaces->Pvoleur->w/2;
+ positions->Vpositionmenuvoleur.y = YWIN - 20 - surfaces->Pvoleur->h;
+ positions->Vpositiontextemenu.y = 362;
+ positions->Vpositioncurseurennemis.x=1024;
+ positions->Vpositioncurseurennemis.y=768;
+ positions->Vpositioncurseurallies.x=1024;
+ positions->Vpositioncurseurallies.y=768;
+ positions->Vpositioncurseurennemis.w = surfaces->Pcurseurennemis->w;
+ positions->Vpositioncurseurennemis.h = surfaces->Pcurseurennemis->h;
+ positions->Vpositioncadrecible.y = 15;
+ positions->Vpositioncadrecible.x = XWIN/2-50-surfaces->Pcadrecible->w/2;
+ positions->Vpositioncadrecible.w = surfaces->Pcadrecible->w;
+ positions->Vpositioncadrecible.h = surfaces->Pcadrecible->h;
+ positions->Vpositioncadreactions.y = YWIN-surfaces->Pcadreactions->h;
+ positions->Vpositioncadreactions.x = XWIN/2-50-surfaces->Pcadreactions->w/2;
+ positions->Vpositioncadreactions.w = surfaces->Pcadreactions->w;
+ positions->Vpositioncadreactions.h = surfaces->Pcadreactions->h;
+ positions->Vpositionpvcible.x = 380;
+ positions->Vpositionpvcible.y = 185;
+ positions->Vpositionpmcible.x = 545;
+ positions->Vpositionpmcible.y = 185;
+ positions->Vpositiondegats.x=1024;
+ positions->Vpositiondegats.y=768;
+ for(i=0;i<3;i++)
+ {
+ positions->Vpositionactionselectionnee[i].x=positions->Vpositioncadreactions.x+5;
+ positions->Vpositionactionselectionnee[i].y=positions->Vpositioncadreactions.y+5+44*i;
+ positions->Vpositionnomactions[i].x=positions->Vpositioncadreactions.x+15;
+ positions->Vpositionnomactions[i].y=positions->Vpositioncadreactions.y+12+44*i;
+ positions->Vpositionquantite[i].y=positions->Vpositionnomactions[i].y;
+ positions->Vpositionquantite[i].x=positions->Vpositioncadreactions.x+surfaces->Pcadreactions->w-45;
+ }
+ for (i=0;i < 16;i++)
+ {
+ positions->Vpositionactivedesactive[i].x = 471+51*y;
+ positions->Vpositionactivedesactive[i].y = 101+19*z;
+ if (y < 3)
+ y++;
+ else
+ {
+ y=0;
+ z++;
+ }
+ }
+}
+
+void Fchargerimages (SURFACES *surfaces)
+{
+ int i;
+ surfaces->Pgobelin = IMG_Load ("images/gobelin.bmp");
+ surfaces->Ppaladin = IMG_Load ("images/paladin.bmp");
+ surfaces->Ppretre = IMG_Load ("images/prêtre.bmp");
+ surfaces->Pvoleur = IMG_Load ("images/voleur.bmp");
+ surfaces->Pmenujouer = IMG_Load ("images/menu_principal/jouer.bmp");
+ surfaces->Pmenuoptions = IMG_Load ("images/menu_principal/options.bmp");
+ surfaces->Pmenuquitter = IMG_Load ("images/menu_principal/quitter.bmp");
+ surfaces->Pchoixvoleur = IMG_Load ("images/menu_choix_classe/voleur.bmp");
+ surfaces->Pchoixpretre = IMG_Load ("images/menu_choix_classe/pretre.bmp");
+ surfaces->Pchoixpaladin = IMG_Load ("images/menu_choix_classe/paladin.bmp");
+ surfaces->Pcurseurennemis = IMG_Load ("images/jeu/curseur.bmp");
+ surfaces->Pcurseurallies = IMG_Load ("images/jeu/curseurpersos.bmp");
+ surfaces->Pcadrecible = IMG_Load ("images/jeu/cadre_cible.bmp");
+ surfaces->Pactive = IMG_Load ("images/jeu/active.bmp");
+ surfaces->Pdesactive = IMG_Load ("images/jeu/desactive.bmp");
+ surfaces->Pcadreactions = IMG_Load ("images/jeu/cadre_actions.bmp");
+ surfaces->Pactionselectionnee=IMG_Load ("images/jeu/cadre_actions_select.bmp");
+ surfaces->Pactiondesactivee=IMG_Load("images/jeu/cadre_actions_unactive.bmp");
+ surfaces->Pmort=IMG_Load("images/jeu/mort.bmp");
+ for (i = 0;i < 5;i++)
+ surfaces->Tennemi[i] = surfaces->Pgobelin;
+
+ //définition de la transparence alpha dans les surfaces
+ SDL_SetColorKey(surfaces->Pgobelin,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,0,255,18));
+ SDL_SetColorKey(surfaces->Ppretre,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,39,189,31));
+ SDL_SetColorKey(surfaces->Ppaladin,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,189,31,31));
+ SDL_SetColorKey(surfaces->Pvoleur,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,39,189,31));
+ SDL_SetColorKey(surfaces->Pcurseurennemis,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,255,255,255));
+ SDL_SetColorKey(surfaces->Pcurseurallies,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,255,255,255));
+ SDL_SetColorKey(surfaces->Pactive,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,255,255,255));
+ SDL_SetColorKey(surfaces->Pdesactive,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,255,255,255));
+ SDL_SetColorKey(surfaces->Pmort,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,255,255,255));
+}
+
+void Fdechargerimages (SURFACES *surfaces)//dechargement des surfaces alouées
+{
+ int i;
+ if(surfaces->Pecran!=NULL)
+ SDL_FreeSurface(surfaces->Pecran);
+ if(surfaces->Pgobelin!=NULL)
+ SDL_FreeSurface (surfaces->Pgobelin);
+ if(surfaces->Ppaladin!=NULL)
+ SDL_FreeSurface (surfaces->Ppaladin);
+ if(surfaces->Ppretre!=NULL)
+ SDL_FreeSurface (surfaces->Ppretre);
+ if(surfaces->Pvoleur!=NULL)
+ SDL_FreeSurface (surfaces->Pvoleur);
+ if(surfaces->Pmenujouer!=NULL)
+ SDL_FreeSurface (surfaces->Pmenujouer);
+ if(surfaces->Pmenuoptions!=NULL)
+ SDL_FreeSurface (surfaces->Pmenuoptions);
+ if(surfaces->Pmenuquitter!=NULL)
+ SDL_FreeSurface (surfaces->Pmenuquitter);
+ if(surfaces->Pchoixpretre!=NULL)
+ SDL_FreeSurface (surfaces->Pchoixpretre);
+ if(surfaces->Ppaladin!=NULL)
+ SDL_FreeSurface (surfaces->Pchoixpaladin);
+ if(surfaces->Pvoleur!=NULL)
+ SDL_FreeSurface (surfaces->Pchoixvoleur);
+ if(surfaces->Pcurseurennemis!=NULL)
+ SDL_FreeSurface (surfaces->Pcurseurennemis);
+ if(surfaces->Pcurseurallies!=NULL)
+ SDL_FreeSurface (surfaces->Pcurseurallies);
+ if(surfaces->Pcadrecible!=NULL)
+ SDL_FreeSurface (surfaces->Pcadrecible);
+ if(surfaces->Pactive!=NULL)
+ SDL_FreeSurface (surfaces->Pactive);
+ if(surfaces->Pdesactive!=NULL)
+ SDL_FreeSurface (surfaces->Pdesactive);
+ if(surfaces->Pcadreactions!=NULL)
+ SDL_FreeSurface (surfaces->Pcadreactions);
+ if(surfaces->Pactionselectionnee!=NULL)
+ SDL_FreeSurface (surfaces->Pactionselectionnee);
+ if(surfaces->Pactionselectionnee!=NULL)
+ SDL_FreeSurface (surfaces->Pactiondesactivee);
+ if(surfaces->Pmort!=NULL)
+ SDL_FreeSurface (surfaces->Pmort);
+ if(surfaces->Pfondjeu != NULL)
+ SDL_FreeSurface (surfaces->Pfondjeu);
+ if(surfaces->Ptextechoixmenu!=NULL)
+ SDL_FreeSurface(surfaces->Ptextechoixmenu);
+ if(surfaces->Pnbdegats!=NULL)
+ SDL_FreeSurface(surfaces->Pnbdegats);
+ if(surfaces->Pnomcible!=NULL)
+ SDL_FreeSurface(surfaces->Pnomcible);
+ if(surfaces->Ppvcible!=NULL)
+ SDL_FreeSurface(surfaces->Ppvcible);
+ if(surfaces->Ppmcible!=NULL)
+ SDL_FreeSurface(surfaces->Ppmcible);
+ if(surfaces->Ppvpersos!=NULL)
+ SDL_FreeSurface(surfaces->Ppvpersos);
+ if(surfaces->Ppmpersos!=NULL)
+ SDL_FreeSurface(surfaces->Ppmpersos);
+ for(i = 0;i < 3;i++)
+ {
+ if(surfaces->Tperso[i]!=NULL)
+ SDL_FreeSurface(surfaces->Tperso[i]);
+ }
+ for(i=0;i<5;i++)
+ {
+ if(surfaces->Tennemi[i]!=NULL)
+ SDL_FreeSurface(surfaces->Tennemi[i]);
+ }
+ for(i=0;i<3;i++)
+ {
+ if(surfaces->Pnomactions[i]!=NULL)
+ SDL_FreeSurface (surfaces->Pnomactions[i]);
+ }
+ for(i=0;i<3;i++)
+ {
+ if(surfaces->Pquantite[i]!=NULL)
+ SDL_FreeSurface (surfaces->Pquantite[i]);
+ }
+}
+
+void inverse(int *bool)
+{
+ if (*bool)
+ *bool=0;
+ else if (!*bool)
+ *bool=1;
+}
+
+
+/* ********************************************************************* */
+/*obtenirPixel : permet de récupérer la couleur d'un pixel
+Paramètres d'entrée/sortie :
+SDL_Surface *surface : la surface sur laquelle on va récupérer la couleur d'un pixel
+int x : la coordonnée en x du pixel à récupérer
+int y : la coordonnée en y du pixel à récupérer
+
+Uint32 resultat : la fonction renvoie le pixel aux coordonnées (x,y) dans la surface
+*/
+Uint32 obtenirPixel(SDL_Surface *surface, int x, int y)
+{
+ /*nbOctetsParPixel représente le nombre d'octets utilisés pour stocker un pixel.
+ En multipliant ce nombre d'octets par 8 (un octet = 8 bits), on obtient la profondeur de couleur
+ de l'image : 8, 16, 24 ou 32 bits.*/
+ int nbOctetsParPixel = surface->format->BytesPerPixel;
+ /* Ici p est l'adresse du pixel que l'on veut connaitre */
+ /*surface->pixels contient l'adresse du premier pixel de l'image*/
+ Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * nbOctetsParPixel;
+
+ /*Gestion différente suivant le nombre d'octets par pixel de l'image*/
+ switch(nbOctetsParPixel)
+ {
+ case 1:
+ return *p;
+
+ case 2:
+ return *(Uint16 *)p;
+
+ case 3:
+ /*Suivant l'architecture de la machine*/
+ if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
+ return p[0] << 16 | p[1] << 8 | p[2];
+ else
+ return p[0] | p[1] << 8 | p[2] << 16;
+
+ case 4:
+ return *(Uint32 *)p;
+
+ /*Ne devrait pas arriver, mais évite les erreurs*/
+ default:
+ return 0;
+ }
+}
+
+/* ********************************************************************* */
+/*definirPixel : permet de modifier la couleur d'un pixel
+Paramètres d'entrée/sortie :
+SDL_Surface *surface : la surface sur laquelle on va modifier la couleur d'un pixel
+int x : la coordonnée en x du pixel à modifier
+int y : la coordonnée en y du pixel à modifier
+Uint32 pixel : le pixel à insérer
+*/
+void definirPixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
+{
+ /*nbOctetsParPixel représente le nombre d'octets utilisés pour stocker un pixel.
+ En multipliant ce nombre d'octets par 8 (un octet = 8 bits), on obtient la profondeur de couleur
+ de l'image : 8, 16, 24 ou 32 bits.*/
+ int nbOctetsParPixel = surface->format->BytesPerPixel;
+ /*Ici p est l'adresse du pixel que l'on veut modifier*/
+ /*surface->pixels contient l'adresse du premier pixel de l'image*/
+ Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * nbOctetsParPixel;
+
+ /*Gestion différente suivant le nombre d'octets par pixel de l'image*/
+ switch(nbOctetsParPixel)
+ {
+ case 1:
+ *p = pixel;
+ break;
+
+ case 2:
+ *(Uint16 *)p = pixel;
+ break;
+
+ case 3:
+ /*Suivant l'architecture de la machine*/
+ if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
+ {
+ p[0] = (pixel >> 16) & 0xff;
+ p[1] = (pixel >> 8) & 0xff;
+ p[2] = pixel & 0xff;
+ }
+ else
+ {
+ p[0] = pixel & 0xff;
+ p[1] = (pixel >> 8) & 0xff;
+ p[2] = (pixel >> 16) & 0xff;
+ }
+ break;
+
+ case 4:
+ *(Uint32 *)p = pixel;
+ break;
+ }
+}
+
+
+
diff --git a/map.c b/map.c
new file mode 100644
index 0000000..04d0be4
--- /dev/null
+++ b/map.c
@@ -0,0 +1,130 @@
+#include <SDL/SDL.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "constantes.h"
+#include "structures.h"
+#include "prototypes.h"
+#include <SDL/SDL_image.h>
+
+void Fmap (SURFACES*surfaces, POSITIONS* positions,PERSONNAGES persos[],ENNEMIS ennemis[])
+{
+ int map[15][11];
+ int continuer=1;
+ SDL_Event event;
+ Fchargersurfaces_map(surfaces,positions);
+ Fgetmap (map);
+ Fblittermap(surfaces,positions,map);
+ while(continuer)
+ {
+ SDL_WaitEvent (&event);
+ switch (event.type)
+ {
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym)
+ {
+ case SDLK_RETURN:
+ continuer=Fjouer(surfaces,positions,persos,ennemis);
+ break;
+ case SDLK_ESCAPE:
+ continuer=0;
+ break;
+ }
+ break;
+ }
+ }
+//une fois le jeu quitté !
+ Fdechargersurfaces_map(surfaces);
+}
+
+void Fgetmap (int map[][11])
+{
+ FILE* fichier=NULL;
+ char chaine[165];
+ int i,j,k=0;
+
+ fichier=fopen("map.war","r");
+ if(fichier==NULL)
+ fprintf(stderr, "Impossible d'ouvrir le fichier map.war");
+ fgets(chaine,166,fichier);
+ fclose(fichier);
+ for(j=0;j<11;j++)
+ {
+ for(i=0;i<15;i++)
+ {
+ switch (chaine[k])
+ {
+ case '0':
+ map[i][j]=SOL;
+ break;
+ case '1':
+ map[i][j]=MUR;
+ break;
+ case '2':
+ map[i][j]=COFFRE;
+ break;
+ case '3':
+ map[i][j]=GUS;
+ break;
+ }
+ k++;
+ }
+ }
+}
+
+void Fchargersurfaces_map (SURFACES *surfaces,POSITIONS*positions)
+{
+ int i,j;
+ for(j=0;j<11;j++)
+ {
+ for(i=0;i<15;i++)
+ {
+ positions->Vpositionmap_item[i][j].x=i*64+32;
+ positions->Vpositionmap_item[i][j].y=j*64+32;
+ }
+ }
+ surfaces->Pmap_sol=NULL;
+ surfaces->Pmap_sol=IMG_Load("images/map/sol.bmp");
+ surfaces->Pmap_mur=NULL;
+ surfaces->Pmap_mur=IMG_Load("images/map/mur.bmp");
+ surfaces->Pmap_coffre=NULL;
+ surfaces->Pmap_coffre=IMG_Load("images/map/coffre.bmp");
+ surfaces->Pmap_perso=NULL;
+ surfaces->Pmap_perso=IMG_Load("images/map/perso.bmp");
+}
+
+void Fdechargersurfaces_map(SURFACES*surfaces)
+{
+ SDL_FreeSurface(surfaces->Pmap_sol);
+ SDL_FreeSurface(surfaces->Pmap_mur);
+ SDL_FreeSurface(surfaces->Pmap_coffre);
+ SDL_FreeSurface(surfaces->Pmap_perso);
+}
+
+
+void Fblittermap (SURFACES*surfaces,POSITIONS*positions,int map[][11])
+{
+ int i,j;
+
+ for(j=0;j<11;j++)
+ {
+ for(i=0;i<15;i++)
+ {
+ switch (map[i][j])
+ {
+ case SOL:
+ SDL_BlitSurface(surfaces->Pmap_sol,NULL,surfaces->Pecran,&positions->Vpositionmap_item[i][j]);
+ break;
+ case MUR:
+ SDL_BlitSurface(surfaces->Pmap_mur,NULL,surfaces->Pecran,&positions->Vpositionmap_item[i][j]);
+ break;
+ case COFFRE:
+ SDL_BlitSurface(surfaces->Pmap_coffre,NULL,surfaces->Pecran,&positions->Vpositionmap_item[i][j]);
+ break;
+ case GUS:
+ SDL_BlitSurface(surfaces->Pmap_perso,NULL,surfaces->Pecran,&positions->Vpositionmap_item[i][j]);
+ break;
+ }
+ }
+ }
+ SDL_Flip(surfaces->Pecran);
+}
diff --git a/menuchoixpersos.c b/menuchoixpersos.c
new file mode 100644
index 0000000..8db15df
--- /dev/null
+++ b/menuchoixpersos.c
@@ -0,0 +1,154 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <SDL/SDL.h>
+#include "structures.h"
+#include "constantes.h"
+#include "prototypes.h"
+#include <SDL/SDL_image.h>
+#include <SDL/SDL_ttf.h>
+
+void Fmenuchoixpersos (SURFACES *surfaces, POSITIONS *positions)
+{
+
+ int nbpersos = 0;
+ TTF_Font *police = NULL;
+ int Vchoix = 0;
+ SDL_Color vert;
+ unsigned int continuer = 1;
+ PERSONNAGES persos[3];
+ ENNEMIS ennemis[5];
+ SDL_Event event;
+ int Vnbperso = 0;
+
+ vert.r = 39;
+ vert.g = 189;
+ vert.b = 31;
+ SDL_BlitSurface (surfaces->Pchoixpaladin,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ police = TTF_OpenFont ("C://WINDOWS//Fonts//TIMESI.TTF",36);
+ while (Vnbperso!=3)
+ {
+ continuer = 1;
+ if (Vnbperso == 0)
+ surfaces->Ptextechoixmenu = TTF_RenderText_Blended (police,"Choisissez la Classe de votre Premier Personnage",vert);
+ else if (Vnbperso == 1)
+ surfaces->Ptextechoixmenu = TTF_RenderText_Blended (police,"Choisissez la Classe de votre Deuxième Personnage",vert);
+ else if (Vnbperso == 2)
+ surfaces->Ptextechoixmenu = TTF_RenderText_Blended (police,"Choisissez la Classe de votre Troisième Personnage",vert);
+ positions->Vpositiontextemenu.x=XWIN/2-surfaces->Ptextechoixmenu->w/2;
+ if (persos[Vnbperso-1].classe == PALADIN)
+ SDL_BlitSurface (surfaces->Pchoixpaladin,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ if (persos[Vnbperso-1].classe == PRETRE)
+ SDL_BlitSurface (surfaces->Pchoixpretre,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ if (persos[Vnbperso-1].classe == VOLEUR)
+ SDL_BlitSurface (surfaces->Pchoixvoleur,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ SDL_BlitSurface (surfaces->Ppretre,NULL,surfaces->Pecran,&positions->Vpositionmenupretre);
+ SDL_BlitSurface (surfaces->Ppaladin,NULL,surfaces->Pecran,&positions->Vpositionmenupaladin);
+ SDL_BlitSurface (surfaces->Pvoleur,NULL,surfaces->Pecran,&positions->Vpositionmenuvoleur);
+ SDL_BlitSurface (surfaces->Ptextechoixmenu,NULL,surfaces->Pecran,&positions->Vpositiontextemenu);
+ SDL_Flip (surfaces->Pecran);
+ while (continuer)
+ {
+ SDL_WaitEvent (&event);
+ switch (event.type)
+ {
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym)
+ {
+ case SDLK_LEFT:
+ if(Vchoix>PALADIN)
+ {
+ Vchoix--;
+ Fchangersurlignage2 (Vchoix,surfaces,positions);
+ }
+ else
+ {
+ Vchoix=VOLEUR;
+ Fchangersurlignage2 (Vchoix,surfaces,positions);
+ }
+ break;
+ case SDLK_RIGHT:
+ if (Vchoix<VOLEUR)
+ {
+ Vchoix++;
+ Fchangersurlignage2 (Vchoix,surfaces,positions);
+ }
+ else
+ {
+ Vchoix=PALADIN;
+ Fchangersurlignage2 (Vchoix,surfaces,positions);
+ }
+ break;
+ case SDLK_RETURN:
+ Fremplirpersos (Vchoix,persos,Vnbperso);
+ Vnbperso++;
+ continuer=0;
+ break;
+ }
+ break;
+ }
+ }
+ }
+ TTF_CloseFont (police);
+ SDL_Flip(surfaces->Pecran);
+ Fremplirpersos2 (surfaces,persos);
+ Fmap(surfaces,positions,persos,ennemis);
+}
+
+void Fchangersurlignage2 (int Vchoix, SURFACES *surfaces, POSITIONS *positions)
+{
+ if (Vchoix==PALADIN)
+ SDL_BlitSurface (surfaces->Pchoixpaladin,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ else if (Vchoix==PRETRE)
+ SDL_BlitSurface (surfaces->Pchoixpretre,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ else if (Vchoix==VOLEUR)
+ SDL_BlitSurface (surfaces->Pchoixvoleur,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ SDL_BlitSurface (surfaces->Ppretre,NULL,surfaces->Pecran,&positions->Vpositionmenupretre);
+ SDL_BlitSurface (surfaces->Ppaladin,NULL,surfaces->Pecran,&positions->Vpositionmenupaladin);
+ SDL_BlitSurface (surfaces->Pvoleur,NULL,surfaces->Pecran,&positions->Vpositionmenuvoleur);
+ SDL_BlitSurface (surfaces->Ptextechoixmenu,NULL,surfaces->Pecran,&positions->Vpositiontextemenu);
+ SDL_Flip (surfaces->Pecran);
+}
+
+void Fremplirpersos (int Vchoix, PERSONNAGES persos[],int Vnbpersos)
+{
+ if (Vchoix==PALADIN)
+ persos[Vnbpersos].classe=PALADIN;
+ else if (Vchoix==PRETRE)
+ persos[Vnbpersos].classe=PRETRE;
+ else if (Vchoix==VOLEUR)
+ persos[Vnbpersos].classe=VOLEUR;
+}
+
+void Fremplirpersos2 (SURFACES *surfaces, PERSONNAGES persos[])
+{
+
+ int i;
+ for (i=0;i<3;i++)
+ {
+ if (persos[i].classe==PALADIN)
+ surfaces->Tperso[i]=IMG_Load("images/paladin.bmp");
+ else if (persos[i].classe==PRETRE)
+ surfaces->Tperso[i]=IMG_Load("images/prêtre.bmp");
+ else if (persos[i].classe==VOLEUR)
+ surfaces->Tperso[i]=IMG_Load("images/voleur.bmp");
+ }
+}
+
+void Fremplirennemis (SURFACES *surfaces,int Vnbennemis,ENNEMIS ennemis[])
+{
+
+ int i;
+ for (i=0;i<=Vnbennemis;i++)
+ {
+ if (ennemis[i].classe==GUERRIER_GOBELIN)
+ surfaces->Tennemi[i]=surfaces->Pgobelin;
+ }
+}
+
+int Fcalculernbennemis ()
+{
+ int nb;
+ nb=(rand()%(4-0+1))+0;
+ return nb;
+}
+
diff --git a/menuoptions.c b/menuoptions.c
new file mode 100644
index 0000000..4d704d3
--- /dev/null
+++ b/menuoptions.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <SDL/SDL.h>
+#include "structures.h"
+
+void Foptions (SURFACES *surfaces, POSITIONS *positions)
+{
+
+}
+
diff --git a/menuprincipal.c b/menuprincipal.c
new file mode 100644
index 0000000..57f709f
--- /dev/null
+++ b/menuprincipal.c
@@ -0,0 +1,86 @@
+#include <stdlib.h>
+#include <stdlib.h>
+#include <SDL/SDL.h>
+#include "structures.h"
+#include "prototypes.h"
+#include "constantes.h"
+
+void Fmenuprincipal (SURFACES *surfaces, POSITIONS *positions)
+{
+ int continuer = 1;
+ SDL_Event event;
+ int Vmode = 0;
+ SDL_BlitSurface (surfaces->Pmenujouer,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ SDL_Flip (surfaces->Pecran);
+ while (continuer)
+ {
+ SDL_WaitEvent (&event);
+ switch (event.type)
+ {
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym)
+ {
+ case SDLK_DOWN:
+
+ if (Vmode < 2)
+ {
+ Vmode++;
+ Fchangersurlignage (Vmode,surfaces,positions);
+ }
+ else
+ {
+ Vmode = 0;
+ Fchangersurlignage (Vmode,surfaces,positions);
+ }
+ break;
+ case SDLK_UP:
+ if (Vmode > 0)
+ {
+ Vmode--;
+ Fchangersurlignage (Vmode,surfaces,positions);
+ }
+ else
+ {
+ Vmode = 2;
+ Fchangersurlignage (Vmode,surfaces,positions);
+ }
+ break;
+ case SDLK_RETURN:
+ continuer = Fentrermode (Vmode,surfaces,positions);
+ Vmode = 0;
+ if (continuer)
+ {
+ SDL_BlitSurface (surfaces->Pmenujouer,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ SDL_Flip (surfaces->Pecran);
+ }
+ break;
+ }
+ break;
+ }
+ }
+}
+
+void Fchangersurlignage (int Vmode, SURFACES *surfaces, POSITIONS *positions)
+{
+ if (Vmode == 0)
+ SDL_BlitSurface (surfaces->Pmenujouer,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ else if (Vmode == 1)
+ SDL_BlitSurface (surfaces->Pmenuoptions,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ else if (Vmode == 2)
+ SDL_BlitSurface (surfaces->Pmenuquitter,NULL,surfaces->Pecran,&positions->Vpositionmenu);
+ SDL_Flip (surfaces->Pecran);
+}
+
+int Fentrermode (int Vmode, SURFACES *surfaces, POSITIONS *positions)
+{
+ int continuer = 1;
+
+ if (Vmode == 0)
+ Fmenuchoixpersos (surfaces,positions);
+ else if (Vmode == 1)
+ Foptions (surfaces,positions);
+ else if (Vmode == 2)
+ continuer = 0;
+ return continuer;
+}
+
diff --git a/prototypes.h b/prototypes.h
new file mode 100644
index 0000000..9bd1e47
--- /dev/null
+++ b/prototypes.h
@@ -0,0 +1,61 @@
+#ifndef PROTOTYPES_H
+#define PROTOTYPES_H
+
+void Fmenuprincipal (SURFACES *surfaces, POSITIONS *positions);
+void Fchangersurlignage (int Vmode, SURFACES *surfaces, POSITIONS *positions);
+int Fentrermode (int Vmode, SURFACES *surfaces, POSITIONS *positions);
+void Fmenuchoixpersos (SURFACES *surfaces, POSITIONS *positions);
+void Fchangersurlignage2 (int Vperso, SURFACES *surfaces, POSITIONS *positions);
+void Fremplirpersos (int Vperso, PERSONNAGES persos[],int Vnbpersos);
+void Fremplirpersos2 (SURFACES *surfaces, PERSONNAGES persos[]);
+int Fjouer (SURFACES *surfaces, POSITIONS *positions, PERSONNAGES persos[],ENNEMIS ennemis[]);
+void Fblitterpersos (SURFACES *surfaces, POSITIONS *positions, PERSONNAGES persos[]);
+void Finitialiserpositionspersos (SURFACES *surfaces,POSITIONS *positions);
+void Finitialisersurfaces (SURFACES *surfaces);
+void Fchargerimages (SURFACES *surfaces);
+void Fdechargerimages (SURFACES *surfaces);
+void inverse(int *bool);
+void Finitialiserpositions (POSITIONS *positions, SURFACES *surfaces);
+void Fblitterennemis (SURFACES *surfaces, POSITIONS *positions,ENNEMIS ennemis[],int Vnbennemis);
+void Finitialiserpositionsennemis (SURFACES *surfaces, POSITIONS *positions,int Vnbennemis);
+void Fattaquer (SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,int*Vtour);
+void Fremplircompetencesallie (PERSONNAGES persos[]);
+int Fcalculernbennemis ();
+void Fchoisirtypeennemis (PERSONNAGES persos[],SURFACES *surfaces,ENNEMIS ennemis[],int Vnbennemis);
+void Fremplirennemis (SURFACES *surfaces,int Vnbennemis,ENNEMIS ennemis[]);
+int Fcalculerdegats(PERSONNAGES persos[],int *Vtourallie,int *min,ENNEMIS ennemis[],int selection,int camp,int type);
+int Fcalculersoins(PERSONNAGES persos[],int *Vtourallie,int *min,ENNEMIS ennemis[],int selection);
+void Fchangercurseur (SURFACES *surfaces, POSITIONS *positions,int selection,ENNEMIS ennemis[]);
+void Fafficherdegats (SURFACES *surfaces, POSITIONS *positions, int degats,int camp, int cible,PERSONNAGES persos[]);
+void Fremplircompetencesennemis (ENNEMIS ennemis[],int Vnbennemis);
+void Fselectionnermagienoire (SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,int*Vtour);
+int Fmagieelement (SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis, int element,int *Vtour);
+void Fblitteractivedesactive (SURFACES *surfaces,POSITIONS *positions,ENNEMIS ennemis[],int selection);
+void Fchangeractionselectionnee(SURFACES *surfaces, POSITIONS *positions,int selection,int page,int nbactions,int type,OBJET *objets);
+void Fblitterpvcible (SURFACES *surfaces,POSITIONS *positions,ENNEMIS ennemis[],int selection);
+void Fblitterpmcible (SURFACES *surfaces,POSITIONS *positions,ENNEMIS ennemis[],int selection);
+void Fchangermagienoireselectionnee(SURFACES *surfaces,POSITIONS *positions,int selection,int page,int nbactions);
+void Fselectionnermagieblanche(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,int *Vtour);
+void Fchangermagieblancheselectionnee(SURFACES *surfaces, POSITIONS *positions,int selection,int page,int nbactions);
+void Fblitterpmpvpersos(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int selection);
+int Fmagiesoin (SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,int *Vtour);
+void Faffichersoins (SURFACES *surfaces, POSITIONS *positions, int degats,int clan, int cible,PERSONNAGES persos[]);
+void Fremplirobjets(OBJET *objets);
+void Fselectionnerobjet(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,OBJET *objets,int*Vtour);
+int Fpotion(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,OBJET *objets,int type,int*Vtour);
+int Fether(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vtourallie,ENNEMIS ennemis[],int Vnbennemis,OBJET *objets,int type,int *Vtour);
+void Fblitterfond(SURFACES* surfaces);
+void Fcolourselection(SURFACES* surfaces, PERSONNAGES persos[],int Vtourallie,POSITIONS* positions);
+void Fblitcoloredselection (SURFACES surfaces[],POSITIONS positions[],int Vtourallie,PERSONNAGES persos[]);
+Uint32 obtenirPixel(SDL_Surface *surface, int x, int y);
+void definirPixel(SDL_Surface *surface, int x, int y, Uint32 pixel);
+int Fgeneratedegats(PERSONNAGES persos[],ENNEMIS ennemis[],int Vtourennemi,int target);
+int Fchoosetargetallie(PERSONNAGES persos[]);
+void Factionennemi(int* Vtourennemi,SURFACES* surfaces,POSITIONS* positions, ENNEMIS ennemis[], PERSONNAGES persos[],int Vnbennemis,int*Vtour,int Vtourallie);
+void Fgetmap (int map[][11]);
+void Fmap (SURFACES*surfaces, POSITIONS* positions,PERSONNAGES persos[],ENNEMIS ennemis[]);
+void Fchargersurfaces_map (SURFACES *surfaces,POSITIONS*positions);
+void Fblittermap (SURFACES*surfaces,POSITIONS*positions,int map[][11]);
+void Fdechargersurfaces_map(SURFACES*surfaces);
+
+#endif
diff --git a/structures.h b/structures.h
new file mode 100644
index 0000000..8b8783f
--- /dev/null
+++ b/structures.h
@@ -0,0 +1,119 @@
+#ifndef STRUCTURES_H
+#define STRUCTURES_H
+
+typedef struct surfaces SURFACES;
+struct surfaces
+{
+ SDL_Surface *Pecran;
+ SDL_Surface *Pgobelin;
+ SDL_Surface *Ppaladin;
+ SDL_Surface *Ppretre;
+ SDL_Surface *Pvoleur;
+ SDL_Surface *Pmenuoptions;
+ SDL_Surface *Pmenujouer;
+ SDL_Surface *Pmenuquitter;
+ SDL_Surface *Pchoixpaladin;
+ SDL_Surface *Pchoixpretre;
+ SDL_Surface *Pchoixvoleur;
+ SDL_Surface *Tperso[3];
+ SDL_Surface *Tennemi[5];
+ SDL_Surface *Ptextechoixmenu;
+ SDL_Surface *Pcurseurennemis;
+ SDL_Surface *Pcurseurallies;
+ SDL_Surface *Pfondjeu;
+ SDL_Surface *Pnbdegats;
+ SDL_Surface *Pcadrecible;
+ SDL_Surface *Pnomcible;
+ SDL_Surface *Pactive;
+ SDL_Surface *Pdesactive;
+ SDL_Surface *Ppvcible;
+ SDL_Surface *Ppmcible;
+ SDL_Surface *Ppvpersos;
+ SDL_Surface *Ppmpersos;
+ SDL_Surface *Pcadreactions;
+ SDL_Surface *Pactionselectionnee;
+ SDL_Surface *Pactiondesactivee;
+ SDL_Surface *Pnomactions[3];
+ SDL_Surface *Pmort;
+ SDL_Surface *Pquantite[3];
+ SDL_Surface *Pmap_sol;
+ SDL_Surface *Pmap_mur;
+ SDL_Surface *Pmap_coffre;
+ SDL_Surface *Pmap_perso;
+};
+
+typedef struct positions POSITIONS;
+struct positions
+{
+ SDL_Rect Vpositionmenu;
+ SDL_Rect Vpositionmenupaladin;
+ SDL_Rect Vpositionmenuvoleur;
+ SDL_Rect Vpositionmenupretre;
+ SDL_Rect Vpositionpersos[3];
+ SDL_Rect Vpositionennemis[5];
+ SDL_Rect Vpositiontextemenu;
+ SDL_Rect Vpositioncurseurennemis;
+ SDL_Rect Vpositioncurseurallies;
+ SDL_Rect Vpositioncadrecible;
+ SDL_Rect Vpositionnomcible;
+ SDL_Rect Vpositionactivedesactive[16];
+ SDL_Rect Vpositionpvcible;
+ SDL_Rect Vpositionpmcible;
+ SDL_Rect Vpositioncadreactions;
+ SDL_Rect Vpositionactionselectionnee[3];
+ SDL_Rect Vpositionnomactions[3];
+ SDL_Rect Vpositionmort;
+ SDL_Rect Vpositiondegats;
+ SDL_Rect Vpositionpvpersos[3];
+ SDL_Rect Vpositionpmpersos[3];
+ SDL_Rect Vpositionquantite[3];
+ SDL_Rect Vpositionmap_item[15][11];
+};
+
+typedef struct personnages PERSONNAGES;
+struct personnages
+{
+ int classe;
+ int nv;
+ int pv;
+ int pm;
+ int magie;
+ int force;
+ int defense;
+ int defensemagique;
+ int xp;
+ int etat;
+ int pvinitiaux;
+ int pminitiaux;
+};
+
+typedef struct ennemis ENNEMIS;
+struct ennemis
+{
+ int classe;
+ int pv;
+ int pm;
+ int magie;
+ int force;
+ int defense;
+ int defensemagique;
+ int etat;
+ int sensibilite[4];
+ int resistance[4];
+ int invulnerabilite[4];
+ int absorbtion[4];
+ int pvinitiaux;
+ int pminitiaux;
+};
+
+typedef struct objets OBJET;
+struct objets
+{
+ int potions;
+ int ethers;
+ int potionsplus;
+ int ethersplus;
+};
+
+#endif
+