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

[Rozdział 16] Mini-Gra jako zadanie domowe

Ostatnio zmodyfikowano 2016-07-06 16:40
Autor Wiadomość
Norbix
Temat założony przez niniejszego użytkownika
[Rozdział 16] Mini-Gra jako zadanie domowe
» 2016-07-05 16:19:39
Witam, jako zadanie domowe w rozdziale 16 trzeba napisać prostą grę.
To było zadaniem:
1. Program losuje liczbę z przedziału od 1 do 1000.
2. Użytkownik zgaduje liczbę, która została wylosowana.
3. Jeżeli podana liczba jest za duża (za mała) gra wypisuje stosowny komunikat i powraca do kroku 2.
4. Jeżeli gracz trafi liczbę wylosowaną to progam kończy działanie, wypisując na ekran wylosowaną liczbę oraz liczbę 'strzałów', które oddał gracz.
Gra ma być zabezpieczona przed możliwością wprowadzenia błędnych wartości liczbowych.

Napisałem otóż taką gierkę, lecz zmieniłem zasięg z 1 do 1000 do 1 do 5 aby umożliwić trafienie dobrej liczby.

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    for(;; )
    {
        srand( time( NULL ) );
        int liczba =( rand() % 5 ) + 1;
        int strzal;
        int ile;
        cout << "Podaj liczbe:" << endl;
        cin >> strzal;
       
        if( strzal > liczba || strzal < liczba )
        {
            cout << "Niestety nie trafiles. Sprobuj jeszcze raz." << endl;
            cout << "Wylosowana liczba to: " << liczba << endl;
            liczba =( rand() % 5 ) + 1;
            ++ile; //dodaj jeden do strzalow
        }
        else if( strzal == liczba ) //jesli strzal i liczba beda takie same
        {
            cout << "Wylosowana liczba to: " << liczba << endl;
            cout << "Brawo! Odgadnales liczbe!" << endl;
            cout << "Liczba strzalow: " << ile << endl;
            liczba =( rand() % 5 ) + 1;
            ++ile; //jezeli sie dobrze trafi, to i tak jest strzal
            exit( 0 );
        }
    }
   
}

Problem tkwi w tym, że jak trafie dobrą liczbę na przykład za 5 razem, to liczba strzałów będzie wynosić i tak 4. (Tak jakby ++ile; w instrukcji else if nie miałoby żadnego działania). Do tego jeżeli trafie liczbę za pierwszym razem, zamiast zmienna ile zmienić wartość na 1, program wypisuję "Liczba strzalow: 4310126"
Czy jest ktoś w stanie mi pomóc?
P-149697
gramto.pl
» 2016-07-05 17:02:28
Ustaw wartość początkową zmiennej ile.
P-149700
Norbix
Temat założony przez niniejszego użytkownika
» 2016-07-05 17:20:06
Ustawiłem int ile = 0;
bo na początku jest tych strzałów 0, lecz po trafieniu liczby, zmienna nie ulega zmianie, nadal 0.
P-149702
gramto.pl
» 2016-07-05 17:23:32
wykonujesz preinkrementację po wypisaniu
#edit
zmienną ile zadeklaruj i zdefiniuj jej wartość początkową przed rozpoczęciem pętli.
P-149703
carlosmay
» 2016-07-05 17:50:03
for(;; )
Ładniej wygląda nieskończona pętla while.

while( true ) { }
P-149704
Norbix
Temat założony przez niniejszego użytkownika
» 2016-07-06 16:18:02
Zmodyfikowałem program następująco:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    int ile = 0;
    while( true )
    {
        srand( time( NULL ) );
        int liczba =( rand() % 3 ) + 1;
        int strzal;
        cout << "Podaj liczbe:" << endl;
        cin >> strzal;
       
        if( strzal > liczba || strzal < liczba )
        {
            cout << "Niestety nie trafiles. Sprobuj jeszcze raz." << endl;
            cout << "Wylosowana liczba to: " << liczba << endl;
            liczba =( rand() % 3 ) + 1;
            ++ile; //dodaj jeden do strzalow
        }
        else if( strzal == liczba ) //jesli strzal i liczba beda takie same
        {
            cout << "Wylosowana liczba to: " << liczba << endl;
            cout << "Brawo! Odgadnales liczbe!" << endl;
            cout << "Liczba strzalow: " << ile << endl;
            liczba =( rand() % 3 ) + 1;
            ++ile; //jezeli sie dobrze trafi, to i tak jest strzal
            exit( 0 );
        }
    }
   
}

Jeżeli za pierwszym razem uda mi się trafić na prawidłową liczbę, to pisze Liczba Strzalow: 0, a wkoncu dodalem do instrukcji else if ++ile. Jak to naprawic?
P-149732
karambaHZP
» 2016-07-06 16:22:20
C/C++
cout << "Liczba strzalow: " << ile << endl;
liczba =( rand() % 3 ) + 1;
++ile; //jezeli sie dobrze trafi, to i tak jest strzal
Pomyśl, co wykonuje się wcześniej ( wypisanie czy preinkrementacja)?

Programy wykonują kod od góry do dołu, a nie wyrywkowo (zgadując o co chodzi autorowi).
P-149733
Norbix
Temat założony przez niniejszego użytkownika
» 2016-07-06 16:40:21
Dziękuję bardzo za pomoc, do zamknięcia.
P-149734
« 1 »
  Strona 1 z 1