Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de boucle

Sujet résolu
    10 février 2021 à 10:48:59

    Bonjour a tous,

    Hier j'ai poster un message a propos d'une erreur avec ma boucle, maintenant j'ai une nouvelle erreur. Ma boucle ne s'arrête pas quand "monster1.aLife" et "player.aLife" arrivent a 0. Pourtant elles ont bien une valeur toutes les deux mais elles descendent dans les négatifs et je ne vois vraiment pas pourquoi.

    Quelqu'un pourrait-il m'expliquer ?

    package rpggame;
    import java.util.Scanner;
    
    public class Fighting 
    {
    	Scanner sc = new Scanner(System.in);
    	
    	public Fighting()
    	{
    		Monsters monster1 = new Monsters("Zombie", 50, 10);
    		Player player = new Player("Bob", 5, 5, 15);
    		
    		while(player.aLife > 0 || monster1.aLife > 0) // MA BOUCLE ICI NA S'ARRÊTE PAS A 0 ET DESCEND DANS LES NéGATIFS
    		{
    			System.out.println("======================");
    			System.out.println("A vous d'attaquez !");
    			System.out.println("(1) pour attaquer.");
    			System.out.println("======================");
    			int attack = sc.nextInt();
    			
    			if(player.aLife > 0)
    			{
    				if(attack == 1)
    				{
    					monster1.aLife -= player.aDamage;
    					System.out.println("Vous mettez " + player.aDamage + " de dégats au monstre !");
    					System.out.println("Il lui reste " + monster1.aLife + " PV !");
    				}
    				else
    					System.out.println("Vous passez votre tour !");
    			}
    			else if(player.aLife == 0)
    				System.out.println("Vous êtes mort !");
    			
    			
    			if(monster1.aLife > 0)
    			{
    				System.out.println("Le monstre vous attaque !");
    				player.aLife -= monster1.aDamage;
    				player.aLife += player.aArmor;
    				System.out.println("Il vous reste " + player.aLife + " PV !");
    			}
    			else
    				System.out.println("Le monstre est mort !");
    		}
    		System.out.println("Vous sortez vainqueur du combat !");
    	}
    }
    



    -
    Edité par UlQui0rr4 10 février 2021 à 10:53:25

    • Partager sur Facebook
    • Partager sur Twitter
    Le nihilisme ne possède rien et n'a rien perdre.
      10 février 2021 à 12:07:14

      Le code fait bien ce que tu lui demandes:

      tant que player > 0 OU que monster > 0

      • Partager sur Facebook
      • Partager sur Twitter
        10 février 2021 à 14:16:25

        rien n'a faire je ne comprend pas.
        • Partager sur Facebook
        • Partager sur Twitter
        Le nihilisme ne possède rien et n'a rien perdre.
          10 février 2021 à 14:19:58

          la boucle va continuer si player hp est plus grand que 0, ou bien si monster hp est plus grand que 0, elle ne s'arrêtera donc que si les 2 sont plus petit ou égal à 0.
          • Partager sur Facebook
          • Partager sur Twitter
            10 février 2021 à 14:23:08

            J'ai déjà essayé et ca m'envoi directement au "System.out.println("Vous sortez vainqueur du combat !");"

            • Partager sur Facebook
            • Partager sur Twitter
            Le nihilisme ne possède rien et n'a rien perdre.
              11 février 2021 à 10:09:35

              c'est la première chose que j'avais essayé : "while(player.aLife <= 0 || monster1.aLife <= 0)" mais il ne rentre pas dans la boucle et m'envoi directement après la boucle au "System.out.println("Vous sortez vainqueur du combat !");"

              J'ai vérifier si player.aLife et monster1.aLife avait une valeur avant de rentrer dans la boucle et elles en ont bien une. 

              Je ne vois donc pas pourquoi ça ignore la boucle, je dois avoir manqué quelque chose mais je ne vois pas quoi.

              • Partager sur Facebook
              • Partager sur Twitter
              Le nihilisme ne possède rien et n'a rien perdre.
                11 février 2021 à 10:22:31

                > il ne rentre pas dans la boucle

                Il n'y a aucune sorcellerie là dedans.

                Si "il" ne rentre pas dans la boucle, c'est que les valeurs font que la condition que tu as écrite toi-même avec tes petits doigts est fausse au moment où "il" arrive à la boucle.

                > J'ai vérifier si player.aLife et monster1.aLife avait une valeur

                oui, mais lesquelles ?

                ---

                Alors soit le problème vient des valeurs qui ne sont pas ce qu'elles devraient, soi c'est un problème de codage de ta condition, une différence entre ce que tu veux faire et ce que tu as écrit.

                Peux-tu exprimer EN FRANCAIS SIMPLE, PRECIS ET CORRECT, ce que tu veux faire ?
                Genre "éxécuter la boucle si les deux (joueur et monstre) ont leur vie à 0". Ou un des deux ? Ou supérieur ou égal à 0 ? Ou ...

                ---

                pendant que j'y suis, dans le code présenté au début

                  player.aLife -= monster1.aDamage;
                

                risque de donner une valeur NEGATIVE à player.aLife.

                Ce qui ne serait pas embêtant si il n'y avait pas ceci (désolé, l'éditeur d'OC, kings of the codage, est pété)

                 if(player.aLife > 0)
                            {
                                // ....
                             }
                   else if (player.aLife == 0)
                                System.out.println("Vous êtes mort !");
                

                qui ne sait rien faire quand c'est négatif

                -
                Edité par michelbillaud 11 février 2021 à 10:55:24

                • Partager sur Facebook
                • Partager sur Twitter
                  11 février 2021 à 14:21:39

                  ta boucle doit s'arrêter quand l'un de deux est égale ou inférieur 0  ? soit a<=0 ou b<=0; donc ta boucle doit continuer si cette condition n'est pas remplie, donc not(a<=0 ou b<=0)  ce qui peut s'écrire a>0 et b>0 (loi de Morgan : https://fr.wikipedia.org/wiki/Lois_de_De_Morgan  )
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 février 2021 à 14:28:01

                    Alors j'ai vérifié si la valeur de player.aLife et monster1.aLife avait la valeur de "50". J'ai regardé avec un "System.out.print" est leurs valeur sont bien a "50".

                    Alors je veux que : tant que player.aLife et monster1.aLife est inferieur ou égal à 0 que ça sorte de la boucle, est que ca mette fin au combat.

                    Ensuite pour player.aLife -= monster1.aDamage; il faudrait que je mette le résultat dans une variable ou c'est l'opération qui n'est pas bonne ?

                    Et dernièrement il faut que je change d'IDE, c'est ça ?

                    Merci pour ta réponse et toute tes précisions qui vont pouvoir me faire réfléchir a autre chose. 

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Le nihilisme ne possède rien et n'a rien perdre.
                      11 février 2021 à 16:47:41

                      On te pose des questions pour t'aider, et tu n'y réponds pas. Tu veux que ça sorte quand les deux sont négatifs, ou au moins un ? - Avant de réfléchir à autre chose, occupes toi de ce problème là. Il va pas disparaitre par magie.

                      -
                      Edité par michelbillaud 11 février 2021 à 16:51:22

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Probleme de boucle

                      × 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