Sunteți pe pagina 1din 19

Ștefan Vlad Jocul X si O

Puiu Roberț

Liceul Teoretic de Informatică ”Grigore Moisil” Iași

PROGRAMARE ORIENTATĂ OBIECT


Jocul X și O

Elevi: Ștefan Vlad, Puiu Robert-Ionuț | 11 F

Profesor: Maftei Ionel

2020-2021
Ștefan Vlad Jocul X si O
Puiu Roberț

Implementarea Jocului X și O folosind


Programarea Orientată pe Obiect

Clasa conține:
 Variabila GameOver memorează false dacă jocul este în desfasurare și true
dacă nu
 Variabila Tie care verifică dacă jocul s-a terminat egal
 Matricea a de 3x3 ce reprezintă tabelul de la X si 0
 Constructorul TicTacToe are rolul de a reseta jocul
 Metoda Draw care afisază pe ecran jocul în sine
 Metoda gameover verifică dacă ai castigat sau ai pierdut
 Metoda ComputerTurn alege o casută aleatorie în care calculatorul
marchează O
 Metoda Menu reprezintă meniul jocului
 Metoda Input marchează X în casuta aleasă de jucator

class TicTacToe
{
public:
bool GameOver
int Tie=0;
int a[4][4];
TicTacToe();
void Draw();
void gameover();
void ComputerTurn();
void Menu();
void Input();
};
Ștefan Vlad Jocul X si O
Puiu Roberț

Biblioteci Utilizate

#include <iostream>
#include <conio.h> /// pentru a folosi _kbhit, _getch
#include <windows.h> /// pentru a sterge consola
#include <time.h> /// pentru a folosi time

Descrierea metodelor aplicației

TicTacToe::TicTacToe()
{
for(int i = 1; i <= 3; i++)
for(int j = 1; j <= 3; j++)
a[i][j] = 0;
Tie = 0;
GameOver = false;
}

Constructorul TicTacToe pune în toate elementele matricei valoarea 0


Ștefan Vlad Jocul X si O
Puiu Roberț

Metoda Draw

void TicTacToe::Draw() /// functie care afisaza pe ecran jocul in


sine
{
system("cls"); /// sterge tot din consola
cout<<"Apasa o cifra pentru a pune X"<<endl<<endl;
int i,j;
for(i=1; i<=11; i++)
{
if(i==4 || i==8)
cout<<"-----+-----+-----"<<endl;
else
{
if(i==1 || i==3)
{
for(j=1; j<3; j++)
{
if(a[1][j]==0)
cout<<" |";
else
{
if(a[1][j]==1)
cout<<" x x |";
else if(a[1][j]==2)
cout<<" ooo |";
}
}
j=3;
if(a[1][j]==0)
cout<<" "<<endl;
else
{
if(a[1][j]==1)
cout<<" x x "<<endl;
else
cout<<" ooo "<<endl;
}
}
Ștefan Vlad Jocul X si O
Puiu Roberț

if(i==2)
{
for(j=1; j<3; j++)
{
if(a[1][j]==0)
cout<<" "<<j<<" |";
else
{
if(a[1][j]==1)
cout<<" x |";
else if(a[1][j]==2)
cout<<" o o |";
}
}
j=3;
if(a[1][j]==0)
cout<<" "<<j<<" "<<endl;
else
{
if(a[1][j]==1)
cout<<" x "<<endl;
else
cout<<" o o "<<endl;
}
}
if(i==5 || i==7)
{
for(j=1; j<3; j++)
{
if(a[2][j]==0)
cout<<" |";
else
{
if(a[2][j]==1)
cout<<" x x |";
else if(a[2][j]==2)
cout<<" ooo |";
}
}
j=3;
if(a[2][j]==0)
Ștefan Vlad Jocul X si O
Puiu Roberț

cout<<" "<<endl;
else
{
if(a[2][j]==1)
cout<<" x x "<<endl;
else
cout<<" ooo "<<endl;
}
}
if(i==6)
{
for(j=1; j<3; j++)
{
if(a[2][j]==0)
cout<<" "<<j+3<<" |";
else
{
if(a[2][j]==1)
cout<<" x |";
else if(a[2][j]==2)
cout<<" o o |";
}
}
j=3;
if(a[2][j]==0)
cout<<" "<<j+3<<" "<<endl;
else
{
if(a[2][j]==1)
cout<<" x "<<endl;
else
cout<<" o o "<<endl;
}
}
if(i==9 || i==11)
{
for(j=1; j<3; j++)
{
if(a[3][j]==0)
cout<<" |";
else
Ștefan Vlad Jocul X si O
Puiu Roberț

{
if(a[3][j]==1)
cout<<" x x |";
else if(a[3][j]==2)
cout<<" ooo |";
}
}
j=3;
if(a[3][j]==0)
cout<<" "<<endl;
else
{
if(a[3][j]==1)
cout<<" x x "<<endl;
else
cout<<" ooo "<<endl;
}
}
if(i==10)
{
for(j=1; j<3; j++)
{
if(a[3][j]==0)
cout<<" "<<j+6<<" |";
else
{
if(a[3][j]==1)
cout<<" x |";
else if(a[3][j]==2)
cout<<" o o |";
}
}
j=3;
if(a[3][j]==0)
cout<<" "<<j+6<<" "<<endl;
else
{
if(a[3][j]==1)
cout<<" x "<<endl;
else
cout<<" o o "<<endl;}}}}}
Ștefan Vlad Jocul X si O
Puiu Roberț

