小游戏实现——三字棋(纯随机落子)

本文是一名C语言初学者分享的编程项目,他用C语言实现了三子棋游戏。游戏规则简单,双方轮流在3x3棋盘上下棋,先连成一线者获胜。作者详细介绍了游戏的编写过程,包括棋盘创建、玩家与电脑下棋功能、胜负判断以及游戏流程控制。通过这个项目,作者提升了编程技能和逻辑思维能力。
摘要由CSDN通过智能技术生成

目录

一、前言

二、游戏介绍

三、编写过程

1、建立游戏大体选择框架

 2、游戏主体

(1)、棋盘的创建打印与重置

(2)、编写玩家下棋和电脑下棋功能

(3)、判断是否结束功能

(4)、实现轮流下棋与判断输赢功能

四、感想


一、前言


        大家好,我是一名C语言初学者,在这篇博客中,我想和大家分享一下我学习C语言过程中编写的一个小项目——三子棋游戏。希望能对其他C语言初学者有所帮助。

二、游戏介绍



        首先,让我们来了解一下三子棋游戏的规则。三子棋是一种简单的棋类游戏,它由一个3x3的棋盘和两个玩家组成。每个玩家轮流在棋盘上放置自己的棋子,目标是在横向、纵向或对角线上先形成一条连线,即获得胜利。如果棋盘填满,但没有任何一方获胜,则为平局。

三、编写过程


接下来,我将介绍一下我是如何使用C语言来实现这个小游戏的。

1、建立游戏大体选择框架

        首先,使用“do while”循环语句建立起游戏的大体框架:打印游戏界面->选择开始或者退出->选错则给出反馈重新选择。 

void jiemian()//游戏界面
{
	printf("************************\n");
	printf("** 1.play * 2.out game**\n");
	printf("************************\n");
}


void test()//游戏界面选择
{
	int put = 0;
	do
	{
		jiemian ();
		scanf("%d", &put);
		switch (put)
		{
		case 1:
			printf("play game\n\n");
			break;
		case 2:
			printf("out game\n\n");
			break;
		default:
			break;
		}
	} while (put != 2);
}

 2、游戏主体

(1)、棋盘的创建打印与重置

        我创建了一个3x3的数组来表示棋盘(使用宏定义棋盘横竖的大小方便后期调整)。

        棋盘可使用二维数组创建,格式输出为自习喜欢的样子。棋盘初始化则需要单独的函数功能进行每个元素访问并赋值字符‘空格’;数组的每个元素可以取三种状态:玩家的棋子、电脑的棋子。我使用了字符常量来表示这些状态,例如‘ * ’表示玩家的棋子,‘ # ’表示电脑的棋子,‘空格’表示没有放棋子。
        然后,我编写了一个函数来打印当前的棋盘状态。我使用了嵌套的for循环来遍历数组,并根据每个元素的状态打印相应的字符。(检验当前代码是否有问题

(2)、编写玩家下棋和电脑下棋功能


        接下来,我编写了一个函数来获取玩家的输入。我使用了scanf函数来获取玩家输入的行和列,然后将玩家的棋子放置在对应的位置上。需要注意的是,我还要检查玩家的输入是否合法,即行和列的值是否在合法范围内,并且所选的位置是否为空。

        编写电脑下棋时可使用rand函数和srand函数详细功能大概为产生随机数和重置随机种子(详细功能请自行查找)。

/玩家下棋
void playrgame(char pan[hen][shu])
{
	int a = 0;
	int b = 0;
	while (1)
	{
		printf("玩家走:>");
		scanf("%d,%d", &a, &b);
		if ((a-1 <= hen && a-1 >= 0) && (b-1 >= 0 && b-1 <= shu))
		{
			if (pan[a - 1][b - 1] == ' ')
			{
				pan[a-1][b-1] = '*';
				break;
			}
			else
			{
				printf("已有棋子。");
			}
		}
		else
		{
			printf("请重新输入有效坐标!");
		}
	}
}
void compute(char pan[hen][shu])//电脑走
{
	while (1)
	{
		int x = rand() % hen;
		int y = rand() % shu;
	
		if (pan[x][y] == ' ')
		{
			pan[x][y] = '#';
			break;
		}
		else
		{
			;
		}
	}
}

(3)、判断是否结束功能


        然后,我编写了一个函数来判断游戏是否结束。我使用了一系列的if语句来检查当前的棋盘状态是否满足获胜条件。如果玩家获胜,我就返回相应的‘ * ’信息;电脑获胜,我就返回相应的‘ # ’。如果棋盘已经填满,但没有任何一方获胜,我就返回‘ o ’信息。

char panduan(char pan[hen][shu])//判断输赢:玩家赢返回“*”;电脑赢“#”;平局“o”
{
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		if (pan[i][0] == pan[i][1] && pan[i][2] == pan[i][1] && pan[i][1] != ' ')
		{
			return pan[i][0];
		}
		
	}
	for (i = 0; i < 3; i++)
	{
		if (pan[0][i] == pan[1][i] && pan[1][i] == pan[2][i] && pan[0][i] != ' ')
		{
			return pan[0][i];
		}
	}
	if (pan[0][0] == pan[1][1] && pan[1][1] == pan[2][2] && pan[0][0] != ' ')
	{
		return pan[0][0];
	}
	if (pan[0][2] == pan[1][1] && pan[1][1] == pan[2][0] && pan[0][2] != ' ')
	{
		return pan[0][2];
	}
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j == 0; j < 3; j++)
		{
			if (pan[i][j] == ' ')
				return 'o';
		}
		
	}
	return 'g';
}

(4)、实现轮流下棋与判断输赢功能


        最后,我编写了一个主函数来控制游戏的流程。我使用了一个循环来让两个玩家轮流下棋,直到游戏结束。每轮下棋后,我会打印当前的棋盘状态,并检查游戏是否结束。如果游戏结束,我就打印相应的胜利或平局信息,并结束游戏。(这里的变量ci记录进行的前两把不进行胜负判断

while (1)
	{
		static int ci = 1;
		playrgame(pan);//玩家下棋
		qipan(pan, hen, shu);//打印棋盘
		if (ci > 2)
		{
			g = panduan( pan,hen,shu);//判断输赢:玩家赢返回“*”;电脑赢“#”;平局“o”
		
			if ('*' == g)
			{
				printf("玩家赢!\n");
				break;
			}
			if ('#' == g)
			{
				printf("电脑赢!\n");
				break;
			}
			if ('g' == g)
			{
				printf("平局!\n");
				break;
			}
			if ('o' == g)
			{
				;
			}
		}
		compute(pan);//机器下棋
		qipan(pan, hen, shu);//打印棋盘
		if (ci > 2)
		{
			g = panduan(pan,hen,shu);//判断输赢:玩家赢返回“*”;电脑赢“#”;平局“o”
			if ('*' == g)
			{
				printf("玩家赢!\n");
				break;
			}
			if ('#' == g)
			{
				printf("电脑赢!\n");
				break;
			}
			if ('g' == g)
			{
				printf("平局!\n");
				break;
			}
			if ('o' == g)
			{
				;
			}
		}
		ci++;
	}

四、感想


        通过这个小项目,我学到了很多关于C语言的知识,例如数组的使用、循环和条件语句的应用等。同时,我也锻炼了自己的逻辑思维能力和编程能力。


        总结一下,这个三子棋游戏是我作为一名C语言初学者自己完成的一个小项目。通过这个项目,我不仅巩固了自己的C语言知识,还提高了自己的编程能力。希望我的经验可以对其他C语言初学者有所帮助。谢谢大家的阅读!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值