[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

Popular

[C++] Jak obliczyć pole i obwód trapezu?

[HTML] Jak wyśrodkować tekst?

[PHP] Jak pobrać adres strony?