c语言——简单实现三子棋游戏

今天和大家分享用C语言简单实现三子棋游戏的思路和代码实现。

目录:

一.思想

二.代码实现

1.主函数模板 

2.菜单函数

3.思考游戏逻辑

4.棋盘实现

5.玩家下棋

6.电脑下棋

7.判断输赢

8.组合模块

9.细节提及

一.首先讲讲大致思路,对于相对复杂一些的项目,通常采用拆分思想,先理出大方向的模块,再将细节拆分,最后组合。

二.接下来是代码实现和详细思路

1.主函数模板

int main()
{
	int input;
	do
	{
		menu();//菜单界面
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)//多项选择选用switch语句
		{
		case 1:
			game();//进入游戏(游戏函数)
			break;
		case 0:
			printf("退出游戏!");
			break;
		default:
			printf("选择错误,请重新选择!");
			break;
		}

	} while (input);
}

do-while语句十分适合这种类似的游戏板块,先执行一次,再进行判断。

2.菜单函数如下(简单打印)

 

3.思考游戏逻辑

三子棋又叫井字棋,如上图,我们需要在空格中填充棋子,根据已有的知识,我们可以用二维数组来实现空格及井字格的实现。

棋盘就位,接下来是下棋板块。由于是简单三子棋,我们就实现玩家与电脑对位。

玩家:选择位置下子

电脑:选择位置下子

最后判断输赢

大致逻辑如上。

4.棋盘实现

 首先是棋盘的实现(或者说二维数组的初始化及展示),空格及井字打印。具体按照一行一行打印,需要注意的是ROW(行)和COL(列),在代码量较多时,使用define定义标识符常量(#define ROW 3),代码如下:

 

 5.玩家下棋

下棋本质来说是对二维数组的赋值,

大方向没问题,接下来就是细节的实现,关键判断是否能下子,再进行赋值,以下为代码:

 6.电脑下棋

对于电脑落子,我们选择简单的随机数生成实现--rand()等,可参考
https://cplusplus.com/,这个网站可以查看各类函数的具体解释,代码如下:

 7.判断输赢

具体有玩家赢,电脑赢,平局。输赢的判断很简单,三子相连,一一判断即可,重点是平局的判定。

输赢判断,代码如下:

 接下来是平局判断,关键是平局条件--下满棋子,代码如下:

 

 8.组合模块

组合模块主要是游戏逻辑的实现,也就是怎样完成一局游戏,代码如下:

void game()
{
	char ret = 0;
	char board[ROW][COL];
	//开始的时候,数组的内容应该是全部空格
	InitBoard(board, ROW, COL);
	DisplayBoard(board, ROW, COL);
	//下棋
	while (1)
	{
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//判断输赢
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
		ComputerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//判断输赢
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
	}
	if (ret == '*')
	{
		printf("玩家赢\n");
	}
	else if (ret == '#')
	{
		printf("电脑赢\n");
	}
	else
	{
		printf("平局\n");
	}


}

9.细节提及

关于函数返回值,我们对整体分析完后,发现函数返回值如“*”,“#”等都是刻意设计的,为了方便逻辑清晰和代码优化,我们平常处理时,也可以注意一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值