C语言五子棋游戏实现(三子棋进阶)

欢迎来到 Claffic 的博客 💞💞💞

前言:

往期给大家介绍了用C语言实现三子棋,今天我将在三子棋的基础上升级为五子棋,来跟着阿C看看吧。

注:建议先学会写三子棋,可以看我的往期博客 C语言三子棋游戏实现(基础版)

初学C语言的小伙伴放心食用~~~ 


目录

❤️1.巧用宏定义

🧡2.打印棋盘

💛3.输赢判断


进阶要求:

自定义棋盘大小

更普遍的输赢判断方法 

1.巧用宏定义

像这样的就是宏定义:

#define ROW 3
#define COL 3

宏定义最大的好处是“方便程序的修改”,使用宏定义可以用宏代替一个在程序中经常使用的常量

使用宏定义之后,我们就可以一键修改经常使用的常量,如:

char board[ROW][COL];
init_board(board, ROW, COL);
print_board(board, ROW, COL);

这为经常使用的常量的修改提供了便利。

2.打印棋盘

先来回顾下往期是如何打印棋盘的:

void print_board(char board[3][3], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		printf(" %c | %c | %c \n",board[i][0], board[i][1], board[i][2]);
		if(i<row-1)
			printf("---|---|---\n");
	}
}

因为往期明确是 3*3 的棋盘,所以只对棋盘进行了简单的拆分,与 row , col 变量关系不是很密切,灵活度不高;

而自定义棋盘意味着更高的灵活度,自然要对棋盘进一步拆分并加强与 row , col  变量的关系。

 

第一部分:

1看作整体 3 ,最后一个整体没有 2

第二部分:

与第一部分类似

上代码:

void print_board(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		//printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
		int j = 0;
		for (j = 0; j < col; j++)
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
				printf("|");
		}
		printf("\n");
		if (i < row - 1)
		{
			//printf("---|---|---\n");
			for (j = 0; j < col; j++)
			{
				printf("---");
				if (j < col - 1)
					printf("|");
			}
			printf("\n");
		}
	}
}

这里定义行和列为 9 ,展示:

是不是妙哉~

 3.输赢判断

增加了棋盘的格子数,五子连珠的种类大幅增加,显然不能像三子棋那样穷举,我们需要一种更普遍的判断方式,就是引入函数。

这里 i >=2 , j >= 2 ;

以 (i , j) 为中心展开,用坐标表示其他相关位置,这样就很轻易得到判断标准:

int i = 2;
for (i = 2; i < row; i++)
{
	int j = 2;
	for (j = 2; j < col; j++)
	{
	    if (board[i][j] != ' ' && board[i][j-2] == board[i][j-1] && board[i][j-1] == board[i][j] && board[i][j] == board[i][j+1] && board[i][j+1] == board[i][j+2])
			{
				return board[i][j];
			}
	}
}
for (i = 2; i < row; i++)
{
	int j = 2;
	for (j = 2; j < col; j++)
	{
		if (board[i][j] != ' ' && board[i-2][j] == board[i-1][j] && board[i-1][j] == board[i][j] && board[i][j] == board[i+1][j] && board[i+ 1][j] == board[i+2][j])
			{
				return board[i][j];
			}
	}
}
for (i = 2; i < row; i++)
{
	int j = 2;
	for (j = 2; j < col; j++)
	{
		if (board[i][j] != ' ' && board[i-2][j-2] == board[i-1][j-1] && board[i-1][j-1] == board[i][j] && board[i][j] == board[i+1][j+1] && board[i+1][j+1] == board[i+2][j+2])
			{
				return board[i][j];
			}
	}
}
for (i = 2; i < row; i++)
{
	int j = 2;
	for (j = 2; j < col; j++)
	{
		if (board[i][j] != ' ' && board[i-2][j+2] == board[i-1][j+1] && board[i-1][j+1] == board[i][j] && board[i][j] == board[i+1][j-1] && board[i+1][j-1] == board[i+2][j-2])
	  	    {
				return board[i][j];
			}
	}
}

代码已上传至 我的Gitee.


总结:

这篇博客内容比较简单,算是对往期三子棋游戏实现的补充, 其中巧用宏定义是重要知识点,掌握了它,以后写代码就可以事半功倍哦。

如果你觉得这篇文章还不错并且对你有帮助,不妨支持一波哦  💗💗💗

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Claffic

赏包辣条~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值