Metoda gameover
void TicTacToe::gameover() /// afla daca a castigat cineva
{
if(a[1][1]==a[1][2] && a[1][1]==a[1][3] && a[1][1]!=0)
{
if(a[1][1]==1)
{
cout<<endl<<"Ai castigat!"<<endl;
GameOver=true;
}
if(a[1][1]==2)
{
cout<<endl<<"Ai pierdut!"<<endl;
GameOver=true;
}
}
else
{
if(a[2][1]==a[2][2] && a[2][1]==a[2][3] && a[2][1]!=0)
{
if(a[2][1]==1)
{
cout<<endl<<"Ai castigat!"<<endl;
GameOver=true;
}
if(a[2][1]==2)
{
cout<<endl<<"Ai pierdut!"<<endl;
GameOver=true;
}
}
else
{
if(a[3][1]==a[3][2] && a[3][1]==a[3][3] && a[3][1]!
=0)
{
if(a[3][1]==1)
{
cout<<endl<<"Ai castigat!"<<endl;
Ștefan Vlad Jocul X si O
Puiu Roberț

GameOver=true;
}
if(a[3][1]==2)
{
cout<<endl<<"Ai pierdut!"<<endl;
GameOver=true;
}
}
else
{
if(a[1][1]==a[2][1] && a[1][1]==a[3][1] && a[1]
[1]!=0)
{
if(a[1][1]==1)
{
cout<<endl<<"Ai castigat!"<<endl;
GameOver=true;
}
if(a[1][1]==2)
{
cout<<endl<<"Ai pierdut!"<<endl;
GameOver=true;
}
}
else
{
if(a[1][2]==a[2][2] && a[1][2]==a[3][2] &&
a[1][2]!=0)
{
if(a[1][2]==1)
{
cout<<endl<<"Ai castigat!"<<endl;
GameOver=true;
}
if(a[1][2]==2)
{
cout<<endl<<"Ai pierdut!"<<endl;
GameOver=true;
}
}
else
Ștefan Vlad Jocul X si O
Puiu Roberț

{
if(a[1][3]==a[2][3] && a[1][3]==a[3][3]
&& a[1][3]!=0)
{
if(a[1][3]==1)
{
cout<<endl<<"Ai castigat!"<<endl;
GameOver=true;
}
if(a[1][3]==2)
{
cout<<endl<<"Ai pierdut!"<<endl;
GameOver=true;
}
}
else
{
if(a[1][1]==a[2][2] && a[1][1]==a[3]
[3] && a[1][1]!=0)
{
if(a[1][1]==1)
{
cout<<endl<<"Ai
castigat!"<<endl;
GameOver=true;
}
if(a[1][1]==2)
{
cout<<endl<<"Ai
pierdut!"<<endl;
GameOver=true;
}
}
else
{
if(a[1][3]==a[2][2] && a[1]
[3]==a[3][1] && a[1][3]!=0)
{
if(a[1][3]==1)
{
Ștefan Vlad Jocul X si O
Puiu Roberț

cout<<endl<<"Ai
castigat!"<<endl;
GameOver=true;
}
if(a[1][3]==2)
{
cout<<endl<<"Ai
pierdut!"<<endl;
GameOver=true;
}
}
else if(Tie == 9)
{

cout<<endl<<"Egalitate!"<<endl;
GameOver = true;
}
}
}
}
}
}
}
}
}

