Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Nieskończona pętla "for".

Ostatnio zmodyfikowano 2015-05-02 23:52
Autor Wiadomość
Fridrich
Temat założony przez niniejszego użytkownika
[C++] Nieskończona pętla "for".
» 2015-05-02 22:04:07
Witam serdecznie.
Ostatnio zabrałem się za napisanie krótkiej gry tekstowej (dlatego piszę w tym dziale, ponadto problem tyczy się raczej ogólnej składni C++'a niż konkretnie pisania gier). Jest to symulator walki w stylu RPG. Większość kodu odpowiadającego za poszczególne tury, umieściłem w dwóch pętlach "for", niestety program nigdy pętli tej nie opuszcza.
C/C++
srand( time( NULL ) ); //Obliczanie pseudolosowych obra¿eñ.
for( i = gracz_hp; i > 0; i = i )
{
    for( y = gryc_hp; y > 0; y = y )
    {
       
        cout << "Mozliwe akcje: Atak, Obrona, Mikstura" << endl;
        obrazenia = rand() % 31 + 20; //Zakres funkcii "obrazenia": 20..50
        obrazenia_gryc = rand() % 61 + 10; //Zakres funkcji "obrazenia_gryc": 10..70
        cout << "Co chcesz zrobic?" << endl; //Wybór akcji.
        cin >> akcja;
        cout << "Zdrowie Gryca:" << gryc_hp << endl;
        if(( akcja == "atak" ) ) //Pocz¹tek "if'a" akcji gracza.            //Dzia³anie przy wyborze akcji ataku.
        {
            gryc_hp = gryc_hp - obrazenia; //Zmniejszenie wartoœci funkcji zdrowia przeciwnika.
            cout << "Zadales przeciwnikowi " << obrazenia << " punktow obrazen!" << endl;
            cout << "Twoje zdrowie wynosi:" << gracz_hp << endl;
        }
        else if(( akcja == "obrona" ) )
        {
            obrazenia_obrona = obrazenia_gryc / 4; //Mog³em w sumie zdeklarowaæ tê funkcjê wczeœniej.
        }
        else if(( akcja == "mikstura" ) )
        {
            gracz_hp = gracz_hp + 60; //Zwiêkszenie liczby punktów zdrowia gracza o 60.
            mikstury = mikstury - 1; //Zmniejszenie liczby mikstur.
            cout << "Twoje zdrowie wynosi:" << gracz_hp << endl;
        }
        else if(( akcja == "BialekPL" ) )
        {
            gryc_hp = gryc_hp - 5555; // Gimper nie banuj pls ;-;
            cout << "OMG! ZNALAZLES UKRYTY SUPER ATAK!!!" << endl;
        }
       
        if(( akcja == "obrona" ) ) //Pocz¹tek "if'a" akcji przeciwnika.
        {
            gracz_hp = gracz_hp - obrazenia_obrona; //Zadanie obra¿eñ podczas obrony.
            cout << "Otrzymales: " << obrazenia_obrona << " punktow obrazen!" << endl;
            cout << "Twoje zdrowie wynosi:" << gracz_hp << endl;
        }
        else
        {
            gracz_hp = gracz_hp - obrazenia_gryc; //Zadanie normalnych obra¿eñ.
            cout << "Otrzymales: " << obrazenia_gryc << " punktow obrazen!" << endl;
            cout << "Twoje zdrowie wynosi:" << gracz_hp << endl;
        }
    }
}
Program zostaje w pętlach "for" mimo tego, że zmienna "gracz_hp" (która odpowiada za przechowywanie wartości stanu zdrowia gracza) posiądzie wartość poniżej 0; program po prostu kontynuuje działanie wyświetlając zdrowie gracza jako liczbę ujemną. Od razu piszę, że program się kompiluje i uruchamia bez problemów. Pominąłem również dyrektywy "#include", "using namespace std", oraz początkowe cout'y, które miały jedynie wyświetlić informację o rozpoczęciu walki. Nie deklarowałem w programie, żadnych stałych. Dziekuję za ewentualną pomoc i pozdrawiam :)
EDIT: Korzystam z CodeBlocks, kompilatora GNU CCC jeśli to ma jakieś znaczenie.
P-131704
pekfos
» 2015-05-02 23:04:33
Te pętle są bez sensu napisane. Powinno być po prostu
C/C++
while( ktos_hp > 0 )
P-131709
Fridrich
Temat założony przez niniejszego użytkownika
» 2015-05-02 23:20:56
Prawda, tylko jak mam zrobić, żeby pętla zamknęła się kiedy jedna z dwóch zmiennych .._hp wyniesie poniżej zera? Jeżeli umieszczam jedną pętlę w drugiej, występuje ten sam błąd.
P-131710
pekfos
» 2015-05-02 23:32:54
Połącz warunki operatorem &&?
P-131712
Fridrich
Temat założony przez niniejszego użytkownika
» 2015-05-02 23:52:16
Dziękuję, wszystko już działa! Pozdrawiam.
P-131715
« 1 »
  Strona 1 z 1