C语言初阶习题(4数组)【19】三子棋游戏

1.实现三子棋游戏

2.思路

我们把游戏实现部分放在game.c和game.h中,把游戏的测试代码放到test.c中
main函数在test.c中。

2.1 test.c中

  1. 先写main 函数,在main函数中调用test函数。
int main()
{
   
	test();
	return 0;
}
  1. test.c函数实现让玩家进行选择是否要进行游戏
    这里用到了do…while语句,先上来打印一个菜单,让玩家进行输入,根据玩家输入进入不同的分支。
void test()
{
   
	int input = 0;
	
	do
	{
   
		manu();
		printf("请输入你的选择:\n");
		scanf("%d", &input);
		switch(input)
		{
   
			case 1:
				game();
				break;
			case 0:
				printf("您已退出游戏,欢迎下次再来!\n");
				break;
			default:
				printf("您的选择有误,请重新输入:\n");
		}
	} while (input);
}
  1. manu()函数很简单,直接print打印即可。和我们之前的猜数字游戏是一样的思路

void manu(void)
{
   
	printf("=====================\n");
	printf("=====1:开始游戏=====\n");
	printf("=====0:退出游戏=====\n");
	printf("=====================\n");
}

这里写完,可以把game()函数先屏蔽掉看看效果,输入其他数值直接报错让玩家继续输,输入1直接break,循环继续,输入0就直接退出了。

在这里插入图片描述

2.2 game()的实现

game()函数实现这部分是游戏流程。game()也是放在test.c中。但是涉及到game函数具体实现都会放到game.c中去。
我们先表示棋盘:创建一个 3*3的二维数组,每个元素是一个char类型,'X’表示玩家1、'O’表示玩家2、'空格’表示空白。 我在game.c函数实现中设计了如果是和局的话用‘h’表示
因为只要游戏没有结束,就要一直下棋,所以要用到循环while

  • 游戏流程:
    (1)创建棋盘,并初始化~把所有位置都设为空格
    (2)打印棋盘
    while(1)
    {
    (3)玩家进行落子,让玩家来输入一组坐标(row,col),进行落子
    (4)进行判定,有任何一方获胜或者平局就break;
    (5)电脑进行落子~ 电脑随机落子
    (6)进行判定,有任何一方获胜或者平局就break;
    }
    (7)判定是哪一方获胜或者平局了
  • 代码实现
void game()
{
   
	//0.创建棋盘
	char chessBoard[ROW_MAX][COL_MAX] = {
    0 };


	//1.初始化棋盘
	init(chessBoard, ROW_MAX, COL_MAX);


	//2.打印棋盘
	print(chessBoard, ROW_MAX, COL_MAX);

	char ret = ' ';//这个需要定义在while之外
	while (1)
	{
   
		//3.玩家下棋
		palyer(chessBoard, ROW_MAX, COL_MAX);
		print(chessBoard, ROW_MAX, COL_MAX);
		ret = is_Win(chessBoard, ROW_MAX, COL_MAX);
		if ( ret!= ' ')
		{
   
			break;
		}

		//4.电脑下棋
		computer(chessBoard, ROW_MAX, COL_MAX);
		print(chessBoard, ROW_MAX, COL_MAX);
		ret = is_Win(chessBoard, ROW_MAX, COL_MAX);
		if (ret != ' ')
		{
   
			break;
		}
	}

		if (ret == 'X')
		{
   
			printf("玩家获胜\n");
		}else if (ret== 'O')
		{
   
			printf("电脑获胜\n");
		}
		else if(ret== 'h')
		{
   
			printf("平局\n");
		}
		
	}

2.3 game.c函数实现

我们注意game.c和game.h是配套使用的,game.c中的函数需要在game.h中进行声明。
在这里插入图片描述
在.c文件中需要引入我们自己写的.h头文件,用的是“ ”,一般引用库函数用的< >

#include "game.h"

2.3.1 棋盘初始化

init(chessBoard, ROW_MAX, COL_MAX);
最简单的写法就是使用for循环直接遍历,给每个元素初始化为空格,后面有学到了用memset函数,直接初始化。

memset函数的头文件是<string.h> 。这个的使用可以自己搜下,比较简单有三个参数,第一个是要初始化的元素地址,我们这里就是数组首元素,第二个参数是要初始化的值,我们这里是空格,第三个就是要初始化的长度,

//棋盘初始化
void init(char chessBoard[ROW_MAX][COL_MAX], int  row, int  col)
{
   
#if 0
	for (int row = 0; row < MAX_ROW; row++)
	{
   
		for (int col = 0; col < MAX_COL; col++)
		{
   
			chessBoard[row][col] = ' ';
		}
	}
#endif
	memset(chessBoard, ' ', ROW_MAX * COL_MAX * sizeof(char));
}

2.3.2 棋盘打印

void print(char chessBoard[ROW_MAX][COL_MAX], int row, int col)
思路:这个地方要考虑到打印我们的棋盘,否则全是空格就看不到任何输出。

void print(char chessBoard[ROW_MAX
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值