do while mit mehreren Bedingungen
-
Ist es möglich eine do while Schleife so in der art zu gestalten?
do{ //Code }while(s_hp!=0 || g_hp!=0);Weil so geht es nicht und ich bräuchte soetwas.
-
doch, so geht es. diese != und || sind schlussendlich auch nur operatoren...
-
So geht es.
Es wird ausgeführt so lange s_hp nicht 0 ist ODER g_hp nicht 0 ist.
Du suchst vermutlich und, nicht oder.
-
Nein...
Ich möchte es abgebrochen haben wenn s_hp = 0 oder g_hp = 0.
Aber ich denke ihr braucht Code, weil ich habe ausprobiert und es klappt nicht.Einmal die Funktion kampf
void kampf(string s_name, string s_pokemon, string g_name, string g_pokemon){ int s_hp=100, g_hp=100, schaden=0; do{ system("cls"); s_lebensbalken(s_name, s_pokemon, s_hp); g_lebensbalken(g_name, g_pokemon, g_hp); cout << "\n\n\n" << s_name << " bitte den Schaden von " << s_pokemon << " eingeben: "; cin >> schaden; g_hp=g_hp-schaden; if(g_hp<0){ g_hp=0; } else if(s_hp<0){ s_hp=0; } else{ } }while(s_hp!=0 || g_hp!=0); }Und die Funktion g_lebensbalken (s_lebenbalken ist genauso aufgebaut)
void g_lebensbalken(string g_name, string g_pokemon, int &g_hp){ if(g_hp <= 0){ g_hp=0; cout << "\n\n\nName: " << g_name << "\n" << "| |\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp << "\n\n\n" << g_name << " faellt in Ohnmacht."; } else if(g_hp < 10){ cout << "\n\n\nName: " << g_name << "\n" << "|- |\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } else if(g_hp < 20){ cout << "\n\n\nName: " << g_name << "\n" << "|-- |\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } else if(g_hp < 30){ cout << "\n\n\nName: " << g_name << "\n" << "|--- |\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } else if(g_hp < 40){ cout << "\n\n\nName: " << g_name << "\n" << "|---- |\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } else if(g_hp < 50){ cout << "\n\n\nName: " << g_name << "\n" << "|----- |\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } else if(g_hp < 60){ cout << "\n\n\nName: " << g_name << "\n" << "|------ |\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } else if(g_hp < 70){ cout << "\n\n\nName: " << g_name << "\n" << "|------- |\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } else if(g_hp < 80){ cout << "\n\n\nName: " << g_name << "\n" << "|-------- |\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } else if(g_hp < 90){ cout << "\n\n\nName: " << g_name << "\n" << "|--------- |\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } else if(g_hp < 100){ cout << "\n\n\nName: " << g_name << "\n" << "|----------|\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } else if(g_hp == 100){ cout << "\n\n\nName: " << g_name << "\n" << "|----------|\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } else if(g_hp > 100){ g_hp=100; cout << "\n\n\nName: " << g_name << "\n" << "|----------|\n" << "Pokemon: " << g_pokemon << "\n" << "HP: " << g_hp; } }Ich hoffe damit könnt ihr was anfangen

(Und falls ihr bockt habt schreibt mir als feedback ob ich etwas an meinem "Stil" verbessern kann)
-
Nein, du möchtest und.
Ich selbst habe es, merk ich gerade, ungünstig formuliert:Es wird ausgeführt so lange (s_hp nicht 0 ist ODER g_hp nicht 0) == true ist.
Das heißt:
Wenn s_hp 0 und g_hp 1 -> false || true -> true
Wenn s_hp 1 und g_hp 0 -> true || false -> true
...
Du suchst und.
-
Nathan schrieb:
Du suchst vermutlich und, nicht oder.
Skeptar schrieb:
Nein...
Ich möchte es abgebrochen haben wenn s_hp = 0 oder g_hp = 0.Doch!
Du negierst deine Bedingung
while (!(s_hp==0 || g_hp==0));Du kannst auch das ! in die Klammer ziehen. Aber dann wird auch das || zum &&
while (s_hp!=0 && g_hp!=0);
-
Skeptar schrieb:
Nein...
Ich möchte es abgebrochen haben wenn s_hp = 0 oder g_hp = 0.
Aber ich denke ihr braucht Code, weil ich habe ausprobiert und es klappt nicht.wie nein? du widersprichst dir selbst. du sagst:
-> http://de.wikipedia.org/wiki/De_Morgansche_Gesetze
-
Ja ihr habt recht

Sorry und danke!
-
Skeptar schrieb:
(Und falls ihr bockt habt schreibt mir als feedback ob ich etwas an meinem "Stil" verbessern kann)
Ja: wenn Du 2 mal das gleiche machst: Schreib eine Funktion!
Und schau Dir die Standardbibliothek an. Z.B. die Methoden vonstd::string- unten z.B. benutze ich einen praktischen Konstruktor.
Mach Dir nicht zuviel Arbeit mit Formatierung in der Konsole - dafür gibt es Bibliotheken, die das besser können.Hier mal eine kuerzere Version von
lebensbalken(). Da fehlt noch ein wenig was (kleiner 0, größer 100 usw.), aber die Idee kommt rüber, hoffe ich.#include <string> #include <iostream> struct pokemon{ int hp; }; std::string lebensbalken(const pokemon& p){ const int len=p.hp/10; return std::string{"|"} + std::string(len, '-') + std::string(10-len, ' ') + std::string{"|"}; } int main(){ pokemon pikachu{100}, gesundheit{65}; std::cout << lebensbalken(pikachu) << '\n' << lebensbalken(gesundheit) << '\n'; }Gruß,
FWNach Diktat Bierchen trinken gegangen.