Problem z cofaniem do menu [obiektowo]
Ostatnio zmodyfikowano 2016-11-21 19:36
sobol3k Temat założony przez niniejszego użytkownika |
Problem z cofaniem do menu [obiektowo] » 2016-11-21 13:31:08 Mam problem z cofaniem do własnego menu za radą pewnych osób z forum zacząłem sie uczyć obiektówki ponieważ umieszczając wszystko w jednym kodzie nie ogarne tego później. Zrobiłem sobie menu w osobnej funkcji i gre też w osobnej. Lecz gdy zgadne liczbe program rzeczywiście cofa do menu lecz oczekuje na znak od gracza i sie wyłącza nwm o co biega. class.h #include <iostream>
class Gra { public: unsigned short int wybierz_poziom; unsigned short int twoj_strzal; int liczba; int proba = 0; int zycie[ 3 ] = { 5, 6, 7 }; void pokaz_menu(); void glowna_gra(); };
function.cpp #include <iostream> #include <windows.h> #include <time.h> #include <cstdlib> #include "class.h"
using namespace std;
void Gra::pokaz_menu() { cout << "------------------ === ZGADNIJ LICZBE === ------------------"; cout << endl << endl; cout << "1. Latwy (1-10) \n"; cout << "2. Sredni (1-30) \n"; cout << "3. Trudny (6-50) \n\n"; while( wybierz_poziom != 1 && wybierz_poziom != 2 && wybierz_poziom != 3 ) { cout << "Twoj wybor: "; cin >> wybierz_poziom; if( wybierz_poziom != 1 && wybierz_poziom != 2 && wybierz_poziom != 3 ) cout << "Taki poziom gry nie istnieje ponow probe \n"; } }
void Gra::glowna_gra() { HANDLE hOut; hOut = GetStdHandle( STD_OUTPUT_HANDLE ); srand( time( NULL ) ); if( wybierz_poziom == 1 ) { system( "cls" ); liczba = rand() % 10 + 1; cout << "Wylosowalem liczbe od 1 do 10, zgadnij jaka to liczba! Pamietaj ze masz tylko 5 prob! \n\n"; while( liczba != twoj_strzal ) { zycie[ 0 ] --; proba++; cout << "Twoj strzal: "; cin >> twoj_strzal; if( twoj_strzal > liczba ) { cout << "Twoja liczba jest zbyt duza! Twoje zycie " << zycie[ 0 ] << " Twoja proba: " << proba << endl << endl; if( zycie[ 0 ] == 0 ) { SetConsoleTextAttribute( hOut, FOREGROUND_RED ); cout << "Przegrales z powodu utraty zycia!"; SetConsoleTextAttribute( hOut, 7 ); break; } } else if( twoj_strzal < liczba ) { cout << "Twoja liczba jest zbyt mala! Twoje zycie " << zycie[ 0 ] << " Twoja proba: " << proba << endl << endl; if( zycie[ 0 ] == 0 ) { SetConsoleTextAttribute( hOut, FOREGROUND_RED ); cout << "Przegrales z powodu utraty zycia!"; SetConsoleTextAttribute( hOut, 7 ); break; } } else { SetConsoleTextAttribute( hOut, FOREGROUND_GREEN ); cout << "Gratulacje udalo Ci zgadnac liczbe w " << proba << " probie" << endl; SetConsoleTextAttribute( hOut, 7 ); break; } } system( "cls" ); Gra::pokaz_menu(); } if( wybierz_poziom == 2 ) { system( "cls" ); liczba = rand() % 30 + 1; cout << "Wylosowalem liczbe od 1 do 30, zgadnij jaka to liczba! Pamietaj ze masz tylko 6 prob! \n\n"; while( liczba != twoj_strzal ) { zycie[ 1 ] --; proba++; cout << "Twoj strzal: "; cin >> twoj_strzal; if( twoj_strzal > liczba ) { cout << "Twoja liczba jest zbyt duza! Twoje zycie " << zycie[ 1 ] << " Twoja proba: " << proba << endl << endl; if( zycie[ 1 ] == 0 ) { SetConsoleTextAttribute( hOut, FOREGROUND_RED ); cout << "Przegrales z powodu utraty zycia!"; SetConsoleTextAttribute( hOut, 7 ); break; } } else if( twoj_strzal < liczba ) { cout << "Twoja liczba jest zbyt mala! Twoje zycie " << zycie[ 1 ] << " Twoja proba: " << proba << endl << endl; if( zycie[ 1 ] == 0 ) { SetConsoleTextAttribute( hOut, FOREGROUND_RED ); cout << "Przegrales z powodu utraty zycia!"; SetConsoleTextAttribute( hOut, 7 ); break; } } else { SetConsoleTextAttribute( hOut, FOREGROUND_GREEN ); cout << "Gratulacje udalo Ci zgadnac liczbe w " << proba << " probie" << endl; SetConsoleTextAttribute( hOut, 7 ); } } system( "cls" ); Gra::pokaz_menu(); } if( wybierz_poziom == 3 ) { system( "cls" ); liczba = rand() % 50 + 1; cout << "Wylosowalem liczbe od 1 do 50, zgadnij jaka to liczba! Pamietaj ze masz tylko 7 prob \n\n"; while( liczba != twoj_strzal ) { zycie[ 2 ] --; proba++; cout << "Twoj strzal: "; cin >> twoj_strzal; if( twoj_strzal > liczba ) { cout << "Twoja liczba jest zbyt duza! Twoje zycie " << zycie[ 2 ] << " Twoja proba: " << proba << endl << endl; if( zycie[ 2 ] == 0 ) { SetConsoleTextAttribute( hOut, FOREGROUND_RED ); cout << "Przegrales z powodu utraty zycia!"; SetConsoleTextAttribute( hOut, 7 ); break; } } else if( twoj_strzal < liczba ) { cout << "Twoja liczba jest zbyt mala! Twoje zycie " << zycie[ 2 ] << " Twoja proba: " << proba << endl << endl; if( zycie[ 2 ] == 0 ) { SetConsoleTextAttribute( hOut, FOREGROUND_RED ); cout << "Przegrales z powodu utraty zycia!"; SetConsoleTextAttribute( hOut, 7 ); break; } } else { SetConsoleTextAttribute( hOut, FOREGROUND_GREEN ); cout << "Gratulacje udalo Ci zgadnac liczbe w " << proba << " probie" << endl; SetConsoleTextAttribute( hOut, 7 ); } } } system( "cls" ); Gra::pokaz_menu(); }
|
|
michal11 |
» 2016-11-21 14:18:20 Kilka przemyśleń. 1. class Gra { public: int proba = 0; int zycie[ 3 ] = { 5, 6, 7 };
takie rzeczy to powinieneś w konstruktorze inicjalizować, najlepiej w liście inicjalizacyjnej. 2. brakuje maina żeby dokładnie określić co się dzieje w twoim programie. 3. 2 razy wywołujesz funkcję Gra::pokaz_menu(); ( swoją drogą to Gra:: jest nie potrzebne ) po np. odgadnięciu liczby, najpierw zaraz po pętli while i później na koniec całej funkcji. 4. Z tego co widzę to twoje poziomy trudności różnią się tylko max. przedziałem losowania twojej liczby i ile masz żyć, jeżeli tak to można znacząco uprościć twój kod: system( "cls" ); int maxPrzedzial =( 10 +( wybierz_poziom - 1 ); liczba = rand() % maxPrzedzial + 1;
cout << "Wylosowalem liczbe od 1 do " << maxPrzedzial << ", zgadnij jaka to liczba! Pamietaj ze masz tylko " << zycie[ wybierz_poziom - 1 ] << " prob! \n\n";
while( liczba != twoj_strzal ) { zycie[ wybierz_poziom - 1 ] --; proba++; cout << "Twoj strzal: "; cin >> twoj_strzal; if( twoj_strzal > liczba ) { cout << "Twoja liczba jest zbyt duza! Twoje zycie " << zycie[ wybierz_poziom - 1 ] << " Twoja proba: " << proba << endl << endl; if( zycie[ wybierz_poziom - 1 ] == 0 ) { SetConsoleTextAttribute( hOut, FOREGROUND_RED ); cout << "Przegrales z powodu utraty zycia!"; SetConsoleTextAttribute( hOut, 7 ); break; } } else if( twoj_strzal < liczba ) { cout << "Twoja liczba jest zbyt mala! Twoje zycie " << zycie[ wybierz_poziom - 1 ] << " Twoja proba: " << proba << endl << endl; if( zycie[ wybierz_poziom - 1 ] == 0 ) { SetConsoleTextAttribute( hOut, FOREGROUND_RED ); cout << "Przegrales z powodu utraty zycia!"; SetConsoleTextAttribute( hOut, 7 ); break; } } else { SetConsoleTextAttribute( hOut, FOREGROUND_GREEN ); cout << "Gratulacje udalo Ci zgadnac liczbe w " << proba << " probie" << endl; SetConsoleTextAttribute( hOut, 7 ); break; } }
system( "cls" ); Gra::pokaz_menu();
5. srand wywołuj tylko raz na początku maina. 6. przed wyborem poziomu w funkcji pokaz_menu dla pewności czyść sobie bufor |
|
sobol3k Temat założony przez niniejszego użytkownika |
» 2016-11-21 19:36:40 Okej już sobie poradziłem, dzięku za pomoc ;) |
|
« 1 » |