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.