[C++] Piszemy grę, część 3
W tym wpisie rozbudujemy program o kolejną pętlę do while, w której będzie właściwy kod gry, czyli losowanie liczb, zliczanie prób, liczenie czasu gry itd. Pętla będzie się powtarzała do momentu trafienia poprawnej liczby lub osiągnięcia limitu prób. Do kodu utworzonego w poprzedniej części dopiszmy następujący fragment:
do
{
/*
Zależnie od wybranego przez gracza poziomu trudności,
ustawiamy limit prób oraz zakres losowania liczby.
*/
switch(game_level)
{
// Poziom 1
case 1:
attempts_limit = 25; // limit - 25 prób
rand_number = rand() % 10 + 1; // losuj liczbę z zakresu 1-10
break;
// Poziom 2
case 2:
attempts_limit = 15; // limit - 15 prób
rand_number = rand() % 50 + 1; // losuj liczbę z zakresu 1-50
break;
// Poziom 3
case 3:
attempts_limit = 10; // limit - 10 prób
rand_number = rand() % 100 + 1; // losuj liczbę z zakresu 1-100
break;
}
// Z każdą próbą zwiększaj jej liczbę o 1
attempts++;
// Czekamy na liczbę od gracza
cout << "Twój strzał: ";
cin >> shot;
// Sprawdzamy czy liczba zostałą poprawnie przyjęta od gracza...
if(cin.good() == true)
{
/* jeśli tak, sprawdzamy czy liczba podana przez uzytkownika
jest zgodna z liczbą wylosowaną przez funkcję rand */
if(rand_number == shot)
{
/* Jeśli liczba gracza zgadza się z liczbą wylosowaną przez program
gracz wygrywa. */
switch(attempts)
{
// Komunikat dla gracza, jeśli trafił za pierwszym razem.
case 1:
cout << "* Gratulacje! Pierwszy strzał i odrazu trafny :) *\n";
break;
// Komunikat dla gracza, jeśli nie trafił za pierwszym razem.
default:
cout << "* Gratulacje! Wygrałeś/aś! *\n";
break;
}
}
// Komunikat dla gracza, jeśli nie trafił liczby.
else cout << "* Nie trafiłeś/aś *\n";
seconds = time(NULL) - uptime;
minutes = seconds / 60;
hours = seconds / 3600;
cout << "Prób: " << attempts << "\nCzas gry: ";
// Definujemy zmienną, do której będą zapisywane informacje o czasie gry.
stringstream string_play_time;
/* W poniższych warunkach wyświetlamy graczowi komunikat ile czasu gra
oraz przypisujemy informacje do zmiennej string_play_time */
if(seconds <= 59)
{
cout << seconds << " sek.\n---\n";
string_play_time << seconds << " sek.";
}
if(minutes > 0)
{
cout << minutes << " min.\n---\n";
string_play_time << minutes << " min.";
}
if(hours > 0)
{
cout << hours << " godz.\n---\n";
string_play_time << hours << " godz.";
}
/* Pobieramy treść jako string ze zmiennej string_play_time i
przypisujemy do zmiennej play_time */
play_time = string_play_time.str();
}
// Komunikat dla gracza, jeśli podał jakiś znak, ale nie liczbę całkowitą.
else cout << "Konieczne jest podanie liczby całkowitej.\n";
cin.clear(); // Czyścimy flagi błędów.
cin.ignore(1000, '\n'); // Ignorujemy dane wejściowe do momentu napotkania znaku nowej linii.
}
while(rand_number != shot && attempts < attempts_limit);
Jeśli robiłeś wszystko zgodnie z tym i wcześniejszymi wpisami, kod powinien się skompilować, a gra uruchomić i działać zgodnie z koncepcją opisaną w pierwszej części. W tym wpisie to na tyle. Ostatnia część będzie poświęcona zapisowi historii gry do pliku.
Komentarze
Prześlij komentarz
Dzięki za komentarz!