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 !");
}
}
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.
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.
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
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 )
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.
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
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.
PXL Le retro gaming facile Thread sur le forum: https://openclassrooms.com/forum/sujet/retro-pxl
PXL Le retro gaming facile Thread sur le forum: https://openclassrooms.com/forum/sujet/retro-pxl
PXL Le retro gaming facile Thread sur le forum: https://openclassrooms.com/forum/sujet/retro-pxl