Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu de combat

lang c

    4 septembre 2019 à 22:42:54

    Bonjour, 

    Je suis débutante en langage c et je m'entraine sur cet exo: 

    On souhaite simuler un jeu de combat entre deux joueurs. Chacun des deux joueurs dispose d’un nombre de points de vie initial pv_init. À chaque tour de jeu, chacun des joueurs inflige à l’autre un nombre de points de dégâts tiré aléatoirement par le lancer d’un dé à 6faces : ces points de dégâts sont ensuite retirés des points de vie de son adversaire. Le jeu se termine lorsqu’au moins un des deux joueurs obtient un nombre de points de vie inférieur ou égal à zéro (il peut y avoir match nul).

    page1image4190887136

    — Écrivez un programme C qui simule une partie de jeu où, à chaque tour, vous devez afficher le numéro du tour, le nombre de points de vie des deux joueurs au début du tour et le nombre de points de dégâts infligés par chaque joueur à son adversaire. À la fin du dernier tour, votre programme doit afficher le joueur gagnant et le nombre de tours joués.

    Indication de mise en œuvre : La fonction rand(), de la bibliothèque « stdlib.h », retourne un nombre aléatoire compris entre 0 et RAND_MAX. Pour utiliser cette fonction sans avoir toujours la même liste de nombres "aléatoires", il faut initialiser le générateur avec l’instruction srand(time(NULL)) que vous devez ajouter au tout début de la fonctionmain(). Cette instruction utilise la bibliothèque « time.h ».


    Voici mon avancée:

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<time.h>
    
    int main(int argc,char**argv){
    
    
    int pv_initJ1=10, pv_initJ2=10, DE=0, J1=0, J2=0, tour=1, MAX=6, MIN=1, joueur_init=0,joueur_actuel=0, commencer_aleatoire=0, DE2=0, MAX2=2,MIN2=1;
    
        srand(time(NULL));
    
    
        
        printf("---Commencer la partie de jeu---\n");
        printf("Joueur 1, entrez votre nombre\n");
        scanf("%d",&J1);
        printf("Joueur 2, entrez votre nombre\n");
        scanf("%d",&J2);
        
        printf("Tour: %d\n",tour);
    
        printf("Point de vie initial du joueur 1:%d\n",pv_initJ1);
        printf("Point de vie initial du joueur 2:%d\n",pv_initJ2);
    
        /*printf("---Lancer de DE aleatoire---\n");
        DE2=(rand()%(MAX2-MIN2+1))+MIN2;
        
        if(DE2=1)
        */{
    
        printf("C'est %d (joueur 1) qui commence\n",J1);
        joueur_init=J1;
        
        /*}else if(DE2=2){
        printf("C'est %d (joueur 2) qui commence\n",J2);
        joueur_init=J2;
        */}
        
        
        while(pv_initJ2>0 || pv_initJ1>0){
        
        
            if(joueur_init=J1){
                DE=(rand()% (MAX-MIN+1))+MIN;
                printf("%d POINT(S) EN MOINS POUR J2\n",DE);
                pv_initJ2=pv_initJ2-DE;
                printf("J2 Il vous reste %d points\n",pv_initJ2);
                    
        
                joueur_init=J2;
                
            }else if(joueur_init=J2){
                DE=(rand()% (MAX-MIN+1))+MIN;
                printf("%d POINT(S) EN MOINS POUR J1\n",DE);
                pv_initJ1=pv_initJ1-DE;
                printf("J1 Il vous reste %d points\n",pv_initJ1);
        
                
                joueur_init=J1;
            }
        tour++;
        }
    
    
        if(pv_initJ2=0 && pv_initJ2>pv_initJ1){
            printf("J2 a GAGNE");
        }else if(pv_initJ1=0 && pv_initJ1>pv_initJ2){
            printf("J1 a GAGNE");
        }
    
        
    
    
    
    return 0;
    }
    


    ET voilà ce que ça me donne:

    donc une Boucle infinie mais je sais d'ou elle vient, elle provient de mon while(pv_initJ2>0 || pv_initJ1>0) mais le truc c'est que dans ma logique tant que les points de vies initiaux sont > 0 il faut faire les points de vie MOINS le résultats du dé aléatoire pour arriver jusqu'à 0 et donc le gagnant...

    fin bref je comprends pas mes erreurs... pourriez vous m'expliquer et m'éclairer ?

    • Partager sur Facebook
    • Partager sur Twitter
      5 septembre 2019 à 7:21:09

      alors si tu avais regardé la sorltie tu aurrais vue que c'est faux deja rien que sur l'enchainnement c'est toujours J2 qui prend.

      ensuite tu asune erreur dans la condition de boucle :

      tant que la vie de J2 > 0 ou la vie de J1 > 0, donc effectivement il ne va jamais sorti (dans ton cas) car J1 est toujours superieur à 0

      -
      Edité par ox223252 5 septembre 2019 à 7:21:45

      • Partager sur Facebook
      • Partager sur Twitter

      la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

      Mon GitHub

      Jeu de combat

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown