#include <stdio.h>
#define BOARD_SIZE 15
char board[BOARD_SIZE][BOARD_SIZE];
void print_board()
{
int i,j;
for (i=0;i<BOARD_SIZE;i++)
{
for (j=0;j<BOARD_SIZE;j++)
{
printf("%c",board[i][j]);
}
printf("\n");
}
}
int check_winner(int row,int col,char player)
{
int count;
// 检查水平方向
count=1;
int i;
for (i=1;i<5;i++)
{
if (col+i>=BOARD_SIZE||board[row][col + i]!=player)
{
break;
}
count++;
}
for (i=1;i<5;i++)
{
if (col-i<0||board[row][col - i]!=player)
{
break;
}
count++;
}
if (count>=5)
{
return 1;
}
// 检查垂直方向
count=1;
for (i=1;i<5;i++)
{
if (row+i>=BOARD_SIZE||board[row+i][col]!=player)
{
break;
}
count++;
}
for (i=1;i<5; i++)
{
if (row-i<0||board[row-i][col]!=player)
{
break;
}
count++;
}
if (count>=5)
{
return 1;
}
// 检查主对角线方向
count=1;
for (i=1;i<5;i++)
{
if (row+i>=BOARD_SIZE||col+i>=BOARD_SIZE||board[row + i][col + i]!=player)
{
break;
}
count++;
}
for (i=1;i<5;i++)
{
if (row-i<0||col-i<0||board[row - i][col - i]!=player)
{
break;
}
count++;
}
if (count>=5)
{
return 1;
}
// 检查副对角线方向
count=1;
for (i=1;i<5;i++)
{
if (row-i<0||col+i>=BOARD_SIZE||board[row - i][col + i]!=player)
{
break;
}
count++;
}
for (i=1;i<5;i++)
{
if (row+i>=BOARD_SIZE||col-i<0||board[row + i][col - i]!=player)
{
break;
}
count++;
}
if (count>=5)
{
return 1;
}
return 0;
}
int main()
{
// 初始化棋盘
int i,j;
for (i=0;i<BOARD_SIZE;i++)
{
for (j=0;j<BOARD_SIZE;j++)
{
board[i][j] = '.';
}
}
// 游戏主循环
char currentPlayer='X';
int row,col;
int gameOver=1;
while (gameOver)
{
// 打印当前棋盘
print_board();
// 玩家输入落子位置
printf("玩家%c回合输入:行 列(1-15)", currentPlayer);
scanf("%d %d",&row,&col);
row=row-1;
col=col-1;
// 检查输入是否合法
if (row<0||row>=BOARD_SIZE||col<0||col>=BOARD_SIZE||board[row][col]!='.')
{
printf("错误请重试\n");
continue;
}
// 在棋盘上落子
board[row][col]=currentPlayer;
// 检查是否获胜
if (check_winner(row,col,currentPlayer))
{
printf("玩家 %c 获胜!\n", currentPlayer);
gameOver=0;
}
else
{
// 切换玩家
currentPlayer=(currentPlayer=='X')?'O':'X';
}
// 打印最终棋盘
}
print_board();
return 0;
}
//简易版,再难我也不会了