Wywoływanie funkcji

0

Witam,

Napisałem prostą grę liczbową, która składa się z kilku funkcji. Poniżej załączam kod:

#include <cstdlib>
#include <iostream>
//#include <iomanip>

using namespace std;

void witaj()
{
     cout << "\tGra - zgadywanie cyfer" << endl;
}
//*********************************************************
void zegnaj()
{
     cout << "\tZegnam" << endl;
}
//*********************************************************
int losuj()
{
    int los;
    srand(time(NULL));
    los = (rand()%101);
    return los;
}
//**********************************************************
int gra(int los)
{
    
    int liczba;
    int licznik = 0;
    
      
    do
    {
        cout << "Podaj liczbe: \n";
        cin >> liczba;
       
        if (liczba < los) cout << "Za malo \n", licznik++;
        if (liczba > los) cout << "Za duzo \n", licznik++;
        if (liczba == los) cout << "Trafiles! \n", licznik++;
        }while(liczba != los);
        system("cls");
        return licznik;
}
//*************************************************************
void ocena(int licznik)
{
     if (licznik < 3) cout << "Twoja ocena to: Swietnie! \n";
     if ((licznik >= 3) && (licznik <= 7)) cout << "Twoja ocena to: Dobrze, ale stac Cie na wiecej ;) \n";
     if (licznik > 7) cout << "Twoja ocena to: Kiepsko...  \n";
}
//*************************************************************
void graj()
{
    char odp;
     int x;
     int i;
    
     do{
         x = losuj();
         i = gra(x);
         ocena(i);
         
         
         cout <<"Powtorzyc t/n \n";
         cin >> odp;
         system("cls");
         }while(odp!='n');
         
}

int main()
{
       witaj();   
       graj();
       zegnaj();
      
     
    system("PAUSE");
    return EXIT_SUCCESS;
}

Moje pytanie jest następujące... Funkcje wywoływanie w funkcji "graj" (w pętli) nie wyglądają zbyt efektywnie, więc mam pytanie jak zgrabnie przebudować te kilka linijek kodu?

0

a co Ci w tym nie gra? :D

0

Chodzi mi tylko o to czy mogę o zapisać w krótszy, bądź bardziej elegancki sposób :].

0
ocena(gra(losuj());

zamiast:

  x = losuj();
         i = gra(x);
         ocena(i);

0

Kilka drobnych usprawnień:

#include <cstdlib>
#include <iostream>
 
using namespace std;

int gra(int los)
{
    int liczba;
    int licznik = 0;
 
    do
    {
        cout << "Podaj liczbe: \n";
        cin >> liczba;
 
        if (liczba < los) cout << "Za malo \n", licznik++;
        if (liczba > los) cout << "Za duzo \n", licznik++;
        if (liczba == los) cout << "Trafiles! \n", licznik++;
    } while(liczba != los);

    system("cls"); // system...
    return licznik;
}

void ocena(int licznik)
{
     if (licznik < 3) cout << "Twoja ocena to: Swietnie! \n";
     else if ((licznik >= 3) && (licznik <= 7)) cout << "Twoja ocena to: Dobrze, ale stac Cie na wiecej ;) \n"; // wypadało dopisać else...
     else if (licznik > 7) cout << "Twoja ocena to: Kiepsko...  \n";
}

void graj()
{
     char odp;
  
     do
     {
         r = ; // inline losuj, bo po wyrzuceniu błędnego srand stał się zdegenerowany do returna.
         ocena(gra(rand() % 101)); // zwinięcie dwóch funkcji, chociaż nie wiem czy to akurat tutaj dużo daje.
 
         cout <<"Powtorzyc t/n \n";
         cin >> odp;
         system("cls"); // system to zło, nie używałbym go... Ale niech będzie...
     } while (odp != 'n'); // pewien błąd, wpisanie jakiejkolwiek innej odpowiedzi niż 'n', na przykład 'k' spowoduje powtórzenie. Nie poprawiałem
}
 
int main()
{
       srand(time(NULL)); // to robimy TYLKO RAZ

       // wklejenie funkcji witaj i zegnaj bezpośrednio do kodu - z punktu widzenia projektowego nie polepszają wcale architektury.
       cout << "\tGra - zgadywanie cyfr" << endl; // CYFR, na litość...
       graj();
       cout << "\tZegnam" << endl;
 
       cin.sync(); // zamiast system(pause) coś lepszego
       cin.get();
       return EXIT_SUCCESS;
}
0

Bardzo dziękuję, o to mi chodziło.

Pozdrawiam :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1