三子棋程序的讲解(4)

2023-12-18 15:38:03

? ? ? ? 前期的准备工作基本上已经差不多了,还差一个如何判断胜负,我们的三子棋就大功告成了。相信大家都玩过三子棋,胜利的方式实际上非常的简单,只需要任意一行(或者任意一列,或者任意对角线),有三颗相同的棋子就算那一方赢了所以说我们在我们这个行为0,1,2和列为0,1,2的数组中,只需要确保当行号一样的时候,列号(0,1,2)都相同(同理,当列号一样的时候,确保行号0,1,2都相同),或者确保0,0和1,1和2,2这几个元素;或者0,2和1,1,和2,0这几个元素相同,就可以判断胜利了,先看代码:

char result(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];//随便返回一个数组下标(注意是要把行写成i),因为当有一行元素全相同的时候,那一行随便哪个元素都是相同的
		}
	}
	int j;
	for (j = 0; j < col; j++)//和上面判断行相同一样,一样的思路,只是这里是判断是否存在一列有全部相同的
	{
		if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] != ' ')
		{
			return board[1][j];//返回那个元素(胜利的元素)
		}
	}
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
		return board[1][1];
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
		return board[1][1];//这里是判断,是否有对角线存在三个相同的元素的胜利状况
	if (Full(board, row, col))//这个函数是判断棋盘是否是满的,这里下面会给大家提到
	{
		return 'Q';
	}
	return 'c';
}

? ? ? ? 这里还有一件事,这样写,我们还差了一点对于游戏平局的判断——只要上述情况都没满足,但棋盘(二维数组)又已经被填满了元素的时候,就可以判断为平局了,然后将平局的结果返回给游戏控制函数

int Full(char board[ROW][COL], int row, int col)
{
	int i, j;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')//检查数组中的每一个元素,只要有一处还是空格,就返回0
				return 0;
		}
	}
	return 1;//返回1就说明数组中没有元素了
}

? ? ? ? 这样,我们的函数就准备得差不多了,只需要写主函数来调用就可以实现三子棋了。?

?

文章来源:https://blog.csdn.net/Aishangyuwen/article/details/135062653
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。