一.回顾
我们上一篇文章介绍了电脑下棋的代码,这时候我们就需要来判断玩家的输赢,如果执行完PlayerMove()函数后,玩家的棋子连城了三个,那么就是玩家赢了,反之则为电脑获胜,如果是平局则也需要告诉玩家平局了,我们想一想三子棋的输赢是依据上下左右以及斜线能够连城一条直线来判定的,这里我们规定,当玩家赢的时候程序返回 * 号 电脑获胜时则返回 # 号 平局时候则返回字符 Q ,若还需要继续则返回字符 C
二.判断输赢
我们照例将判断输赢的代码封装成一个函数名为 IsWin(),既然我们判断输赢是依据字符的返回值,所以我们这个函数的返回值就不再是 void 空了,而是 char 类型,所以我们在game.h头文件中需要先写出函数的定义,代码如下:
char IsWin(char board[ROW][COL],int row,int col);
既然我们需要判断,所以也少不了if语句,我们在test.c文件中写入一下代码:
char ret = 0;
ret = IsWin(board,ROW,COL);
if(ret != 'C'){
break;
}
if(ret == '*'){
printf("玩家获胜!\n");
}
else if(ret == '#')
{
printf("电脑获胜!\n");
}else
{
printf("平局!\n");
}
接下来我们就来着重看一下这个IsWin()函数如何来判断玩家的输赢,我们先来看行与列输赢的判断,代码如下:
代码写在game.c的源文件中
char IsWin(char board[ROW][COL],int row,int col)
{
int i=0;
for(i=0;i<row;i++){
if(board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' '){
return board[i][1];
}
}
int j=0;
for(j=0;j<col;j++){
if(board[j][0] == board[j][1] && board[j][1] == board[j][2] && board[j][1] != ' '){
return board[j][1];
}
}
}
这样我们就可以实现判断行与列的输赢了,下篇文章讲着重介绍对角线的判定
2023/9/6