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

Problem z cofaniem do menu [obiektowo]

Ostatnio zmodyfikowano 2016-11-21 19:36
Autor Wiadomość
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

C/C++
#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

C/C++
#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();
}
P-153985
michal11
» 2016-11-21 14:18:20
Kilka przemyśleń.

1.
C/C++
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:
C/C++
system( "cls" );
int maxPrzedzial =( 10 +( wybierz_poziom - 1 );
liczba = rand() % maxPrzedzial + 1; // ladniej by bylo gdybys trzymal poziom trudnosci jako wartosci od 0 do n.

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
P-153986
sobol3k
Temat założony przez niniejszego użytkownika
» 2016-11-21 19:36:40
Okej już sobie poradziłem, dzięku za pomoc ;)
P-153993
« 1 »
  Strona 1 z 1