#include<stdio.h> #include<stdlib.h> #include<time.h> char a[3][3]={ 0 }; int size =9; void qipan() //打印棋盤 { int i=0,j=0; printf(" | | \n"); for(i=0;i<3;i++) { printf("_%c_|_%c_|_%c_\n",a[i][0],a[i][1],a[i][2]); if(i<2) printf(" | | \n"); } } void wjxq()//玩家下棋 { int m=0,n=0; printf("玩家棋子為@: ");//輸入的是旗子所對應的坐標 scanf("%d %d",&m,&n); if(m<1 || m>3 || n<1 || n>3 || a[m-1][n-1]!=' ') { printf("你輸出的坐標位置不合法!"); wjxq(); } else { a[m-1][n-1]='@'; size=size-1; } } void dn()//電腦下棋 { int m=0,n=0; printf("電腦的棋子#:\n"); srand(time(NULL)); m=rand()%3; n=rand()%3; while(a[m][n]!=' ' ) { m=rand()%3; n=rand()%3; } a[m][n]='#'; size=size-1; } int winner()//判斷獲勝者 { if((a[0][0]== a[0][1] && a[0][1]==a[0][2] && a[0][2]=='@')|| (a[1][0]==a[1][1] && a[1][1]==a[1][2] && a[1][2]=='@')|| (a[2][0]==a[2][1] && a[2][1]==a[2][2] && a[2][2]=='@')|| (a[0][0]==a[1][0] && a[1][0]==a[2][0] && a[2][0]=='@')|| (a[0][1]==a[1][1] && a[1][1]==a[2][1] && a[2][1]=='@')|| (a[0][2]==a[1][2] && a[1][2]==a[2][2] && a[2][2]=='@')|| (a[0][0]==a[1][1] && a[1][1]==a[2][2] && a[2][2]=='@')|| (a[0][2]==a[1][1] && a[1][1]==a[2][0] && a[2][0]=='@')) return 1;//玩家獲勝 else if((a[0][0]==a[0][1] && a[0][1]==a[0][2] && a[0][2]=='@')|| (a[1][0]==a[1][1] && a[1][1]==a[1][2] && a[1][2]=='@')|| (a[2][0]==a[2][1] && a[2][1]==a[2][2] && a[2][2]=='@')|| (a[0][0]==a[1][0] && a[1][0]==a[2][0] && a[2][0]=='@')|| (a[0][1]==a[1][1] && a[1][1]==a[2][1] && a[2][1]=='@')|| (a[0][2]==a[1][2] && a[1][2]==a[2][2] && a[2][2]=='@')|| (a[0][0]==a[1][1] && a[1][1]==a[2][2] && a[2][2]=='@')|| (a[0][2]==a[1][1] && a[1][1]==a[2][0] && a[2][0]=='@')) return 0;//玩家輸了,即電腦贏了 else if(size==0) return -1;//平局 else return 2; } int main() { int i=0,j=0;//將數組初始化為空 for(i=0;i<3;i++) { for(j=0;j<3;j++) { a[i][j]=' '; } } while(1) { qipan(); if(winner()==-1||winner()==0||winner()==1) { break; } wjxq(); qipan(); if(winner()==-1||winner()==0||winner()==1) { break; } dn(); } if(winner()==1) { printf("玩家獲勝!"); } else if(winner()==0) { printf("玩家輸了!"); } else { printf("平局"); } system("pause"); return 0; }