基于数组的游戏(棋盘游戏):

一旦棋盘上哪方出现3个在一行或一列或对角线上时就结束游戏,那哪一方赢了。

代码如下:

#include<stdio.h>
#include<stdlib.h>
#define XS 3 
#define YS 3

void init_plate(char arr[XS][YS])/*初始化数组arr[][]*/
{
	int i,j;
	for(i=0;i<XS;i++)
	{
		for(j=0;j<YS;j++)
		{
			arr[i][j]=' ';
		}
	}
}
void print_plate(char arr[XS][YS])/*打印棋盘*/
{
	int i;
	for(i=0;i<XS;i++)
	{
		printf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]);
		if(i!=2)
		{
			printf("---|---|---\n");
		}
	}
}
void play_game(char arr[XS][YS])/*游戏中玩家下棋子的位置*/
{
	int line,list;
	printf("请输入要下棋子的位置(行和列在1~3之间)>");
	scanf("%d%d",&line,&list);
	if(arr[line-1][list-1]!=' ')
	{
		printf("输入有误\n");
		play_game(arr);/*输入错误时,重新输入下棋的位置*/
	}
	else arr[line-1][list-1]='X';
}
void computer_game(char arr[XS][YS])/*游戏中电脑下棋子的位置*/
{
	int i,j;
	printf("电脑下棋>\n");
    for(i=0;i<XS;i++)
    {
		for(j=0;j<YS;j++)
    	{
			if(arr[i][j]==' ')
    		{
    			arr[i][j]='+';
    		    goto flag;/*goto语句跳出整个两层循环*/
    		}
    	}
    }
flag: 
    if(i*j==9)
    {
    	printf("平局");
    }
}
char judge_win(char arr[XS][YS])/*游戏中判断输赢,返回一个char类型的值*/
{
	int i;
    for(i=0;i<XS;i++)
    {
    	if(arr[i][0]==arr[i][1]&&arr[i][1]==arr[i][2])
    	return arr[i][0];
    }
    for(i=0;i<YS;i++)
    {
    	if(arr[0][i]==arr[1][i]&&arr[1][i]==arr[2][i])
    	return arr[0][i];
    }
    if(arr[0][0]==arr[1][1]&&arr[1][1]==arr[2][2])
    {
    	return arr[0][0];
    }
    else if(arr[0][2]==arr[1][1]&&arr[1][1]==arr[2][0])
    {
    	return arr[1][1];
    }
    else return ' ';
}
int main()/*主函数*/
{
	char arr[XS][YS];
	int turn;
	init_plate(arr);
	print_plate(arr);
	do
	{
		play_game(arr);
		turn=judge_win(arr);
		if(turn!=' ')
		{
			break;
		}
		computer_game(arr);
		print_plate(arr);
		turn=judge_win(arr);
	}while(turn==' ');/*没有空格或某方已经赢得比赛就结束*/
	printf("游戏结束界面:\n");
	print_plate(arr);
	if(turn=='X')
	{
		printf("玩家赢\n");
	}
	else if(turn=='+')
	{
		printf("电脑赢\n");
	}
	system("pause");
	return 0;
}