From e816f16a5007798968f4c9003b3159a45485e88f Mon Sep 17 00:00:00 2001 From: Olivier Gayot Date: Sun, 26 Oct 2014 18:20:28 +0000 Subject: game: remove useless checks it is safe to pass a null pointer to SDL_FreeSurface() BTW: change the format of the files from dos to unix Signed-off-by: Olivier Gayot --- actions.c | 1072 ++++++++++++++++++++++++++++++------------------------------- 1 file changed, 536 insertions(+), 536 deletions(-) (limited to 'actions.c') diff --git a/actions.c b/actions.c index ebf3af8..e14bc09 100644 --- a/actions.c +++ b/actions.c @@ -1,536 +1,536 @@ -#include -#include "structures.h" -#include "constantes.h" -#include "prototypes.h" -#include -#include - -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; - } -} - - - +#include +#include "structures.h" +#include "constantes.h" +#include "prototypes.h" +#include +#include + +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; + } +} + + + -- cgit v1.2.3