// AI电脑 后手 下棋 (三子棋) (O号棋)
void AI(char qipan[X][Y], int b)
{
printf("到AI棋圣下棋了:");
int i = 0, j = 0;
//找自己的两颗棋
for (i = 0; i <= 2; ++i)
{
if ((qipan[i][0] == qipan[i][1]) && (qipan[i][1] == 'O') && (qipan[i][2] == ' '))
{
qipan[i][2] = 'O';
printf("(%d,3)\n", i + 1);
return 0;
}
if ((qipan[i][1] == qipan[i][2]) && (qipan[i][1] == 'O') && (qipan[i][0] == ' '))
{
qipan[i][0] = 'O';
printf("(%d,1)\n", i + 1);
return 0;
}
if ((qipan[i][0] == qipan[i][2]) && (qipan[i][0] == 'O') && (qipan[i][1] == ' '))
{
qipan[i][1] = 'O';
printf("(%d,2)\n", i + 1);
return 0;
}
}
for (j = 0; j <= 2; ++j)
{
if ((qipan[0][j] == qipan[1][j]) && (qipan[0][j] == 'O') && (qipan[2][j] == ' '))
{
qipan[2][j] = 'O';
printf("(3,%d)\n", j + 1);
return 0;
}
if ((qipan[1][j] == qipan[2][j]) && (qipan[1][j] == 'O') && (qipan[0][j] == ' '))
{
qipan[0][j] = 'O';
printf("(1,%d)\n", j + 1);
return 0;
}
if ((qipan[0][j] == qipan[2][j]) && (qipan[0][j] == 'O') && (qipan[1][j] == ' '))
{
qipan[1][j] = 'O';
printf("(2,%d)\n", j + 1);
return 0;
}
}
if ((qipan[0][0] == qipan[1][1]) && (qipan[1][1] == 'O') && (qipan[2][2] == ' '))
{
qipan[2][2] = 'O';
printf("(3,3)\n");
return 0;
}
if ((qipan[0][0] == qipan[2][2]) && (qipan[0][0] == 'O') && (qipan[1][1] == ' '))
{
qipan[1][1] = 'O';
printf("(2, 2)\n");
return 0;
}
if ((qipan[1][1] == qipan[2][2]) && (qipan[1][1] == 'O') && (qipan[0][0] == ' '))
{
qipan[0][0] = 'O';
printf("(1, 1)\n");
return 0;
}
if ((qipan[0][2] == qipan[1][1]) && (qipan[1][1] == 'O') && (qipan[2][0] == ' '))
{
qipan[2][0] = 'O';
printf("(3, 1)\n");
return 0;
}
if ((qipan[0][2] == qipan[2][0]) && (qipan[0][2] == 'O') && (qipan[1][1] == ' '))
{
qipan[1][1] = 'O';
printf("(2, 2)\n");
return 0;
}
if ((qipan[2][0] == qipan[1][1]) && (qipan[1][1] == 'O') && (qipan[0][2] == ' '))
{
qipan[0][2] = 'O';
printf("(1, 3)\n");
return 0;
}
//堵对手的两个棋
for (i = 0; i <= 2; ++i)
{
if ((qipan[i][0] == qipan[i][1]) && (qipan[i][1] == 'X') && (qipan[i][2] == ' '))
{
qipan[i][2] = 'O';
printf("(%d,3)\n", i + 1);
return 0;
}
if ((qipan[i][1] == qipan[i][2]) && (qipan[i][1] == 'X') && (qipan[i][0] == ' '))
{
qipan[i][0] = 'O';
printf("(%d,1)\n", i + 1);
return 0;
}
if ((qipan[i][0] == qipan[i][2]) && (qipan[i][0] == 'X') && (qipan[i][1] == ' '))
{
qipan[i][1] = 'O';
printf("(%d,2)\n", i + 1);
return 0;
}
}
for (j = 0; j <= 2; ++j)
{
if ((qipan[0][j] == qipan[1][j]) && (qipan[0][j] == 'X') && (qipan[2][j] == ' '))
{
qipan[2][j] = 'O';
printf("(3,%d)\n", j + 1);
return 0;
}
if ((qipan[1][j] == qipan[2][j]) && (qipan[1][j] == 'X') && (qipan[0][j] == ' '))
{
qipan[0][j] = 'O';
printf("(1,%d)\n", j + 1);
return 0;
}
if ((qipan[0][j] == qipan[2][j]) && (qipan[0][j] == 'X') && (qipan[1][j] == ' '))
{
qipan[1][j] = 'O';
printf("(2,%d)\n", j + 1);
return 0;
}
}
if ((qipan[0][0] == qipan[1][1]) && (qipan[1][1] == 'X') && (qipan[2][2] == ' '))
{
qipan[2][2] = 'O';
printf("(3,3)\n");
return 0;
}
if ((qipan[0][0] == qipan[2][2]) && (qipan[0][0] == 'X') && (qipan[1][1] == ' '))
{
qipan[1][1] = 'O';
printf("(2, 2)\n");
return 0;
}
if ((qipan[1][1] == qipan[2][2]) && (qipan[1][1] == 'X') && (qipan[0][0] == ' '))
{
qipan[0][0] = 'O';
printf("(1, 1)\n");
return 0;
}
if ((qipan[0][2] == qipan[1][1]) && (qipan[1][1] == 'X') && (qipan[2][0] == ' '))
{
qipan[2][0] = 'O';
printf("(3, 1)\n");
return 0;
}
if ((qipan[0][2] == qipan[2][0]) && (qipan[0][2] == 'X') && (qipan[1][1] == ' '))
{
qipan[1][1] = 'O';
printf("(2, 2)\n");
return 0;
}
if ((qipan[2][0] == qipan[1][1]) && (qipan[1][1] == 'X') && (qipan[0][2] == ' '))
{
qipan[0][2] = 'O';
printf("(1, 3)\n");
return 0;
}
//上述情况都没有的话 抢占中间位置
if (qipan[1][1] == ' ')
{
qipan[1][1] = 'O';
printf("(2, 2)\n");
return 0;
}
if (b == 1) //AI第一手无中间位置 就抢占四个角
{
switch ((rand() % 4 + 1))
{
case 1: qipan[0][0] = 'O'; printf("(1,1)"); return 0;
case 2: qipan[2][2] = 'O'; printf("(3,3)"); return 0;
case 3: qipan[2][0] = 'O'; printf("(3,1)"); return 0;
case 4: qipan[0][2] = 'O'; printf("(1,3)"); return 0;
}
}
if (b == 3) //AI第二手.防止玩家偷鸡,抢四个角的位置
{
if (qipan[0][0] == ' ')
{
qipan[0][0] = 'O';return 0;
}
else
{
if (qipan[2][2] == ' ')
{
qipan[2][3] = 'O'; return 0;
}
else
{
if (qipan[0][2] == ' ')
{
qipan[0][2] = 'O'; return 0;
}
else
{
if (qipan[2][0] == ' ')
{
qipan[2][0] = 'O'; return 0;
}
}
}
}
}
if (b > 1)// 除了上面的情况 随机下
{
int xx = 0, yy = 0;
do
{
xx = rand() % 3;
yy = rand() % 3;
if (qipan[xx][yy] == ' ')
{
qipan[xx][yy] = 'O';
printf("(%d,%d)", xx + 1, yy + 1);
break;
}
} while (1);
}
}
三子棋 AI人机版 多种模式供选择 智能人机代码如下(后手版)
于 2024-08-06 17:25:37 首次发布