Tic-Tac-Toe游戏的C语言二维数组的实现

Problem:Tic-Tac-Toe游戏,主函数输入一个棋盘规模大小,然后接着输入目前棋盘的形态,然后调用judge函数,判断游戏是否结束的简单小游戏程序。主要考察二维数组和标记变量的知识点。

#include <stdio.h>

int judge(int NUM,int a[NUM][NUM]);

int main(void)
{
	int num;                           //棋盘的大小
	while (scanf("%d", &num) != EOF)
	{
		int a[num][num];
		for(int i=0; i<num; i++)
		{
			for (int j=0; j<num; j++)
			{
				scanf("%d",&a[i][j]);
			}
		}
		int over = judge(num,a);
		if (over)
		{
			printf("Game Over!\n");
		}
		else
		{
			printf("Please Continue\n");
		}
	}
	return 0;
}

int judge(int NUM,int a[NUM][NUM])
{
	int over;                    //游戏结束的标志位 
	for (int i = 0; i < NUM; i++)     //循环检查每一行的情况 
	{
		int j;
		for (j = 1; j < NUM; j++)     //检查每一行和第一列是否匹配,不匹配跳出一层循环继续看下一行 
		{
			if (a[i][0] != a[i][j])
			{
				over = 0;        //游戏还没有结束 
				break;
			}
		}
		if (j == NUM)            //遍历完一行了,有相同的一行,游戏结束跳出循环 
		{
			over = 1;
			break;
		}
	}
	if (!over)
	{
		for (int j = 0; j < NUM; j++) //循环检查每一列的情况 
		{
			int i;
			for (i = 1; i < NUM; i++) //遍历行循环 
			{
				if (a[0][j] != a[i][j])
				{
					over = 0;
					break;
				}
			}
			if (i == NUM)
			{
				over = 1;
				break;
			}
		}
	}
	if (!over)                 //检查主对角线 
	{
		int i;
		for (i = 1; i < NUM; i++)
		{
			if (a[0][0] != a[i][i])
			{
				over = 0;
				break;
			}
		}
		if (i == NUM)
		{
			over = 1;
		}
	}
	if (!over)
	{
		int j;
		for (j = 0; j < NUM - 1; j++)
		{
			if (a[0][NUM - 1] != a[NUM - 1 - j][j])
			{
				over = 0;
				break;
			}
		}
		if (j == NUM - 1)
		{
			over = 1;
		}
	}
	if (!over)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}

程序运行如下图所示:

Tic-Tac-Toe游戏的C语言二维数组的实现