上个博客记录了我的三子棋的实现
可是却又问题:
- 不论棋盘多大,只能玩三子棋
- 判断输赢的CheckWin函数写死为三子连起来为赢
所以针对问题我做了一下改善
- 在头文件内定义
#define CHESS 5
- 在game.c内封装函数
CheckWin2
以下 便是新版本的判断输赢代码
char CheckWin2(char board[ROW][COL], int row, int col)//五子棋
{
int x = 0;
int y = 0;
int i = 0;
char temp = 0;
for (x = 0; x < row; x++)
{
for (y = 0; y < col; y++)
{
//纵向
for (i = 0; i < CHESS-1; i++)
{
if (board[x][y] == board[x][y + i] && board[x][y] != ' ')
{
continue;
}
else
break;
}
if (board[x][y] == board[x][y + i]&&board[x][y]!=' ')
{
return board[x][y];
}
//纵向
for (i = 0; i < CHESS - 1; i++)
{
if (board[x][y] == board[x + i][y] && board[x][y] != ' ')
{
continue;
}
else
break;
}
if (board[x][y] == board[x + i][y] && board[x][y] != ' ')
{
return board[x][y];
}
//捺 斜向
for (i = 0; i < CHESS - 1; i++)
{
if (board[x][y] == board[x + i][y + i] && board[x][y] != ' ')
{
continue;
}
else
break;
}
if (board[x][y] == board[x + i][y + i] && board[x][y] != ' ')
{
return board[x][y];
}
//撇 斜向
for (i = 0; i < CHESS - 1; i++)
{
if (board[x][y] == board[x - i][y + i] && board[x][y] != ' ')
{
continue;
}
else
break;
}
if (board[x][y] == board[x - i][y + i] && board[x][y] != ' ')
{
return board[x][y];
}
}
}
if (IsFull(board, ROW, COL))
{
return 'q';
}
return ' ';
}
说明:
分别判断了横向连线,纵向连线和斜向的两种连线
主要思路是 每一颗棋子在落子之后,检索棋盘,是否连等且不为空格,如果是便返回连子的值。