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

Znikająca pętla - switch - walka z Bosem ;)

Ostatnio zmodyfikowano 2019-11-14 17:22
Autor Wiadomość
Wenzon
Temat założony przez niniejszego użytkownika
Znikająca pętla - switch - walka z Bosem ;)
» 2019-11-11 02:04:19
Cześc, właśnie ucze się programowania w języku C++. Piszę program walki z przeciwnikami. Czy ktoś mógłby mi doradzić czemu kiedy usuwam komentarz z dołu mojego kodu źródłowego (dwie liniki) to znika poprawne działanie całego kodu a pętle przestają być widoczne dla kompilatora - cały początek programu zostaje pominięty? Bardzo proszę o pomoc. Siedziałem nad tym już godzinami i nie wiem co jest grane :/

C/C++
#include <iostream>
using namespace std;

int main()
{
   
    int zycie_bosa;
    int x;
    int bos;
    int obrazenia;
    int w;
    int p;
    int atak_bosa;
    int nasze_zycie;
   
   
   
    poczatek:
   
   
    switch( w )
   
    {
       
    case 1:
       
        cout << "\nZ ktorym bosem chcesz walczyc?\n";
        cout << "1 - Szczurem jaskiniowym - 100 HP\n";
        cout << "2 - Zywiolakiem skalnym - 450 HP\n";
        cout << "3 - Krolem ogrow - 1000 HP\n";
        cout << "\n4 - Wyjscie z podziemi \n\n";
       
        cin >> bos;
       
       
        switch( bos )
       
       
        {
        case 1:
            cout << "Walczysz ze Szczurem jaskiniowym ktory ma 100HP\n";
            zycie_bosa = 100;
            nasze_zycie = 100;
            break;
           
        case 2:
            cout << "Walczysz ze Zywiolakiem skalnym ktory ma 450HP\n";
            zycie_bosa = 450;
            nasze_zycie = 100;
            break;
           
        case 3:
            cout << "Walczysz z Krolem ogrow ktory ma 1000HP\n";
            zycie_bosa = 1000;
            nasze_zycie = 100;
            break;
           
        case 4:
            cout << "Ok, wychodzisz ";
            exit( 0 );
            break;
           
        }
       
    }
   
   
   
    while( zycie_bosa > 0 )
    {
       
       
        cout << "\nIle zadajesz obrazen\n";
        cin >> obrazenia;
        zycie_bosa = zycie_bosa - obrazenia;
        // nasze_zycie = nasze_zycie - 10;
        cout << "Bos ma teraz " << zycie_bosa << "HP";
        // cout << "Bos zabral nam 10 zycia, mamy teraz " << nasze_zycie ;
       
       
    }
   
   
   
   
    cout << "Czy chcesz dalej walczyc? Tak - 1, Nie - 2";
    cin >> p;
    if( p == 1 )
    {
       
        goto poczatek;
    }
    else if( p == 2 )
    {
        exit( 0 );
    }
   
   
}





P-175530
nanoant20
» 2019-11-11 08:48:08
switch( w )
 co reprezentuje ta zmienna "w"?
Warunek wielokrotnego wyboru switch

może chodzi Ci o coś takiego?
C/C++
int w = 10;
int bos;

switch( w ) {
case 10:
    cout << "\nZ ktorym bosem chcesz walczyc?\n";
    cout << "1 - Szczurem jaskiniowym - 100 HP\n";
    cout << "2 - Zywiolakiem skalnym - 450 HP\n";
    cout << "3 - Krolem ogrow - 1000 HP\n";
    cout << "\n4 - Wyjscie z podziemi \n\n";
   
    cin >> bos;
    switch( bos ) {
    case 1:.......
    case 2:.......
    case 3:.......
        //itd.

//EDIT program jest do przerobienia
zamist switch w switch'u
lepiej użyj petli "do while" , a w niej dopiero "switch"
P-175531
pekfos
» 2019-11-11 13:15:22
w jest niezainicjalizowane.
P-175532
Wenzon
Temat założony przez niniejszego użytkownika
» 2019-11-11 16:18:16
Nanoant i pekfos, dzięki wielkie za pomoc! Tak - chodziło o to "W" w pierwszym switchu. Zamieniłem "W" na "1" i działa! Dzięki wielkie jeszcze raz! :)

/ Nanoant, dzięki za rade co do zmiany pętli. Rozważe to też :)
P-175533
nanoant20
» 2019-11-11 17:47:26
Pozwoliłem sobie przebudować Twój program,
ale nie wiem czy miałeś taki zamysł.
Mógłby on wyglądać np. tak
Dalej rozbudować funkcjonalność czy usprawnić
będziesz musiał sobie sam.

C/C++
#include <iostream>
#include <string>       // std::string
#include <limits>   //std::numeric_limits

using namespace std;

void czysc_ekran()
{
    getchar();
    cout << string( 21, '\n' );
}

int fight( int & zycie_bossa )
{
    int obrazenia;
    if( zycie_bossa <= 0 )
    {
        czysc_ekran();
        //mozna wyzerowac
        zycie_bossa = 0;
        cout << "Boss is dead: " << zycie_bossa << endl;
    } else {
        cout << "Ile zadajesz obrazen: ";
        while( !( cin >> obrazenia ) )
        {
            cout << "Wprowadzony znak nie jest liczba! ";
            cin.clear(); // zerowanie obiektu cin
            std::cin.ignore( 1000, '\n' );
            cout << "Prosze podac liczbe : ";
        }
       
        zycie_bossa = zycie_bossa - obrazenia;
        cout << "Boss ma teraz " << zycie_bossa << "HP";
    }
    return zycie_bossa;
}

