You are on page 1of 8

// main.

cpp
// written by Adambyaev.A

#include<iostream>
#include<conio.h>
#include<ctime>

using namespace std;

int field[3][3];

void displayOnScreen(){
system("cls");
for (int i=0;i<3;i++){
for(int j=0;j<3;j++){
if (field[i][j] == 0) {
cout << "0";
}
else if (field[i][j] == 1) {
cout << "x";
}
else if (field[i][j] == 2) {
cout << "| |";
}
cout<<" ";
}
cout<<endl<<endl;
}
}

void playerMove(int m){

cout << m+1 << "-iy"<<endl;;
int i=0, j=0;

cin>>i>>j;
if (field[i-1][j-1]==2) {
field[i-1][j-1] = m;
}
else {
return playerMove(m);
}
}

bool checkForTwo(int i_start, int j_start, int i_add, int j_add) {
int m=0;
for(int i=i_start, j=j_start; i<3 && i>=0 && j<3 && j>=0; i+=i_add, j+=j_add){
if (field[i][j]==1){
m++;
}
}
if (m == 2) {
for(int i=i_start, j=j_start; i<3 && i>=0 && j<3 && j>=0; i+=i_add,
j+=j_add) {
if (field[i][j]==2) {
field[i][j]=1;
return true;
}
}
}

return false;

}

bool searchTwoEnemies(int i_start, int j_start, int i_add, int j_add) {
int m=0;
for(int i=i_start, j=j_start; i<3 && i>=0 && j<3 && j>=0; i+=i_add, j+=j_add){
if (field[i][j]==0){
m++;
}
}
if (m == 2) {
for(int i=i_start, j=j_start; i<3 && i>=0 && j<3 && j>=0; i+=i_add,
j+=j_add) {
if (field[i][j]==2) {
field[i][j]=1;
return true;
}
}
}

return false;

}


bool blockEnemy(int x, int y) {
int m=0, s=0;

for (int i=x, j=y; i<3 && i>=0 && j<3 && j>=0; j++){
if (field[i][j]==0) {
m++;
}
if (field[i][j]==1){
s++;
}
}

for (int i=x, j=y; i<3 && i>=0 && j<3 && j>=0; j--) {
if (field[i][j]==0) {
m++;
}
if (field[i][j]==1) {
s++;
}
}
if ((m==0) && (s==1)) {
return false;
}


m=0; s=0;
for (int i=x, j=y; i<3 && i>=0 && j<3 && j>=0; i++) {
if (field[i][j]==0) {
m++;
}
if (field[i][j]==1) {
s++;
}
}


for (int i=x, j=y; i<3 && i>=0 && j<3 && j>=0; i--) {
if (field[i][j]==0) {
m++;
}
if (field[i][j]==1) {
s++;
}
}
if ((m==0) && (s==1)) {
return false;
}


if (x+y == 2) {
m=0; s=0;
for (int i=x, j=y; i<3 && i>=0 && j<3 && j>=0; i++, j--) {
if (field[i][j]==0) {
m++;
}
if (field[i][j]==1) {
s++;
}
}


for (int i=x, j=y; i<3 && i>=0 && j<3 && j>=0; i--, j++) {
if (field[i][j]==0) {
m++;
}
if (field[i][j]==1) {
s++;
}
}
if ((m==0) && (s==1)) {
return false;
}

}




if (x+y == 0 || x+y ==4) {
m=0; s=0;
for (int i=x, j=y; i<3 && i>=0 && j<3 && j>=0; i++, j++) {
if (field[i][j]==0) {
m++;
}
if (field[i][j]==1) {
s++;
}
}


for (int i=x, j=y; i<3 && i>=0 && j<3 && j>=0; i--, j--) {
if (field[i][j]==0) {
m++;
}
if (field[i][j]==1) {
s++;
}
}
if ((m==0) && (s==1)) {
return false;
}

}


return true;

}

void computerMove(){
int r;
int i, j;
if (field[1][1]==2) {
field[1][1]=1;
return;
}



bool v1 = true;
if (checkTwo(0, 0, 1, 1) == false) {
if (checkTwo(0, 2, 1, -1) == false) {
for (int i=0; i < 3 && v1==true; i++) {
if (checkTwo(0, i, 1, 0) == true) {
v1 = false;
}
}
for (int i = 0; i < 3 && v1==true; i++) {
if (checkTwo(i, 0, 0, 1) == true) {
v1 = false;
}
}
}
else
v1 = false;
}
else
v1 = false;



bool v2= true;

if (searchTwoEnemies(0, 0, 1, 1) == false) {
if (searchTwoEnemies (0, 2, 1, -1) == false) {
for (int i=0; i < 3 && v2==true; i++) {
if (searchTwoEnemies (0, i, 1, 0) == true) {
v2 = false;
}
}
for (int i = 0; i < 3 && v2==true; i++) {
if (searchTwoEnemies (i, 0, 0, 1) == true) {
v2 = false;
}
}
}
else
v2 = false;
}
else
v2 = false;




int k=0,m=0, n=0;
for (int i=0; i < 3; i++) {
for (int j=0; j<3; j++){
if (field[i][j]==2) {
k++;
m=i;
n=j;
}
}
}
if (k==1) {
cout << endl << "!!!!!!!!!!!" << endl;
field[m][n] = 1;
return;

}


if (v1==true && v2 == true) {
r = rand()%9;
i = r/3;
j = r-3*i;
if (field[i][j] == 2 && blockEnemy(i, j) == false) {
field[i][j] = 1;
}

else {
return computerMove();
}
}
}

bool Check(int g) {
int k=0;
if ((field[0][0]==g && field[1][1]==g && field[2][2]==g) || (field[0][2]==g &&
field[1][1]==g && field[2][0]==g)) return true;
for(int i=0; i<3; i++ ) {
k=0;
for(int j=0; j<3; j++){
if (field[i][j]==g ) k++;
}
if (k==3) {
return true;
}
}


for(int j=0; j<3; j++ ) {
k=0;
for(int i=0; i<3; i++){
if (field[i][j]==g ) k++;
}
if (k==3) {
return true;
}
}

return false;
}



int main(){

srand(time(0));
for (int i=0;i<3;i++){
for(int j=0;j<3;j++){
field[i][j]=2;
}
}

displayOnScreen();


cout<<"choose oponent"<<endl;
cout<<"1. play with your friend"<<endl;
cout<<"2. play with the computer"<<endl;

int option;
int k=0;
cin>>option;

switch(option) {
case 1:

for(int i=0; i==i;i++) {

playerMove(0);
displaOnScreen();
if (Check(0) == true) {
cout << "Win 1-player";
break;
}


k=0;
for(int i=0; i<3; i++){
for (int j=0; j < 3; j++) {
if (field[i][j]==2) {
k++;
}
}
}

if (Check(0)==false && Check(1) == false && k==0) {
cout<<"nobody won";
break;
}



PlayerMove(1);
displaOnScreen();
if (Check(1)==true){
cout <<"Win 2-player";
break;
}
}

break;
case 2:

for(int i=0; i==i; i++){
coputerMove();
displayOnScreen();
if (Check(1) == true) {
cout << "Win computer";
break;
}



k=0;
for(int i=0; i<3; i++){
for (int j=0; j < 3; j++) {
if (field[i][j]==2) {
k++;
}
}
}

if (Check(0)==false && Check(1) == false && k==0) {
cout<<"nobody won";
break;
}






playerMove(0);
displayOnScreen();
if (Check(0) == true) {
cout << "Win player";
break;
}
}
}


getch();
}

You might also like