P009 - Gra w OKO dla dwóch graczy
Program uruchomiono w środowisku Bloodshed Dev-C++ 4.9.9.2
// I Liceum Ogólnokształcące
// im. K. Brodzińskiego
// w Tarnowie
//--------------------------
// Koło informatyczne 2006/7
//--------------------------
// Program: P009
//--------------------------

#include <iostream>
#include <iomanip>

using namespace std;

// Funkcja rysuje kostkę do gry
//-----------------------------
void Kostka(int oczka)
{
  cout << " ----- \n";
  for(int i = 1; i <= 9; i++)
  {
    switch(i)
    {
      case 1:
      case 4:
      case 7: cout << "| ";         
    }        
    switch(i)
    {
      case 1:
      case 9: if(oczka > 1) cout << "O"; else cout << " ";
              break;
      case 2:
      case 8: cout << " "; break;
      case 3:
      case 7: if(oczka > 3) cout << "O"; else cout << " ";
              break;
      case 4:
      case 6: if(oczka == 6) cout << "O"; else cout << " ";
              break;
      case 5: if(oczka % 2) cout << "O"; else cout << " ";
              break;
    }
    switch(i)
    {
      case 3:
      case 6:
      case 9: cout << " |\n";
    }                
  }
  cout << " ----- \n";  
}

// Funkcja wyświetla punkty gracza
//--------------------------------
void Punkty(int n, int pg)
{
  cout << "GRACZ NR " << n << endl
       << "PUNKTY = " << pg << endl << endl;     
}

// Funkcja dokonuje ruchu
//-----------------------
void Ruch(int n, int &pg, bool &gg)
{
  char odp;
  int  los;
   
  cout << "\n\n--------------------------\n";
  Punkty(n,pg);
  cout << "Grasz dalej ? (T = TAK) : ";
  cin >> odp;
  cout << endl;
  if((odp == 'T') || (odp == 't'))
  {
    los = 1 + rand() % 6;
    Kostka(los);
    pg += los;
    Punkty(n,pg);
  }
  else gg = false;
}

// Funkcja ocenia punkty gracza
//---------------------------
bool Przegrana(int pg, bool &gg)
{
  if(pg > 21)
  {
    gg = false;
    return true;
  }
  return false;
}    

// Funkcja dokonuje oceny gry
//---------------------------
void Ewaluacja(int n, int pg, int pp)
{
  cout << "GRACZ NR " << n << ", PUNKTY = " << setw(2) << pg << " : ";
          
  if((pp > 21) || ((pg <= 21) && (pg > pp)))
    cout << "GRATULACJE !!! WYGRANA !!!";
  else if(pg == pp)
    cout << "REMIS";
  else cout << "PRZEGRANA !!!";
  cout << "\n\n";    
}

// Program główny gry
//-------------------
main()
{
  int pg1,pg2;
  bool gg1,gg2;
  char w;
  
  srand((unsigned)time(NULL));
  do
  {
    cout << "Gra w OKO dla dwoch graczy\n"
            "==========================\n\n";
    pg1 = pg2 = 0;
    gg1 = gg2 = true;        
    while(gg1 || gg2)
    {
       if(gg1)
       {
         Ruch(1,pg1,gg1);
         if(Przegrana(pg1,gg1)) break;
       }
       if(gg2)
       {
         Ruch(2,pg2,gg2);
         if(Przegrana(pg2,gg2)) break;
       }       
    }
    cout << "\n\n\nWYNIKI GRY\n"
            "==========\n\n";
    Ewaluacja(1,pg1,pg2);
    Ewaluacja(2,pg2,pg1);            
    cout << "\n\n--------------------------\n"
            "Jeszcze raz (T = TAK) ? : ";
    cin >> w;
    cout << "\n\n\n\n";
  } while((w == 'T') || (w == 't'));
}

 

Widok okienka konsoli w uruchomionym programie
Gra w OKO dla dwoch graczy
==========================



--------------------------
GRACZ NR 1
PUNKTY = 0

Grasz dalej ? (T = TAK) : t

 -----
| O   |
|  O  |
|   O |
 -----
GRACZ NR 1
PUNKTY = 3



--------------------------
GRACZ NR 2
PUNKTY = 0

Grasz dalej ? (T = TAK) : t

 -----
| O O |
|  O  |
| O O |
 -----
GRACZ NR 2
PUNKTY = 5



--------------------------
GRACZ NR 1
PUNKTY = 3

Grasz dalej ? (T = TAK) : n



--------------------------
GRACZ NR 2
PUNKTY = 5

Grasz dalej ? (T = TAK) : n




WYNIKI GRY
==========

GRACZ NR 1, PUNKTY =  3 : PRZEGRANA !!!

GRACZ NR 2, PUNKTY =  5 : GRATULACJE !!! WYGRANA !!!



--------------------------
Jeszcze raz (T = TAK) ? : n

       Wyjaśnienie

Ten przykład miał na celu wykorzystanie poznanych wiadomości do stworzenia prostej gry logicznej dla dwóch graczy. Zasady gry są następujące:

obrazek

Na podstawie tych zasad wyrysowaliśmy schemat blokowy gry, który symbolizuje poszczególne operacje rozgrywki. Na schemacie zaznaczyliśmy podstawowe operacje, które należy w grze wykonać. Następnie ustaliliśmy sposób implementacji każdej z tych operacji. W ten sposób powstał szablon programu, który w dalszej kolejności stopniowo wypełniliśmy instrukcjami.

Powyższy schemat blokowy można zastosować do wielu różnych gier losowych dla dwóch (lub po drobnej przeróbce dla większej liczby) graczy.


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2024 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe