#include <stdio.h>
#include <stdbool.h>
char qipan[3][3] = {
{' ',' ',' '},
{' ',' ',' '},
{' ',' ',' '}
};
int GameOver = 0;
int main(void) {
int x, y, Player;
Player = 1; x = y = 0;
void win(); void qipan_visual();
for (; GameOver == 0;) {
printf("当前是玩家%d执子\n请输入要下的的棋子的坐标例如(1 1)不包括括号\n(第几行 第几个):", Player);
scanf_s("%d %d", &x, &y);
if (x > 3 || x < 0 || y>3 || y < 0) {
printf("输入格式错误或超出棋盘!\n请重新输入!");
scanf_s("%d %d", &x, &y);
}
else while (qipan[x - 1][y - 1] == 79 || qipan[x - 1][y - 1] == 88 ) { //此处出现读取的数据无效,可读为3,可能读取-1
printf("此位置已有棋子!请重新输入!");
scanf_s("%d %d", &x, &y);
}
//Player = 1 ? qipan[x - 1][y - 1] = '*',Player = 1 : qipan[x - 1][y - 1] = 'x', Player = 2;
if (Player == 1) {
qipan[x - 1][y - 1] = 'O'; //此处出现可写为3,可能写-1
Player = 2;
}
else {
qipan[x - 1][y - 1] = 'X'; //此处出现可写为3,可能写-1
Player = 1;
}
qipan_visual();
win();
}
printf(" GameOver! \n胜利者是Player%d", Player == 1 ? Player = 2 : Player = 1);
}
void win() {
int x, y;
x = y = 0;
for (; x < 3 && y < 3; x++, y++) {
//横向判断
if (qipan[x][0] == qipan[x][1] && qipan[x][1] == qipan[x][2]) {
qipan[x][0] == ' ' && qipan[x][1] == ' ' ? GameOver = 0 : GameOver = 1;
break;
}
//纵向判断
if (qipan[0][y] == qipan[1][y] && qipan[1][y] == qipan[2][y]) {
qipan[0][y] == ' ' && qipan[1][y] == ' ' ? GameOver = 0 : GameOver = 1;
break;
}
//斜向判断
if (qipan[0][0] == qipan[1][1] && qipan[1][1] == qipan[2][2] || qipan[0][2] == qipan[1][1] && qipan[1][1] == qipan[2][0]) {
qipan[0][0] == ' ' && qipan[1][1] == ' ' || qipan[0][2] == ' ' && qipan[1][1] == ' ' ? GameOver = 0 : GameOver = 1;
break;
}
}
}
void qipan_visual() {
//棋盘可视化
printf(" %c || %c || %c \n", qipan[0][0], qipan[0][1], qipan[0][2]);
printf("-------------\n");
printf(" %c || %c || %c \n", qipan[1][0], qipan[1][1], qipan[1][2]);
printf("-------------\n");
printf(" %c || %c || %c \n\n", qipan[2][0], qipan[2][1], qipan[2][2]);
}
https://blog.csdn.net/nomad2/article/details/1611832