Anfänger : Logisches Oder in While Schleifen
-
sry, klammer übersehn *schäm*
-
So, Sorry ich kriegs immer noch nicht hin...
Irgendwie bricht die Schleife bei mir immer erst ab, wenn beide Bedingungen erfüllt sind... und wenn ich das ! versuchte wurde es eine Endlosschleife....

hier also der Code :
#include <iostream> #include <string> #include <cstdio> #include <string> using namespace std; int ATK(int M_DEF, int P_ATK) { int DAM=(M_DEF-P_ATK); return DAM; } int C_ATK(int P_DEF, int M_ATK) { int C_DAM=(P_DEF-M_ATK); return C_DAM; } int main() { string P_Name="Ruby"; int P_LVL=1; int P_EXP=0; int P_HP=100; int P_DEF=5; int P_ATK=15; int M_HP=50; int M_ATK=10; int M_DEF=5; cout << "Gegner 1 " << endl; cout << P_Name << " VS " << " Gegner 1 " << endl; /* int M_DAM(M_DEF-P_ATK); cout << " Der ausgeteilte Schaden betr\204gt : " << (M_DAM*-1) << endl; int P_DAM(P_DEF-M_ATK); cout << " Der erhaltene Schaden betr\204gt : " << (P_DAM*-1) << endl; */ cout << " Dein Gegner hat : " << M_HP << " Lebenspunkte. " << endl; cout << " Du hast : " << P_HP << " Lebenspunkte. " << endl; cout << " Du greifst an " << endl; while ( P_HP>=1 || M_HP>=1 ) { ATK(M_DEF,P_ATK); cout << "Ausgeteilter Schaden : " << ATK(M_DEF,P_ATK)*(-1) << endl; M_HP+=ATK(M_DEF,P_ATK); cout << " Neue Monster HP = " << M_HP << endl; if ( M_HP<=0 ) { cout << " Der Gegner ist Tod " << endl; } else {cout << " Los weiter !!! " << endl; } C_ATK(P_DEF,M_ATK); cout << "Erhaltener Schaden : " << C_ATK(P_DEF,M_ATK)*(-1) << endl; P_HP+=C_ATK(P_DEF,M_ATK); cout << " Deine neuen Trefferpunkte : " << P_HP << endl; if ( P_HP<=0 ) { cout << " Du bist leider gestorben... " << endl; } else { cout << " Du lebst noch, gib nicht auf ! " << endl; } getchar(); } fflush(stdin); getchar(); return 0; }Irgendwas überseh ich hier..
.. oder ist der Ansatz komplett falsch ?Bitte gebt mir einen Tip...
-
Whitedragon276 schrieb:
Irgendwie bricht die Schleife bei mir immer erst ab, wenn beide Bedingungen erfüllt sind... und wenn ich das ! versuchte wurde es eine Endlosschleife....

Es würde würde wahrscheinlich enorm helfen, wenn du dir darüber klar würdest, dass eine while-Schleife nicht abbricht, wenn eine Bedingung erfüllt ist, sondern läuft, solange eine Bedingung erfüllt ist (sonst würde sie until heißen).
while ( P_HP>=1 || M_HP>=1 )Das wird dann wohl ein Und sein (&&) und kein Oder ...
-
OK... habs zwar noch nicht ganz kapiert... aber das funkioniert tatsächlich mit dem Und statt Oder...
zum Verständnis :
Also Während/solange beide Bedingungen nicht erfüllt sind läuft die Schleife ?
Und sie läuft nicht weiter wenn eine der beiden Bedingungen erfüllt ist ?
Aber sie läuft weiter wenn Bedingung 1 oder Bedingung 2 erfüllt wurde ?

Das wird wohl noch ne Zeit dauern bis ich das "Logisch" anwenden kann....
Aber erst mal Dank an alle die mir hier geholfen haben...:-)
-
Whitedragon276 schrieb:
Also Während/solange beide Bedingungen nicht erfüllt sind läuft die Schleife ?
Wie kommst du immer auf das "nicht"?
-
Naja... Die Schleife läuft doch solage P_HP & M_HP >=1 sind, und wird nicht mehr wiederholt wenn eine der beiden Bedingungen ... ?
OK.. ich glaub ich habs... Die Schleife läuft bis die Bedingungen erfüllt sind ? **Hoff**
Danke
-
Es heisst while -> läuft solange die Bedingung erfüllt ist == läuft bis die Bedingung nicht mehr erfüllt ist.
Kurt
-
Whitedragon276 schrieb:
Naja... Die Schleife läuft doch solage P_HP & M_HP >=1 sind, und wird nicht mehr wiederholt wenn eine der beiden Bedingungen ... ?
Sie läuft, solange P_HP >= 1 UND M_HP >= 1. Das heißt, sie bricht ab, sobald eine der Bedingungen nicht mehr erfüllt ist.
Vielleicht benutzt du das Wort "erfüllt" auch nur komisch

-
...aber diesen Quellcode würde man doch schneller und unkomplizierter ohne die ganzen Funktionsaufrufe schreiben können, oder ?
C++4eVer
-
@Bashar >>
Sie läuft, solange P_HP >= 1 UND M_HP >= 1. Das heißt, sie bricht ab, sobald eine der Bedingungen nicht mehr erfüllt ist.
Das war genau der Satz, der den Groschen zum fallen brachte, Danke !!!