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 :/ #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; cout << "Bos ma teraz " << zycie_bosa << "HP"; } cout << "Czy chcesz dalej walczyc? Tak - 1, Nie - 2"; cin >> p; if( p == 1 ) { goto poczatek; } else if( p == 2 ) { exit( 0 ); } }
|
|
nanoant20 |
» 2019-11-11 08:48:08 switch( w ) co reprezentuje ta zmienna "w"? Warunek wielokrotnego wyboru switchmoże chodzi Ci o coś takiego? 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:.......
//EDIT program jest do przerobienia zamist switch w switch'u lepiej użyj petli "do while" , a w niej dopiero "switch" |
|
pekfos |
» 2019-11-11 13:15:22 w jest niezainicjalizowane. |
|
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ż :) |
|
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. #include <iostream> #include <string> #include <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(); 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(); 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; } 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; }
|
|
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 #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; } }
|
|
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:" |
|
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ć :) |
|
« 1 » |