int main()
{
    char decyzja;
    int boss;
    int stan_aktualny_zycie_bosa_1 = 100, stan_aktualny_zycie_bosa_2 = 450,
    stan_aktualny_zycie_bosa_3 = 1000;
   
    do
    {
        cout << "Z ktorym boss'em chcesz walczyc?\n";
        cout << "1 - Szczurem jaskiniowym - " << stan_aktualny_zycie_bosa_1 << " HP\n";
        cout << "2 - Zywiolakiem skalnym - " << stan_aktualny_zycie_bosa_2 << " HP\n";
        cout << "3 - Krolem ogrow - " << stan_aktualny_zycie_bosa_3 << " HP\n";
        cout << "4 - Wyjscie z podziemi \n";
        cout << "C:\\>_ ";
        while( !( cin >> boss ) ||( boss < 1 ) ||( boss > 4 ) )
        {
            cout << "Wprowadzony znak nie jest liczba lub jest poza zakresem" << endl;
            cout << "Prosze podac liczbe (1 - 4): ";
            std::cin.clear();
            std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
            continue;
        }
       
        switch( boss )
        {
        case 1:
            cout << "Walczysz ze Szczurem jaskiniowym ktory ma " << stan_aktualny_zycie_bosa_1 << " HP\n";
            fight( stan_aktualny_zycie_bosa_1 );
            break;
           
        case 2:
            cout << "Walczysz ze Zywiolakiem skalnym ktory ma " << stan_aktualny_zycie_bosa_2 << " HP\n";
            fight( stan_aktualny_zycie_bosa_2 );
            break;
           
        case 3:
            cout << "Walczysz z Krolem ogrow ktory ma " << stan_aktualny_zycie_bosa_3 << " HP\n";
            fight( stan_aktualny_zycie_bosa_3 );
            break;
           
        case 4:
            cout << "Ok, wychodzisz ";
            exit( 0 );
            break;
            /*
                        default:
                            std:: cout<< "\nnieprawidlowa operacja";
                            break;
                        */
        }
       
        cout << "\n\n\tCzy chcesz dalej walczyc?\n\tWprowadz t lub T, aby kontynuowac : ";
        cin >> decyzja;
        cout << endl << endl;
    }
    while( decyzja == 't' || decyzja == 'T' );
   
    std::cout << "Koniec programu" << endl;
   
    cout << endl;
    cin.get();
    return 0;
}
P-175536
Wenzon
Temat założony przez niniejszego użytkownika
» 2019-11-12 17:17:32
Nanoant20 nieźle ten kod wygląda. Widze przerobiles go tak ze walczymy na raz z 3 przeciwnikami. Użyłeś jednak kilka komend które super wyglądają ale których jeszcze nie kumam i nie wiem jak używac. Jak je ogarne wróce do Twojego pomysłu ;)

A mógłbyć mi podpowiedzieć, czemu w tym kodzie metoda 1 i metoda 2 są wyświetlane jednocześnie mimo że jest we wszystkich komenda "break"?. Widze, że jesteś kumaty więc może wyłapiesz jakiś błąd szybko. Od razu powiem że to zadanie z książki i to musi być zrobione na switchach tylko :P

C/C++
#include <iostream>
using namespace std;

int main()
{
   
   
    int numer;
    int zarobki;
   
    cout << "Ile zarabiasz?";
    cout << "\nWcisnij [1] jesli 1-10, Wcisnij [2] jesli 11-20, Wcisnij [3] jesli powyzej 20";
   
   
   
    cin >> numer;
   
   
    switch( numer )
   
   
    {
    case 1:
       
        cout << "\nWybierz ile zarabiasz: Od 1 -5 wcisnj [5], od 6-10 wcisnij [6]";
        cin >> zarobki;
       
       
       
        switch( zarobki )
       
        {
        case 5:
           
            cout << "\nZarabiasz od 1-5 wiec trzeba uzyc metody 1 ";
            break;
           
        case 6:
           
            cout << "\nZarabiasz od 6-10 wiec trzeba uzyc metody 2 ";
            break;
        }
       
    case 2:
       
        cout << "\nZarabiasz 11-20 wiec trzeba uzyc metody 3";
        break;
       
    case 3:
       
        cout << "\nZarabiasz powyzej 20 wiec trzeba wybrac mtode 4";
        break;
    }
   
   
}

P-175544
nanoant20
» 2019-11-12 17:45:21
A mógłbyć mi podpowiedzieć, czemu w tym kodzie metoda 1 i metoda 2 są wyświetlane jednocześnie mimo że jest we wszystkich komenda "break"?
Tak w "case 1:" brakuje "break". powinien stać przed "case 2:"


P-175545
Wenzon
Temat założony przez niniejszego użytkownika
» 2019-11-14 17:22:39
Stary dzieki za pomoc. Jak ja mogłem tego nie zauważyć :)
P-175573
« 1 »
  Strona 1 z 1