Bien voila, j´ai commencer hier l´elaboration d´un Systeme de combat, que j´ai écris en console d´application en premier temps et que je retranscrirait en fenetre graphique avec animation et tout le tralala grace à la SDL, mais mon problème estle suivant :
j´utilise une boucle while pour que le combat se termine quand un des 2 protagonistes ( la en loccurence le joueur et le pc ) descend à 0 de HP. j´ai donc naïvement cru que je pourrais faire :
while( HPEnemie > 0 || HPJoueur > 0 )
mais ceci n´a pas l´air de marché et quand l´enemi atteint 0 le combat continue,
voici le code complet (il n´est bien sur pas finimais le peu de code que j´ai ecrit devrait fonctionner correctement sans cette boucle ...) :
- include <stdio.h>
- include <stdlib.h>
int main(int argc, char *argv[])
{
srand(time(NULL));
long MAX = 100;
long MIN = 0;
long choixCombat = 0;
char nomJoueur[100] = "freeman";
long constitutionJoueur = 5;
long constitutionEnemie = 5;
long HPJoueur = constitutionJoueur * 50;
long HPEnemie = constitutionEnemie * 50;
long precisionJoueur = 0;
long precisionEnemie = 0;
long esquiveJoueur = 0;
long esquiveEnemie = 0;
long forceJoueur = 5;
long forceEnemie = 5;
long attaque = 0;
long attaqueHazard = 0;
long degats = 0;
long degatsHazard = 0;
long MINdegats = (forceJoueur * 10) - ((forceJ
oueur * 10 ) / 10 );//calcul pour laisser une marge de 10 % sur les degats minimaux pour le rand degatsHazard ci dessous
long MAXdegats = (forceJoueur * 10) + ((forceJ
oueur * 10 ) / 10 );//calcul pour laisser une marge de 10 % sur les degats maximaux pour le rand degatsHazard ci dessous
while( HPEnemie > 0 || HPJoueur > 0 )
{
printf("1. Attaquer \n");
printf("2. Skills \n");
printf("3. objets \n");
printf("\n\nChoix : ");
scanf("%ld", &choixCombat);
if(choixCombat == 1)
{
degatsHazard = (rand() % (MAXdegats - MINdegats + 1)) + MINdegats;
attaqueHazard = (rand() % (MAX - MIN + 1)) + MIN;
attaque = attaqueHazard + precisionJoueur - esquiveEnemie;
if( attaque >= 90 )
{
degats = degatsHazard + ((forceJoueur * 10) / 5);
printf("\n\nVous assenez un coups a la tete de votre adversaire ( degats +20 pour cent ).\n\n- %ld HP.\n\n\n", degats);
}
else if( attaque >= 70 && attaque < 90 )
{
degats = degatsHazard + ((forceJoueur * 10) / 10);
printf("\n\nVous plantez votre arme dans le torse de l´enemie ( degats +10 pour cent ).\n\n- %ld HP.\n\n\n", degats);
}
else if( attaque >=40 && attaque < 70)
{
degats = degatsHazard;
printf("\n\nVous atteignez l´enemie a l´epaule ( degats normaux ).\n\n- %ld HP.\n\n\n", degats);
}
else if( attaque >= 30 && attaque < 40 )
{
degats = degatsHazard - ((forceJoueur * 10) / 10);
printf("\n\nVous frappez l´enemie a la jambe ( degats -10 pour cent ).\n\n- %ld HP.\n\n\n", degats);
}
else if( attaque >= 20 && attaque < 30 )
{
degats = degatsHazard - ((forceJoueur * 10) / 5);
printf("\n\nVous effleurer a peine l´enemie ( degats -20 pour cent ).\n\n- %ld HP.\n\n\n", degats);
}
else
{
printf("\n\nVotre attaque loupe \n\n\n");
}
HPEnemie = HPEnemie - degats;
if(HPEnemie < 0)
{
printf("HP Enemie = 0\n\n");
}
else
{
printf("HP Enemie = %ld\n\n", HPEnemie);
}
printf("HP %s = %ld\n\n", nomJoueur, HPJoueur);
}
}
system("PAUSE");
return 0;
}