Найти тему
Это Нуб

ИИ в крестиках-ноликах

Недавно создал простенький ИИ в крестиках ноликах и решил выложить в общий доступ. Можете протестить.

#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;

}