Недавно создал простенький ИИ в крестиках ноликах и решил выложить в общий доступ. Можете протестить.
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;
void print(string maf)
{
cout << endl
<< maf[0] << '|' << maf[1] << '|' << maf[2] << endl
<< "_____" << endl
<< maf[3] << '|' << maf[4] << '|' << maf[5] << endl
<< "_____" << endl
<< maf[6] << '|' << maf[7] << '|' << maf[8] << endl;
}
int shag(string neip);
int sec(string mah)
{
int sc = 0;
if (mah[0] == mah[1] && mah[1] == mah[2] && mah[0] != ' ')
{
cout << "Win: " << mah[0];
sc = 1;
}
if (mah[0] == mah[4] && mah[4] == mah[8] && mah[0] != ' ')
{
cout << "Win: " << mah[0];
sc = 1;
}
if (mah[0] == mah[3] && mah[3] == mah[6] && mah[0] != ' ')
{
cout << "Win: " << mah[0];
sc = 1;
}
if (mah[3] == mah[4] && mah[4] == mah[5] && mah[3] != ' ')
{
cout << "Win: " << mah[3];
sc = 1;
}
if (mah[1] == mah[4] && mah[7] == mah[4] && mah[1] != ' ')
{
cout << "Win: " << mah[1];
sc = 1;
}
if (mah[2] == mah[5] && mah[5] == mah[8] && mah[2] != ' ')
{
cout << "Win: " << mah[2];
sc = 1;
}
if (mah[6] == mah[7] && mah[7] == mah[8] && mah[6] != ' ')
{
cout << "Win: " << mah[6];
sc = 1;
}
if (mah[2] == mah[4] && mah[4] == mah[6] && mah[2] != ' ')
{
cout << "Win: " << mah[2];
sc = 1;
}
return sc;
}
int main()
{
ios_base::sync_with_stdio(false);
int t = 0;
while (t == 0)
{
int a, b, c = 0, d;
string neir;
string mas = " ";
print(mas);
cin >> a;
mas[a - 1] = 'O';
print(mas);
if (a == 5)
{
neir = "013101313";
mas[0] = 'X';
print(mas);
while (c == 0 && t < 4)
{
cin >> a;
a--;
if (neir[a] == '0')
{
cout << "404: NOT FOUND" << endl;
continue;
}
t++;
neir[a] = '0';
mas[a] = 'O';
c = sec(mas);
print(mas);
if (c == 1)
break;
if (neir[8 - a] != '0')
neir[8 - a] = char(int(neir[8 - a]) + 4);
else
{
if (a % 6 == 0 && neir[a + 1] != '0')
neir[a + 1] = char(int(neir[a + 1]) + 1);
if ((a - 2) % 6 == 0 && neir[a - 1] != '0')
neir[a - 1] = char(int(neir[a - 1]) + 1);
if ((a + 3) < 0 && neir[a + 3] != '0')
neir[a + 3] = char(int(neir[a + 3]) + 1);
if ((a - 3) > 8 && neir[a - 3] != '0')
neir[a - 3] = char(int(neir[a - 3]) + 1);
}
a = shag(neir);
mas[a] = 'X';
print(mas);
c = sec(mas);
neir[a] = '0';
}
}
else if (a % 2 == 1)
{
neir = "111101111";
a--;
neir[a] = '0';
mas[4] = 'X';
print(mas);
neir[4] = '0';
while (c == 0 && t < 4)
{
cin >> a;
a--;
if (neir[a] == '0')
{
cout << "error complination. please try again" << endl;
continue;
}
t++;
neir[a] = '0';
mas[a] = 'O';
print(mas);
c = sec(mas);
if (c == 1)
break;
if (a != 0 && a != 1 && a != 2 && neir[a - 3] != '0')
neir[a - 3] = char(int(neir[a - 3]) + 1);
if (a != 0 && a != 3 && a != 6 && neir[a - 1] != '0')
neir[a - 1] = char(int(neir[a - 1]) + 1);
if (a != 2 && a != 5 && a != 8 && neir[a + 1] != '0')
neir[a + 1] = char(int(neir[a + 1]) + 1);
if (a != 6 && a != 7 && a != 8 && neir[a + 3] != '0')
neir[a + 3] = char(int(neir[a + 3]) + 1);
a = shag(neir);
mas[a] = 'X';
print(mas);
c = sec(mas);
if (c == 1)
break;
neir[a] = '0';
if (neir[8 - a] != '0')
neir[8 - a] = char(int(neir[8 - a]) + 4);
}
}
else if (a % 2 == 0)
{
string neir = "111111111";
a--;
d = a;
neir[a] = '0';
neir[8 - a] = '3';
mas[a] = 'O';
print(mas);
b = shag(neir);
neir[b] = '0';
mas[b] = 'X';
print(mas);
while (c == 0 && t < 4)
{
cin >> b;
b--;
if (neir[b] == '0')
{
cout << "minecraft close with code:666. please cout again" << endl;
continue;
}
t++;
neir[b] = '0';
mas[b] = 'O';
print(mas);
c = sec(mas);
if (c == 1)
continue;
if (d + 1 == b || d - 1 == b || d + 3 == b || d - 3 == b)
{
if (b == 4 && neir[2 * b - d] != '0')
{
neir[2 * b - d] = char(int(neir[2 * b - d]) + 3);
}
else if (d == 4 && neir[2 * d - b] != '0')
{
neir[2 * d - b] = char(int(neir[2 * d - b]) + 3);
}
else
{
if (d % 2 == 0)
{
d += b;
b = d - b;
d = d - b;
}
if (neir[2 * d - b] != '0')
{
neir[2 * d - b] = char(int(neir[2 * d - b]) + 3);
}
}
}
if ((d + 2 == b || d - 2 == b || d + 6 == b || d - 6 == b) && d != 4 && b != 4)
{
if (neir[(d + b) / 2] != '0')
{
neir[(d + b) / 2] = char(int(neir[(d + b) / 2]) + 2);
}
}
if (1 && b % 2 == 0 && b != 4 && neir[8 - b] != '0')
{
neir[8 - b] = char(int(neir[8 - b]) + 1);
}
d = b;
b = shag(neir);
neir[b] = '0';
mas[b] = 'X';
print(mas);
c = sec(mas);
}
}
else
{
cout << "DEFEAT";
}
if (c == 0)
cout << "Nichya" << endl;
cout << endl
<< "wanna play again? Send: 0" << endl;
cin >> t;
}
return 0;
}
int shag(string neip)
{
int max = 0;
int pos = 0;
for (int i = 0; i < 9; ++i)
{
if (max < int(neip[i]))
{
max = int(neip[i]);
pos = i;
}
}
return pos;
}