原帖及讨论:http://bbs.bccn.net/thread-125024-1-1.html #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[i].attack==1&&a[b[i].n]!=88&&a[b[i].n]!=79) {a[b[i].n]=88; return 0;} for(i=0;i<b_j;i++) if(b[i].attack!=1&&a[b[i].n]!=88&&a[b[i].n]!=79) {a[b[i].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[i]>='1'&&a[i]<='9') {if(k==m) {a[i]=88; return 0; } k++; } } |