#include<stdio.h>
#include<math.h>
#include<windows.h>
const int mSize=15;
int board[mSize+1][mSize+1],value[mSize+1][mSize+1],optX=1,optY=1;
int move_x,move_y,maxn;
void gotoxy(short x,short y){
COORD coord={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
int GetLineValue(int x,int y){
if(board[x][y]!=0)return -114514;
int cnt1=0,cnt2=0,pt=board[x-1][y],pm=board[x+1][y];
for(int i=x-1;i>=1&&board[i][y]!=0;i--){
if(board[i][y]==pt)cnt1++;
else break;
}
if(cnt1>=3)cnt1=15;
for(int i=x+1;i<=mSize&&board[i][y]!=0;i--){
if(board[i][y]==pm)cnt2++;
else break;
}
if(cnt2>=3)cnt2=15;
return (int)pow(cnt1,3)*pt+pow(cnt1,3)*pm;
}
int GetColValue(int x,int y){
if(board[x][y]!=0)return -114514;
int cnt1=0,cnt2=0,pt=board[x][y-1],pm=board[x][y+1];
for(int i=y-1;i>=1&&board[x][i]!=0;i--){
if(board[x][i]==pt)cnt1++;
else break;
}
if(cnt1>=3)cnt1=15;
for(int i=y+1;i<=mSize&&board[x][i]!=0;i--){
if(board[x][i]==pm)cnt2++;
else break;
}
if(cnt2>=3)cnt2=15;
return (int)pow(cnt1,3)*pt+pow(cnt1,3)*pm;
}
int GetFalValue(int x,int y){
if(board[x][y]!=0)return -114514;
int cnt=0,pt=board[x+1][y+1],pm=board[x-1][y-1],pq=board[x+1][y-1],ps=board[x-1][y+1];
for(int i=1;board[x+i][y+i]==pt&&x+i<=mSize&&y+i<=mSize&&pt;i++)cnt++;
for(int i=1;board[x-i][y-i]==pm&&x-i>0&&y-i>0&±i++)cnt++;
for(int i=1;board[x+i][y-i]==pm&&x+i<=mSize&&y-i>0&&pq;i++)cnt++;
for(int i=1;board[x-i][y+i]==pm&&x-i>0&&y+i<=mSize&&ps;i++)cnt++;
return (cnt*cnt*cnt)/4;
}
void CalculateVal(){
maxn=-1;
memset(value,0,sizeof(value));
for(int i=1;i<=mSize;i++){
for(int j=1;j<=mSize;j++){
value[i][j]=GetLineValue(i,j)+GetColValue(i,j)+GetFalValue(i,j);
value[7][7]=90000;
if(value[i][j]>maxn&&!board[i][j]){
maxn=value[i][j];
move_x=i;move_y=j;
}
}
}
}
void AiMove(){
CalculateVal();
board[move_x][move_y]=1;
}
void PlayerMove(){
puts("Version 1.02 Developed by JoeBiden2020 at Luogu");
puts("Player,input the position that you want to place.");
printf("%d\n",value[1][7]);
scanf("%d%d",&move_x,&move_y);
if(!board[move_x][move_y])board[move_x][move_y]=2;
}
void PrintBoard(){
gotoxy(0,0);
puts(" 1 2 3 4 5 6 7 8 9 10 11 12");
puts("-------------------------------------");
for(int i=1;i<=12;i++){
for(int j=1;j<=12;j++){
printf("| ");
if(board[i][j]==0)putchar(' ');
if(board[i][j]==1)putchar('X');
if(board[i][j]==2)putchar('O');
}
printf("| %d\n",i);
printf("-------------------------------------\n");
}
}
void CheckWin(){
for(int i=1;i<=mSize;i++){
for(int j=1;j<=mSize;j++){
int s=board[i][j];
bool flag=0;
if(s==0)continue;
if(j+4<=mSize)if(board[i][j+1]==s&&board[i][j+2]==s&&board[i][j+3]==s&&board[i][j+4]==s)flag=1;
if(j-4>0)if(board[i][j-1]==s&&board[i][j-2]==s&&board[i][j-3]==s&&board[i][j-4]==s)flag=1;
if(i+4<=mSize)if(board[i+1][j]==s&&board[i+2][j]==s&&board[i+3][j]==s&&board[i+4][j]==s)flag=1;
if(i-4>0)if(board[i-1][j]==s&&board[i-2][j]==s&&board[i-3][j]==s&&board[i-4][j]==s)flag=1;
if(j+4<=mSize&&i+4<=mSize)
if(board[i+1][j+1]==s&&board[i+2][j+2]==s&&board[i+3][j+3]==s&&board[i+4][j+4]==s)flag=1;
if(j-4>0&&i-4>0)
if(board[i-1][j-1]==s&&board[i-2][j-2]==s&&board[i-3][j-3]==s&&board[i-4][j-4]==s)flag=1;
if(j+4<=mSize&&i-4>0)
if(board[i-1][j+1]==s&&board[i-2][j+2]==s&&board[i-3][j+3]==s&&board[i-4][j+4]==s)flag=1;
if(j-4>0&&i+4<=mSize)
if(board[i+1][j-1]==s&&board[i+2][j-2]==s&&board[i+3][j-3]==s&&board[i+4][j-4]==s)flag=1;
if(flag){
PrintBoard();
puts(s==1?"\n\nAI WINS!":"\n\nPLAYER WINS!");
system("pause");
exit(0);
}
}
}
}
int main(){
while(1){
AiMove();
CheckWin();
PrintBoard();
PlayerMove();
CheckWin();
PrintBoard();
}
}
AI“非常聪明”。