[Rozdział 16] Mini-Gra jako zadanie domowe
Ostatnio zmodyfikowano 2016-07-06 16:40
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. #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; } else if( strzal == liczba ) { cout << "Wylosowana liczba to: " << liczba << endl; cout << "Brawo! Odgadnales liczbe!" << endl; cout << "Liczba strzalow: " << ile << endl; liczba =( rand() % 5 ) + 1; ++ile; 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? |
|
gramto.pl |
» 2016-07-05 17:02:28 Ustaw wartość początkową zmiennej ile. |
|
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. |
|
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. |
|
carlosmay |
» 2016-07-05 17:50:03 Ładniej wygląda nieskończona pętla while. while( true ) { } |
|
Norbix Temat założony przez niniejszego użytkownika |
» 2016-07-06 16:18:02 Zmodyfikowałem program następująco: #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; } else if( strzal == liczba ) { cout << "Wylosowana liczba to: " << liczba << endl; cout << "Brawo! Odgadnales liczbe!" << endl; cout << "Liczba strzalow: " << ile << endl; liczba =( rand() % 3 ) + 1; ++ile; 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? |
|
karambaHZP |
» 2016-07-06 16:22:20 cout << "Liczba strzalow: " << ile << endl; liczba =( rand() % 3 ) + 1; ++ile;
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). |
|
Norbix Temat założony przez niniejszego użytkownika |
» 2016-07-06 16:40:21 Dziękuję bardzo za pomoc, do zamknięcia. |
|
« 1 » |