Metoda ComputerTurn
void TicTacToe::ComputerTurn() /// alege aleatoriu un bloc in
care sa puna 0
{
int Empty=0;
while(!Empty)
{
srand (time(NULL)); /// alege un numar random intre 1 si
9
int j=rand()%9+1;
switch(j)
{
case 1 :
Ștefan Vlad Jocul X si O
Puiu Roberț

{
if(a[1][1]==0)
{
a[1][1]=2;
Empty++;
}
break;
}
case 2 :
{
if(a[1][2]==0)
{
a[1][2]=2;
Empty++;
}
break;
}
case 3 :
{
if(a[1][3]==0)
{
a[1][3]=2;
Empty++;
}
break;
}
case 4 :
{
if(a[2][1]==0)
{
a[2][1]=2;
Empty++;
}
break;
}
case 5 :
{
if(a[2][2]==0)
{
a[2][2]=2;
Empty++;
Ștefan Vlad Jocul X si O
Puiu Roberț

}
break;
}
case 6 :
{
if(a[2][3]==0)
{
a[2][3]=2;
Empty++;
}
break;
}
case 7 :
{
if(a[3][1]==0)
{
a[3][1]=2;
Empty++;
}
break;
}
case 8 :
{
if(a[3][2]==0)
{
a[3][2]=2;
Empty++;
}
break;
}
case 9 :
{
if(a[3][3]==0)
{
a[3][3]=2;
Empty++;
}
break;
}
}
}}
Ștefan Vlad Jocul X si O
Puiu Roberț

Metoda Menu
void TicTacToe::Menu() /// meniul jocului
{
cout<<"JOC X si 0"<<endl<<endl;
cout<<"1.Start"<<endl;
cout<<"2.Iesire"<<endl;
cout<<endl<<"Apasa 1 sau 2"<<endl;
int apasatbuton=0;
while(apasatbuton==0 && GameOver==false)
{
if(_kbhit())
{
switch(_getch())
{
case '1' :
{
system("cls");
apasatbuton++;
break;
}
case '2' :
{
exit(0);}}}}}

Metoda Input
void TicTacToe::Input() /// playerul alege unde sa puna X
{
int apasatbuton=0;
while(!apasatbuton)
{
if(_kbhit())
{
switch(_getch())
{
case '1' :
if(a[1][1]==0)
{
Ștefan Vlad Jocul X si O
Puiu Roberț

a[1][1]=1;
apasatbuton++;
}
break;
case '2' :
if(a[1][2]==0)
{
a[1][2]=1;
apasatbuton++;
}
break;
case '3' :
if(a[1][3]==0)
{
a[1][3]=1;
apasatbuton++;
}
break;
case '4' :
if(a[2][1]==0)
{
a[2][1]=1;
apasatbuton++;
}
break;
case '5' :
if(a[2][2]==0)
{
a[2][2]=1;
apasatbuton++;
}
break;
case '6' :
if(a[2][3]==0)
{
a[2][3]=1;
apasatbuton++;
}
break;
case '7' :
if(a[3][1]==0)
Ștefan Vlad Jocul X si O
Puiu Roberț

{
a[3][1]=1;
apasatbuton++;
}
break;
case '8' :
if(a[3][2]==0)
{
a[3][2]=1;
apasatbuton++;
}
break;
case '9' :
if(a[3][3]==0)
{
a[3][3]=1;
apasatbuton++;
}
break;
}
}
}
Draw();
}

Funcția principală
int main() /// functia principala
{
bool sfarsitProgram = false;
while(!sfarsitProgram)
{
TicTacToe joc;
joc.Menu();
while(!joc.GameOver)
{
joc.Draw();
joc.Input();
joc.Tie++;
joc.gameover();
Ștefan Vlad Jocul X si O
Puiu Roberț

if(joc.GameOver==false)
{
Sleep(1000);
joc.ComputerTurn();
}
joc.Draw();
joc.gameover();
joc.Tie++;
}
cout<<endl<<"Vrei sa mai joci?"<<endl;
cout<<"1.Da"<<endl;
cout<<"2.Nu"<<endl;
int apasatbuton = 0;
while(apasatbuton == 0)
{
if(_kbhit())
{
switch(_getch())
{
case '1' :
{
system("cls");
apasatbuton++;
break;
}
case '2' :
{
sfarsitProgram=true;
apasatbuton++;
break;
}
}
}
}
}
return 0;
}
Ștefan Vlad Jocul X si O
Puiu Roberț

Instrucțiuni

Prin apasarea tastei 1 jocul va începe


Prin tasta 2 programul se va închide

Prin tastele de la 1 la 9 se poate marca X în casuța dorită


Ștefan Vlad Jocul X si O
Puiu Roberț

Pentru toate cele 3 cazuri (“Ai pierdut!”,”Egalitate!”,”Ai castigat!”)


există posibilitatea de a începe un nou joc prin tasta 1 sau de a închide
programul prin tasta 2

S-ar putea să vă placă și