P011 - Gra w Kółko i Krzyżyk 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: P011
//--------------------------

#include <iostream>

using namespace std;

// Funkcja rysuje planszę gry w kółko i krzyżyk
//---------------------------------------------
void plansza(char t[])
{
  for(int i = 1; i <= 9; i++)
  {
    cout << " " << t[i] << " ";
    if(i % 3)
      cout << "|";
    else if(i != 9)
      cout << "\n---+---+---\n";
    else cout << endl;        
  }    
}

// Funkcja zwraca true, jeśli nastąpiła
// wygrana danego zawodnika
//-------------------------------------
bool wygrana(char t[], char g)
{
  bool test;
  int i;
  
  test = false;
  for(i = 1; i <= 7; i += 3)
    test |= ((t[i] == g) && (t[i+1] == g) && (t[i+2] == g));
  for(i = 1; i <= 3; i++)
    test |= ((t[i] == g) && (t[i+3] == g) && (t[i+6] == g));
  test |= ((t[1] == g) && (t[5] == g) && (t[9] == g));
  test |= ((t[3] == g) && (t[5] == g) && (t[7] == g));
  if(test)
  {
    plansza(t);
    cout << "\nGRACZ " << g << " WYGRYWA!!!\n\n";
    return true;
  }
  return false;
}

// Funkcja zwraca true, jeśli na planszy nie ma już
// żadnego wolnego pola na ruch.
//-------------------------------------------------
bool remis(char t[])
{
  for(int i = 1; i <= 9; i++)
    if(t[i] == ' ') return false;
  plansza(t);
  cout << "\nREMIS !!!\n\n";
  return true;     
}

// Funkcja umożliwia ruch gracza
// Po ruchu następuje zamiana gracza
//------------------------------------
void ruch(char t[], char &gracz)
{
   int r;
   
   plansza(t);
   cout << "\nGRACZ " << gracz << " : Twoj ruch : ";
   cin >> r;
   cout << "-----------------------\n\n";
   if((r >= 1) && (r <= 9) && (t[r] == ' ')) t[r] = gracz;
   gracz = (gracz == 'O') ? 'X' : 'O';
}

main()
{
  char p[10],g,w;
  
  do
  {
    cout << "Gra w Kolko i Krzyzyk dla dwoch graczy\n"
            "======================================\n\n";
    for(int i = 1; i <= 9; i++) p[i] = ' ';
    g = 'O';
    while(!wygrana(p,'X') && !wygrana(p,'O') && !remis(p)) ruch(p,g);
    cout << "Jeszcze raz ? (T = TAK) : ";
    cin >> w;
    cout << "\n\n\n";
  } while((w == 'T') || (w == 't'));
}

 

Widok okienka konsoli w uruchomionym programie
Gra w Kolko i Krzyzyk dla dwoch graczy
======================================

   |   |
---+---+---
   |   |
---+---+---
   |   |

GRACZ O : Twoj ruch : 5
-----------------------

   |   |
---+---+---
   | O |
---+---+---
   |   |

GRACZ X : Twoj ruch : 1
-----------------------

 X |   |
---+---+---
   | O |
---+---+---
   |   |

GRACZ O : Twoj ruch :

       Wyjaśnienie

Ten program stanowi dalsze ćwiczenie poznanych elementów programowania w języku C++. Tutaj ćwiczymy przekazywanie parametrów do funkcji poprzez wartość i poprzez referencję - zwróć uwagę, iż tablice są standardowo przekazywane przez referencję. Dodatkowo uczymy się pracować z typem logicznym.

Otrzymany program posłuży nam jako punkt startowy do implementacji algorytmu MiniMax.



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



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

©2017 mgr Jerzy Wałaszek

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