#include
#define N 7
int table[N][N] = {0};
void printtable()//打印棋盘
{int i, j;printf("\tTic Tac Toe\n");printf("Player 1 (X) - Player 2 (O)\n");for (i = 0; i < N; i++){for (j = 0; j < N; j++)printf(" |");printf("\n");for (j = 0; j < N; j++){if (table[i][j] == 1){printf(" X |");}else if (table[i][j] == -1){printf(" O |");}else {if (i * N + j + 1 < 10)printf(" %d |", i * N + j + 1);elseprintf(" %d |", i * N + j + 1);}}printf("\n");for (j = 0; j < N; j++)printf("_____|");printf("\n");}
}
int wincheck()//输赢检查
{int i, j, m, n;int flag = 0;for (m = 0; m <= N - 5; m++)//井字棋每次选取5×5的网格进行判断{for (n = 0; n <= N - 5; n++){for (i = m; i <= m + 4; i++)//进行行检查{for (j = n; j <= n + 4; j++){flag += table[i][j];}if (flag == 5)//对每一行的数值加和进行检查{return 1;//玩家一获胜}else if (flag == -5){return 2;//玩家二获胜}flag = 0;}//行检查结束for (j = n; j <= n + 4; j++)//进行列检查{for (i = m; i <= m + 4; i++){flag += table[i][j];}if (flag == 5)//对每一列的数值加和进行检查{return 1;//玩家一获胜}else if (flag == -5){return 2;//玩家二获胜}flag = 0;}//列检查结束for (i = m, j = n + 4; i <= m + 4 && j >= n; i++,j --)//进行副对角线检查{flag += table[i][j];}if (flag == 5)//对每一对角线的数值加和进行检查{return 1;//玩家一获胜}else if (flag == -5){return 2;//玩家二获胜}flag = 0;//副对角线检查结束for (i = m,j = n; i <= m + 4 && j <= n + 4; i++,j ++)//正对角线检查{flag += table[i][j];}if (flag == 5)//对每一正对角线的数值加和进行检查{return 1;//玩家一获胜}else if (flag == -5){return 2;//玩家二获胜}flag = 0;//正对角线判断结束}}//玩家1,2都没有胜利for (i = 0; i < N; i++)//判断棋盘是否被下满{for (j = 0; j < N; j++){if (table[i][j] == 0){return -1;//如果棋盘上还有空,则返回-1;}}}return -2;//平局则返回-2
}
int playerinput(int x)
{int location;printf("Player %d enter a number :",x);scanf_s("%d", &location);while (table[location / N][location % N - 1] != 0){printf("Player %d enter a right number again:",x);scanf_s("%d", &location);}printf("\n");if (x == 1){table[location / N][location % N - 1] = 1;}else{table[location / N][location % N - 1] = -1;}}
int main()
{while (1){int temp = wincheck();while (temp == -1){printtable();playerinput(1);temp = wincheck();if (temp == 1){system("cls");printtable();printf("Player 1 win!");return 0;}else if (temp == -2){system("cls");printtable();printf("Player 1 tied with Player 2!");return 0;}system("cls");printtable();playerinput(2);temp = wincheck();printtable();if (temp == 2){system("cls");printtable();printf("Player 2 win!");return 0;}else if (temp == -2){system("cls");printtable();printf("Player 1 tied with Player 2!");return 0;}system("cls");}}system("pause");
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!