#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
int chess[169]={0};/*棋盘*/
struct chess_t/*作为辅助,即是作为建意*/
{
char attack;/*攻防用的,0表示守,1表示攻*/
int j;/*作为优先级用*/
}chess_a[169];
void prinf(void)/*输出部分*/
{
int i,k,m=0;
system("cls");
for(i=1;i<=169;i++)
{
if(i%13==1)
{
if(chess[i-1]>0)
printf("%3d",i);
else
printf("%3c",-chess[i-1]);/*负数表示人与机己下的子*/
}
else
{
if(chess[i-1]>0)
printf("|%3d",i);
else
printf("|%3c",-chess[i-1]);/*负数表示人与机己下的子*/
}
if(!(i%13))
{
for(k=1;k<=13;k++,m++)
{
if(k==1)
{printf("%2c",' ');
if(chess[m]>0)
putchar(' ');
else
printf("%c",-chess[m]);
}
else
{
putchar('|');
if(chess[m]>0)
putchar(' ');
else
printf("%c",-chess[m]);
}
}
putchar('\n');
}
}
}
char AI_dz(int b,long *chess_m,
const int O,const int X
)/*忧化AI*/
{
int i,root=-1; /*root是权限*/
if(!(O==0||X==0))
{ return 0;}
switch(b)
{
case 1:root=0;break;
case 2:root=1;break;
case 3:root=2;break;
case 4:root=3;break;
}
for(i=0;b>0&&b<5&&i<5;i++)
{
if(chess_m[i]>=0)
{
switch(i)
{
case 0:
if(chess_m[i+1]<0) /*表示为-1 O ? ? ?*/
{
if(chess_a[chess_m[i]].j>root||
chess_a[chess_m[i]].j==-1
)/*相当于权限小*/
{
if(X==5-b&&O==0)/*攻*/
{
chess_a[chess_m[i]].attack=1;
chess_a[chess_m[i]].j=root;/*赋一个权限*/
}
else
if(O==5-b&&X==0)/*防*/
{
chess_a[chess_m[i]].attack=-1;
chess_a[chess_m[i]].j=root;/*赋一个权限*/
}
}
}
break;
case 1:
case 2:
case 3:
if(!(chess_m[i+1]>=0&&chess_m[i-1]>=0))
{
if(chess_a[chess_m[i]].j>root||
chess_a[chess_m[i]].j==-1
)/*相当于权限小*/
{
if(X==5-b&&O==0)/*攻*/
{
chess_a[chess_m[i]].attack=1;
chess_a[chess_m[i]].j=root;/*赋一个权限*/
}
else
if(O==5-b&&X==0)/*防*/
{
chess_a[chess_m[i]].attack=-1;
chess_a[chess_m[i]].j=root;/*赋一个权限*/
}
}
}
break;
case 4:
if(chess_m[i-1]<0) /*表示为? ? ? O -1*/
{
if(chess_a[chess_m[i]].j>root||
chess_a[chess_m[i]].j==-1
)/*相当于权限小*/
{
if(X==5-b&&O==0)/*攻*/
{
chess_a[chess_m[i]].attack=1;
chess_a[chess_m[i]].j=root;/*赋一个权限*/
}
else
if(O==5-b&&X==0)/*防*/
{
chess_a[chess_m[i]].attack=-1;
chess_a[chess_m[i]].j=root;/*赋一个权限*/
}
}
}
break;
}
}
}
}
char AI_fx(const int N,int k,int i,
const int O,const int X) /*智能调整*/
{
int j;
int m=0;/*m为容量*/
long chess_m[5]={0};/*棋所在位置的关系*/
for(j=0;j<5;j++)
{
switch(i)
{
case 1:
if(chess[N-28+k*13+j%5]>=0)/*表示没有被使用*/
{
chess_m[j]=N-28+k*13+j%5;;
m++;
}
else
chess_m[j]=-(N-28+k*13+j%5)-1;
break;
case 2:
if(chess[N-28+k+(j%5)*13]>=0)
{
chess_m[j]=N-28+k+(j%5)*13;
m++;
}
else
chess_m[j]=-(N-28+k+(j%5)*13)-1;
break;
case 3:
if(chess[N-28+4*k+j%5*(14+k*(-2))]>=0)
{
chess_m[j]=N-28+4*k+j%5*(14+k*(-2));
m++;
}
else
chess_m[j]=-(N-28+4*k+j%5*(14+k*(-2)))-1;
break;
}
}
AI_dz(m,chess_m,O,X);
}
char chess_Judge(const int N)/*棋盘判断*/
{
int i,j,k;
char O=0,X=0;
for(i=1;i<=3;i++)
{
k=0;
for(j=0;j<25;j++)
{
switch(i)
{
case 1:/*行*/
/*N-28+k*13+j%5*/
if(chess[N-28+k*13+j%5]==-'O')
++O;
else
if(chess[N-28+k*13+j%5]==-'X')
++X;
break;
case 2:/*列*/
/* N-28+k+(j%5)*13*/
if(chess[N-28+k+(j%5)*13]==-'O')
++O;
else
if(chess[N-28+k+(j%5)*13]==-'X')
++X;
break;
case 3:/*斜*/
/*N-28+4*k+j%5*(12+2+k*(-2))*/
if(j<10)
if(chess[N-28+4*k+j%5*(14+k*(-2))]==-'O')
++O;
else
if(chess[N-28+4*k+j%5*(14+k*(-2))]==-'X')
++X;
break;
}
if(!((j+1)%5))
{
if(O==5)/*表示用户胜利*/
return -1;
else
if(X==5)/*表示电脑胜利*/
return 1;
AI_fx(N,k,i,