【C语言五子棋、三子棋人机对战篇的详细介绍】

C语言——五子棋、井字棋人机对“战”

针对 “【C语言实现五子棋、三子棋人机对战,包含电脑人工智能对战(可攻可守)】(非标题党)” 的详细介绍



前言

本文会对这篇文章进行分解详细介绍:【C语言实现五子棋、三子棋人机对战,包含电脑人工智能对战(可攻可守)】(非标题党)
内容有点繁杂,大家可以按照目录,依据个人需要查阅内容。


一、整体思路game( )

其实整体思路可以直接参照game函数,已经很清楚地罗列了每一步:
对于随机数生成器不太熟悉的伙伴们,可以自行查阅srand()、time()、rand()库函数,srand()、rand()函数通常是一起使用的,srand()就是用来设置随机数种子的函数,rand()就是用来产生随机数的函数。time()函数使得以现在的系统时间作为随机数的种子来产生随机数 之所以把srand()函数放这,而不是和rand()函数放一起,是担心程序运行过快,产生的随机数都是同一个。
srand((unsigned int)time(NULL));
int z = rand() % k

//游戏实现
void game()
{
   
	//设置随机数的生成器,这一步是与computer_think()中的int z = rand() % k;对应
	srand((unsigned int)time(NULL));
	//存储数据 - 二维数组
	char board[ROW][COL];
	//初始化棋盘 - 初始化空格
	board_init(board, ROW, COL);
	//打印一下棋盘
	board_display(board, ROW, COL);
	char ret = 0;

	while (1) 
	{
   
		//玩家下棋
		PlayerMove(board, ROW, COL);
		//清屏
		system("cls");
		board_display(board, ROW, COL);
		//判断游戏输赢
		ret = board_wolf(board, ROW, COL);
		if (ret != 'C')
			break;

		//电脑下棋
		printf("对方正在下棋......\n");
		Sleep(1000);//让电脑假装思考
		ComputerMove(board, ROW, COL);
		//清屏
		system("cls");
		board_display(board, ROW, COL);
		//判断游戏输赢
		ret = board_wolf(board, ROW, COL);
		//C是游戏继续,在判断平局isfull函数中出现
		//此行就是说ret不是游戏继续的情况,就结束循环
		if (ret != 'C')
			break;
	}
	switch (ret)
	{
   
	//正好是玩家棋子的字符
	case 'O':
		printf("玩家赢了\n");
		break;
	//正好是电脑棋子的字符
	case 'X':
		printf("电脑赢了\n");
		break;
	case 'Q':
		printf("平局\n");
		break;
	}
}

二、函数实现

1.棋盘初始化board_init( )

首先将棋盘初始化为空字符,给我们的棋子留下可落子坐标,其中棋盘大小可通过更改game.h头文件中宏定义的ROW(行),COL(列)来更改棋盘的大小。实现:将二维数组board初始化为空字符。

void board_init(char board[ROW][COL], int row, int col)
{
   
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
   
		for (j = 0; j < col; j++)
		{
   
			board[i][j] = ' ';
		}
	}
}

2.打印棋盘board_display( )

假设棋盘大小为10×10。棋盘是由一行( %c |)循环10次,一行(———|)循环10次,这两行×10组成。
不清楚我在说什么就看下图:

在这里插入图片描述
在这里插入图片描述
注意:每输入一行“ %c | %c | %c | %c | … | %c ”就在末尾添加上数字,方便玩家使用时看横坐标。 对应代码已在下方

void board_display(char board[ROW][COL], int row, int col)
{
   
	int i = 0;
	int k = 1;
	for (i = 0; i < row; i++)
	{
   
		int j = 0;
		for (j = 0; j < col; j++)
		{
   
		    //同上面介绍一样,一个空字符 + 棋子 + 一个空字符
			printf(" %c ", board[i][j]);
			//忽略最后一组" %c |"的 "|"
			if (j < col - 1)
			{
   
				printf("|");
			}
		}
	    //给最右侧一列加上行数,方面玩家输入坐标
	    //每输入一行"( %c |) × 10"就在末尾加上一个数字
		printf(" %d", k);
		k++;
		//每输出一行都要加上\n回车
		printf("\n");
		if (i < row - 1)
		{
   
			int j = 0;
			for (j = 0; j < col; j++)
			{
   
			    //输出三个短横一个竖杠的组合---|,且忽略最后最后一组的 | 
				printf("———");
				if (j < col - 1)
				{
   
					printf("|");
				}
			}
			printf("\n");
		}
	}

	//给最后一行加上列数,方便玩家输入坐标
	int z = 0;
	//从1~10
	
  • 27
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
五子棋是一种相对简单的棋类游戏,可以用C语言来实现人机对战的功能。 首先,我们需要定义一个棋盘的二维数组来表示游戏界面,可以选择一个15×15的大小。用1代表玩家落子的地方,用2代表电脑落子的地方,用0代表空白的地方。 接下来,需要编写一个函数来打印当前的棋盘状态。可以使用循环来遍历棋盘数组,并根据不同的值输出对应的符号,比如打印X表示玩家落子,打印O表示电脑落子,打印空格表示空白的位置。 然后,需要编写一个函数来实现玩家的落子功能。可以通过向控制台读取玩家的输入来确定落子的位置,然后将相应的棋盘数组位置修改为1。 接着,需要编写一个函数来实现电脑的落子功能。可以使用一种简单的算法来确定落子的位置,比如随机选择一个空白位置来落子,并将对应的棋盘数组位置修改为2。 最后,还需要编写一个函数来检查游戏是否结束。可以通过遍历棋盘数组来检查是否有五个相连的棋子。可以编写多个检查函数,分别检查横向、纵向、左上到右下、右上到左下四个方向是否存在五连子。 在主函数中,可以通过循环来控制游戏的进行,每个循环中先打印当前的棋盘状态,然后让玩家落子,再检查游戏是否结束,如果没有结束则让电脑落子,再次检查游戏是否结束。 以上就是用C语言实现简易五子棋人机对战的基本思路,可以根据需要进行进一步的功能扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

afool�‍♂️

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值