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:
    (shp=0)(ghp=0)\overline{(s_{hp}= 0)\vee (g_{hp}= 0)}
    -> http://de.wikipedia.org/wiki/De_Morgansche_Gesetze
    (shp0)(ghp0)(s_{hp}\neq 0)\wedge (g_{hp}\neq 0)



  • 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 von std::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ß,
    FW

    Nach Diktat Bierchen trinken gegangen.


Log in to reply