goditsa8,
Крестики я сделал давным - давно, текущая тема - оптимизация. А готовый код в теме где то лежит
Пользователь решил продолжить мысль 28 Мая 2015, 22:04:10:
goditsa8,
Вот, откопал:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <fstream>
#include "universal.h"
int k;
char f[]="Статистика.txt";
char a [3] [3] = {{' ',' ',' '},
{' ',' ',' '},
{' ',' ',' '}};
void print_receipt()
{
int receip[3][3] = {{ 1 , 2 , 3 },
{ 4 , 5 , 6 },
{ 7 , 8 , 9 }};
for (int i=0; i<3; i++)
{
cout << receip[i][0] << " | " << receip[i][1] << " | " << receip[i][2];
if (i < 2) cout << endl << "----------";
cout << endl;
}
}
void print_a()
{
cout<<"\033[H\033[J \t \tВАС ПРИВЕТСТВУЕТ ИГРА КРЕСТИКИ-НОЛИКИ\t \t"<<endl;
for (int i=0; i<3; i++)
{
cout<<a[i][0]<<" | "<<a[i][1]<<" | "<<a[i][2];
if (i<2) cout<<endl<<"----------";
cout<<endl;
}
//cout << endl << "Нажмите \"S\" для получения справки.";
}
bool who_win(int x, int y)
{
ofstream my_statistics(f, ios::app);
if (a[x][y]=='X'){cout<<"Поздравляю! Ты выиграл!"<<endl;
my_statistics<<"Выиграл игрок."<<endl; return true;}
if (a[x][y]=='O'){cout<<"Ты проиграл :("<<endl;
my_statistics<<"Выиграл Бот."<<endl; return true;}
return false;
}
int comp_a(char pole)
{
for (int m=0; m<3; m++)
{
if (a[m][0]==pole && a[m][1]==pole && a[m][2]==' '){
if (m==0) k=3;
if (m==1) k=6;
if (m==2) k=9; return 0;}
if (a[m][0]==pole && a[m][2]==pole && a[m][1]==' '){
if (m==0) k=2;
if (m==1) k=5;
if (m==2) k=8; return 0;}
if (a[m][2]==pole && a[m][1]==pole && a[m][0]==' '){
if (m==0) k=1;
if (m==1) k=4;
if (m==2) k=7; return 0;}
if (a[0][m]==pole && a[1][m]==pole && a[2][m]==' '){
if (m==0) k=7;
if (m==1) k=8;
if (m==2) k=9; return 0;}
if (a[0][m]==pole && a[2][m]==pole && a[1][m]==' '){
if (m==0) k=4;
if (m==1) k=5;
if (m==2) k=6; return 0;}
if (a[2][m]==pole && a[1][m]==pole && a[0][m]==' '){
if (m==0) k=1;
if (m==1) k=2;
if (m==2) k=3; return 0;}
}
if (a[0][0]==pole && a[1][1]==pole && a[2][2]==' '){k=9; return 0;}
if (a[0][0]==pole && a[2][2]==pole && a[1][1]==' '){k=5; return 0;}
if (a[2][2]==pole && a[1][1]==pole && a[0][0]==' '){k=1; return 0;}
if (a[0][2]==pole && a[1][1]==pole && a[2][0]==' '){k=7; return 0;}
if (a[0][2]==pole && a[2][0]==pole && a[1][1]==' '){k=5; return 0;}
if (a[1][1]==pole && a[2][0]==pole && a[0][2]==' '){k=3; return 0;}
return 0;
}
void igrok_1()
{
int l, eror;
F: cout<<endl<<"Твой ход: ";
do{
eror = 0;
l = getch();
if (l == 'S' || l == 's')
{
clear_scr();
print_receipt();
l = getch();
clear_scr();
print_a(); goto F;
}
l = l-48;
cout<<endl;
int y = (l-1) - 3*((l-1)/3);
int x = (l-1)/3;
if (l>9 || l<1)
{
cout << "Ошибка: нет такого поля. Попробуйте ещё раз: ";
eror = 1;
}
else
{
if (a[x][y]==' ') a[x][y]='X';
else
{
cout << "Ошибка: поле занято. Поробуйте ещё раз:";
eror = 1;
}
}
}
while (eror==1) ;
}
void comp()
{
int eror;
srand(time(0));
cout<<endl<<"Дай мне подумать.."<<flush;
time_s(0.5);
comp_a('X');
if (comp_a('X')==0) {goto B;}
comp_a('O');
if (comp_a('O')==0) {goto B;}
do{
eror = 0;
k = rand ()%(9)+1;
B:
int y = (k-1) - 3*((k-1)/3);
int x = (k-1)/3;
if (k>9 || k<1)
{
eror = 1;
}
else
{
if (a[x][y]==' ') a[x][y]='O';
else
{
eror = 1;
}
}
}
while (eror==1) ;
}
bool win()
{
for (int x=0; x<3; x++)
{
if (a[x][0]!=' ' && a[x][0]==a[x][1] && a[x][1]==a[x][2])
{
if(who_win(x, 0)==true) return true;
}
if (a[0][x]!=' ' && a[0][x]==a[1][x] && a[1][x]==a[2][x])
{
if(who_win(0, x)==true) return true;
}
}
if (a[0][0]!=' ' && a[0][0]==a[1][1] && a[1][1]==a[2][2])
{
if(who_win(0, 0)==true) return true;
}
if (a[0][2]!=' ' && a[0][2]==a[1][1] && a[1][1]==a[2][0])
{
if(who_win(0, 2)==true) return true;
}
return false;
}
int main()
{
nonblock(1);
ofstream my_statistics(f, ios::app);
print_a();
for (int f=0; f<4; f++)
{
igrok_1();
clear_scr();
print_a();
if (win()==true) return 0;
comp();
clear_scr();
print_a();
if (win()==true) return 0;
}
igrok_1();
clear_scr();
print_a();
if (win()==true) return 0;
cout<<"Ничья!"<<endl;
my_statistics<<"Ничья."<<endl;
return 0;
}