0
点赞
收藏
分享

微信扫一扫

C语言实现三子棋小游戏

十里一走马 2022-04-26 阅读 49
c语言

三子棋:在一个九宫格里 玩家依次下棋 率先凑齐一行或一列或任一对角线相同棋子即获胜。

思路:创建棋盘并初始化---打印棋盘----玩家下棋---判断输赢---电脑随机下棋---判断输赢

玩家和电脑每次下棋完都要进行一次判断输赢

 game函数部分

void game()
{
	char arr[3][3];//创建数组

	char a = ' ';//创建字符变量存放判断输赢返回的值

	chushi(arr);//初始化棋盘

	print(arr);//打印棋盘

	while (1)
	{
		player(arr);//玩家下棋

		print(arr);//打印棋盘
		printf("\n");

		a = jud(arr);//判断输赢

		if (a == '*')
		{
			printf("玩家赢了\n");
			break;
		}
		if (a == 'c')
		{
			printf("平局了\n");
			break;
		}
		computer(arr);//电脑下棋

		print(arr);//打印棋盘
		printf("\n");

		a = jud(arr);//判断输赢

		if (a == 'c')
		{
			printf("平局了\n");
			break;
		}
		if (a == '#')
		{
			printf("电脑赢了\n");
			break;
		}
	}
}

初始化棋盘函数

void chushi(char arr[3][3])//定义初始化棋盘
{
	int i, j;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
			arr[i][j] = ' ';
	}
}

打印棋盘函数

void print(char arr[3][3])//定义打印棋盘
{
	int i, j;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf(" %c ",arr[i][j]);
			if (j < 2)
				printf("|");
		}
		printf("\n");
		if (i < 2)
		{
			for (j = 0; j < 3; j++)
			{
				printf("---");
				if (j < 2)
					printf("|");
			}
		}
		printf("\n");
	}
}

棋盘效果如图

玩家下棋操作函数

void player(char arr[3][3])//定义玩家下棋操作
{
	int x, y;
	while (1)
	{
		printf("请输入你要下的坐标:");
		scanf("%d%d", &x, &y);
		if (x >= 1 && x <= 3 && y >= 1 && y <= 3)//判断输入的坐标是否合法
		{
			//判断坐标是否已被使用
			if (arr[x - 1][y - 1] == ' ')
			{
				arr[x - 1][y - 1] = '*';
				break;
			}
			else
				printf("坐标已被占用,请重新输入\n");
		}
		else
			printf("输入坐标有误\n");
	}
}

判断输赢函数

int pingju(char arr[3][3])//判断是否为平局
{
	int x, y;
	//如果九个格还有未下棋的坐标则返回0
	for (x = 0; x < 3; x++)
	{
		for (y = 0; y < 3; y++)
		{
			if (arr[x][y] == ' ')
				return 0;
		}
	}
	//如果九个格子都下满了则返回1
	return 1;
}

char jud(char arr[3][3])//判断输赢
{
	int x, y;

	//判断一行
	for (x = 0; x < 3; x++)
	{
		if (arr[x][0] == arr[x][1] && arr[x][1] == arr[x][2] && arr[x][1] != ' ')
			return arr[x][1];
	}
	//判断一列

	for (y = 0; y < 3; y++)
	{
		if (arr[0][y] == arr[1][y] && arr[1][y] == arr[2][y] && arr[1][y] != ' ')
			return arr[1][y];
	}

	//判断对角线
	if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
		return arr[1][1];

	if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
		return arr[1][1];

	if (pingju(arr) == 1)//如果平局则返回c
		return 'c';
}

电脑下棋操作函数

void computer(char arr[3][3])//定义电脑下棋
{
	int x, y;
	//随机生成电脑下棋坐标
	while (1)
	{
		x = rand() % 3 + 0;
		y = rand() % 3 + 0;
		if (arr[x][y] == ' ')
		{
			arr[x][y] = '#';
			break;
		}
	}
}

主函数部分

int main()
{
	srand((unsigned)time(NULL));//设置随机数起点
	int i;
	do
	{
		printf("1、play    0、退出\n");
		printf("请输入你的选择:");
		scanf("%d", &i);
		switch (i)
		{
		case 0:
			printf("exit\n");
			break;
		case 1:
			game();
			break;
		default:
			printf("输入错误\n");
			break;
		}
	} while (i);
	return 0;
}

 最终效果

 

举报

相关推荐

0 条评论