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;
}
}
程序运行如下图所示: