#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
void prinf(void);/*这里负责输出与清屏*/
int judge_chess(void);/*判断棋局输赢,同时为电脑服务*/
int Computer_strategy(void);/*作为电脑攻防优先级*/
int compurter_think(void);/*电脑思考,实质是发生随机数*/
int a[9]={49,50,51,52,53,54,55,56,57};/*棋盘*/
int b_j=0,who=0; /*who为限制使用权限*/
struct computer_construe/*作为电脑判断用*/
{
int n;
int attack;
}b[8];
int main(void)
{
int scan,i,j=5;
char compurter_one;
prinf();
puts(\"电脑先下,请按y或Y,否则按其它键,默认电脑为X,用户黙认为O\");
compurter_one=getchar();
if(compurter_one==\'y\'||compurter_one==\'Y\')/*电脑先下,按y,否则按其它键*/
{
compurter_think();
prinf();
j=4;
}
for(i=0;i<j;i++)
{
printf(\"\\t\\t\\t\\t\\t\\t输入时按数字:\");
do{
scanf(\"%d\",&scan);
if(scan<0||scan>9)
printf(\"请新重生输入\");
}
while(scan<1||scan>9);
if(who==0)
who=1;
switch(scan)
{
case 1:scan=i;if(a[0]>=\'1\'&&a[0]<=\'9\')a[0]=79;else{--i;printf(\"己使用\\n\");}break;
case 2:scan=i;if(a[1]>=\'1\'&&a[1]<=\'9\')a[1]=79;else{--i;printf(\"己使用\\n\");}break;
case 3:scan=i;if(a[2]>=\'1\'&&a[2]<=\'9\')a[2]=79;else{--i;printf(\"己使用\\n\");}break;
case 4:scan=i;if(a[3]>=\'1\'&&a[3]<=\'9\')a[3]=79;else{--i;printf(\"己使用\\n\");}break;
case 5:scan=i;if(a[4]>=\'1\'&&a[4]<=\'9\')a[4]=79;else{--i;printf(\"己使用\\n\");}break;
case 6:scan=i;if(a[5]>=\'1\'&&a[5]<=\'9\')a[5]=79;else{--i;printf(\"己使用\\n\");}break;
case 7:scan=i;if(a[6]>=\'1\'&&a[6]<=\'9\')a[6]=79;else{--i;printf(\"己使用\\n\");}break;
case 8:scan=i;if(a[7]>=\'1\'&&a[7]<=\'9\')a[7]=79;else{--i;printf(\"己使用\\n\");}break;
case 9:scan=i;if(a[8]>=\'1\'&&a[8]<=\'9\')a[8]=79;else{--i;printf(\"己使用\\n\");}break;
}
if(scan==i)
{
if(!(judge_chess()))
if(Computer_strategy())
compurter_think();
who=0;
prinf();
if(judge_chess())
{
if(judge_chess()==3)
puts(\"YOU WIN\");
else
puts(\"COM WIN\");
break; }
}
scan=j;
}
if(scan==j)
puts(\"a draw in chess\");/*和局*/
getch();
return 0;
}
void prinf(void)
{
int i;
system(\"cls\");
for(i=0;i<7;i++)
puts(\"\");
for(i=1;i<4;i++)
{
printf(\"\\t\\t\\t %c | %c | %c \\n\",a[3*(i-1)],a[3*(i-1)+1],a[3*(i-1)+2]);
if(i!=3)
printf(\"\\t\\t\\t_________________\\n\");}
}
int judge_chess(void)
{
int i,j,k,m,n,X,O;
for(i=1;i<4;i++)
{
k=0;X=0;O=0;
for(j=0;j<9;j++)
{
switch(i)
{
case 1:m=a[j];break;
case 2:m=a[j%3*3+k];break;
case 3:if(j<6) m=a[2*(2-k)*(j%3+k)];break;
}
switch(m)
{
case \'O\':++O;break;
case \'X\':--X;break;
default:
switch(i)
{
case 1:n=j;break;
case 2:n=j%3*3+k;break;
case 3:if(j<6) n=2*(2-k)*(j%3+k);break;
}
}
if(2==j%3)
{
m=O+X;
switch(m)
{
case 2:if(who){b[b_j].n=n;b[b_j].attack=-1;++b_j;}break;
case 3:return 3;break;
case -2:if(who){b[b_j].n=n;b[b_j].attack=1;++b_j;}break;
case -3:return -3;break;
}
++k;
X=0;
O=0;
}
}
if(i==3&&j>5)
return 0;
}
}
int Computer_strategy(void)/*电脑战略*/
{
int i;
for(i=0;i<b_j;i++)
if(b.attack==1&&a[b.n]!=88&&a[b.n]!=79)
{a[b.n]=88;
return 0;}
for(i=0;i<b_j;i++)
if(b.attack!=1&&a[b.n]!=88&&a[b.n]!=79)
{a[b.n]=88;
return 0;}
return 1;
}
int compurter_think(void)
{
int i,j,k=1,m=0;
srand(time(NULL));
do{
m=rand()%10;
if(m==0&&a[4]!=88&&a[4]!=79)
{a[4]=88;return 0;} }while(m==0);
for(j=0;j<9;j++)
for(i=0;i<9;i++)/*选译功能*/
if(a>=\'1\'&&a<=\'9\')
{if(k==m)
{a=88;
return 0;
}
k++;
}
} |