多重for循环也可以用return跳出

文章详细描述了一个名为`charIsWin`的函数,用于在九宫格三子棋游戏中检测玩家或电脑的赢、输状态。函数通过嵌套循环遍历棋盘,判断是否存在连续的三个同色棋子。当满足条件时,返回相应的字符表示结果,如玩家赢(*)、电脑赢(#)或平局(Q)。
摘要由CSDN通过智能技术生成

字符型函数内部多重for循环仍可用return返回字符

char IsWin(char board[ROW][COL], int row, int col)
{
	for (int x = 0; x < row - 1; x++)
	{
		for (int y = 0; y < col - 1; y++)
		{
			if (x + 2 < row && y + 2 < col)
			{
				for (int a = 0; a < 2; a++)//九宫格情况的三子棋输赢规则
				{
					if (board[x + a][y] == board[x + a + 1][y] && board[x + a + 1][y] == board[x + a + 2][y] && board[x + a][y] != ' ')//判断一行三个
						return board[x + a][y];
					/*else if (board[x + a][y] == board[x + a + 1][y] == board[x + a + 2][y] == '#' != ' ')
						return '#';*/
				}
				for (int b = 0; b < 2; b++)
				{
					if (board[x][y + b] == board[x][y + b + 1] && board[x][y + b + 1] == board[x][y + b + 2] && board[x][y + b] != ' ')//判断一列三个
						return board[x][y + b];
					/*else if (board[x][y + b] == board[x][y + b + 1] == board[x][y + b + 2] == '#' != ' ')
						return '#';*/
				}
				if (board[x][y] == board[x + 1][y + 1] && board[x + 1][y + 1] == board[x + 2][y + 2] && board[x][y] != ' ')//判断对角线
					return board[x][y];
				/*if (board[x][y] == board[x + 1][y + 1] == board[x + 2][y + 2] == '#' != ' ')
					return '#';*/
				if (board[x + 2][y] == board[x + 1][y + 1] && board[x + 1][y + 1] == board[x][y + 2] && board[x + 2][y] != ' ')
					return board[x + 2][y];
				/*if (board[x + 2][y] == board[x + 1][y + 1] == board[x][y + 2] == '#' != ' ')
					return '#';*/
					//判断平局
				int ret = IsFull(board, row, col);
				if (ret == 1)
				{
					return 'Q';
				}
				return 'C';
		    }
		}
	}
}

通过返回的字符赋值给“ret”来判断是否跳出落子部分循环

void game()
{
	
	char board[ROW][COL];
	Initboard(board, ROW, COL);//初始化棋盘为空格
	DisplayBoard(board, ROW, COL);//打印棋盘
	//玩家走再电脑走(电脑难度:简单困难)
	char ret = 0;
	while (1)
	{
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//判断玩家输赢
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')//只要不等于'C'包括'*','#','Q',提供获胜后跳出while循环
			break;
		CpMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//判断电脑输赢
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
			break;
	}
	if (ret == '*')
	{
		printf("玩家胜利\n");
	}
	else if (ret == '#')
	{
		printf("电脑胜利\n");
	}
	else
	{
		printf("平局\n");
	}
}

break只跳出一层循环

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值