C语言实现《猜数字游戏》

目录

前言:

(一)制作菜单:

1.关于菜单

2.编写菜单:

3.调用菜单并选择:

(二)进行游戏:

1.为什么在这里要调用函数?

2.game()函数的实现

3.关于随机数:

srand函数:

总代码:

总结:


前言:

我们都知道,对于制作游戏,甚至说对于游戏开发,在市面上我们偏向采取运用C++来实现代码运作功能以及交互模块,并且运用类似easy_X等图形库来实现人物对象的塑造。为什么更愿意使用C++制作开发游戏而不是运用C语言或者C#等语言来制作游戏呢,其本质还是属C++是一门面向对象的开发语言,其对于对象的封装和实例化有着比C语言和C#更高效的方法,更高效的制作,这对于开发成本有着显著的下降。

而今天实现的《猜数字游戏》,可以不需要运用对象的封装和实例,就可以基本实现。并不是说C语言只能制作诸如此类这些简单游戏,而是借用《猜数字游戏》可以引用到游戏中的基本元素,对以后的游戏开发可以高效简洁的实现,让玩家一目了然,玩得尽兴。

关于猜数字游戏先解释标准规则,再介绍几种变体。

通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4个数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。

而今天的猜数字游戏,我们以一种更简单的方法来玩。

系统给定一个1——100的数字,玩家来随机猜任何一个1——100以内的数,系统判断是否匹配,如果猜的数大于,就打印“大了”,如果小了,就打印“下了”,如果正确,就打印“正确”。

(一)制作菜单:

1.关于菜单

对于每一个游戏,我们都不会一上来就给玩家呈现游戏内容,而是给玩家提供菜单,一般包括:

“开始新游戏”、“读取存档”、“选项”还有“退出游戏”,可能还会加上介绍制作游戏的团队名称以及团队成员。因此,提供一份简洁高效的菜单是必不可少的。

2.编写菜单:

void menu()
{
    printf("****************************\n");
    printf("********* 1.Play ***********\n");
    printf("********* 0.Exit ***********\n");
    printf("****************************\n");
}

以上是运用C语言实现的最简单的菜单打印,包含“玩游戏”的实现,以及“退出游戏”的代码实现,以我的观点来看,我认为一个最基本的菜单,务必要实现“开始游戏”“退出游戏”两个模块,这样可供玩家选择什么时候开始游戏,当玩完后可以选择直接退出游戏。

但是这仅仅只是一个函数的实现,那在主函数里我们应该如何调用这个菜单函数呢?

3.调用菜单并选择:

在主函数里,我们可以先创建一个input变量,这个input变量可以用来输入1或者0,当输入0时我们退出游戏,输入1时我们开始游戏。因此在这里,我们可以选择do..while循环和switch语句来帮助我们实现调用菜单并选择。

#include<stdio.h>
int main()
{
	int input = 0;
	menu();
	do
	{
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 0 :
			printf("\n正在离开游戏....\n");
			break;
		case 1:
			printf("\n猜数字...\n");
			game();
			break;
		default:
			printf("\n请重新输入...\n");
		}
	} while (input);
	return 0;
}

以上是我们在main函数里实现调用菜单函数以及选择语句。

现在我们可以看到,为什么在菜单里面我们用输入0来表示退出游戏,而不是用2、3、4等来接收,因为当我们把input输入为0时,switch语句就会自动结束,而do...while循环也会就此结束。

(二)进行游戏:

case 1:
            printf("\n猜数字...\n");
            game();
            break;

我们在case 1语句中,调用了一个game()函数,我们在对于这么简单的游戏操作,为什么我们不直接在main函数里面实现代码操作,而是另开一个函数去调用呢?这样多出几行代码,不会更复杂吗?

1.为什么在这里要调用函数?

如果我们直接在main函数里面实现全部代码过程,这样会使得我们的代码冗杂,代码健壮性低,而如果我们使用函数,就可以将main函数里的代码量进行缩短,在我们以后想要执行命令时,就可以直接调用函数,这样就不会再写一次,将代码变得冗长。

2.game()函数的实现

void game()
{
	int n = 0;
	printf("请输入你要猜的数字:");
	int num = rand() % 100;
	int count = 1;
	while (1)
	{
		scanf("%d", &n);
		if (num > n)
		{
			printf("小了\n");
		}
		else if (num < n)
		{
			printf("大了\n");
		}
		else
		{
			printf("猜对了!!!\n");
			if (count <= 5)
			{
				printf("\n用了%d次就猜对了,真厉害!\n", count);
			}
			else
			{
				printf("\n菜\n");
			}
			break;
		}
		count++;
	}
		
}

以上就是game()函数所实现的内容,在while(1)的死循环中实现猜数字游戏,这样猜错了就可以一直猜一直猜。而运用if条件语句实现这个代码的底层逻辑,“如果大了”就打印大了,“如果小了”就打印小了,“如果相等”就打印猜对了。

3.关于随机数:

随机数rand()是C语言库里面自带的一个生成随机数的库函数,但是在这里我们要生成100以内的随机数,因此我们将rand()%100,这样就可以实现100以内的数了。

我们都知道,如果我们只是引用rand()函数,这样是可以产生随机数,但是我们产生的随机数是固定的,这样我们就知道计算机产生的“随机数”了。所以我们利用一个时时刻刻发生变化的量,就可以彻彻底底的解决随机数这个问题了。

srand函数:

以上是srand的定义,“Initialize random number generator”的意思是“初始化随机数生成值”。

srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用time(0)的返回值或NULL来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。"相同的种子对应相同的数值"。

所以我们在这里引入了一个概念——————时间戳(time())

我们利用时间函数time()来计算时间和秒数。

此函数会返回从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起到现在所经过的秒数。如果t 并非空指针的话,此函数也会将返回值存到t 指针所指的内存。

所以就有了以下的代码

	srand((unsigned int)time(NULL));

将这串代码放在main函数里,还应当包含头文件。

#include<stlib.h>
#include<time.h>

这样生产的随机数,才是真正的随机数。

总代码:

#define _CRT_SECURE_NO_WARNINGS  1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void game()
{
	int n = 0;
	printf("请输入你要猜的数字:");
	int num = rand() % 100;
	int count = 1;
	while (1)
	{
		scanf("%d", &n);
		if (num > n)
		{
			printf("小了\n");
		}
		else if (num < n)
		{
			printf("大了\n");
		}
		else
		{
			printf("猜对了!!!\n");
			if (count <= 5)
			{
				printf("\n用了%d次就猜对了,真厉害!\n", count);
			}
			else
			{
				printf("\n菜\n");
			}
			break;
		}
		count++;
	}
		
}

void menu()
{
	printf("****************************\n");
	printf("********* 1.PLAY ***********\n");
	printf("********* 0.EXIT ***********\n");
	printf("****************************\n");
}

int main()
{
	int input = 0;
	menu();
	srand((unsigned int)time(NULL));
	do
	{
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 0 :
			printf("\n正在离开游戏....\n");
			break;
		case 1:
			printf("\n猜数字...\n");
			game();
			break;
		default:
			printf("\n请重新输入...\n");
		}
	} while (input);
	return 0;
}

总结:

对于猜数字游戏,我们首先应当打印菜单,并且要用函数的方式实现菜单的打印,并利用do...while循环和switch语句来实现菜单的选择。

在生成随机数方面,要用到srand((unsigned int) time(NULL));

还要记得包含头文件。

以上就是怎样运用C语言实现《猜数字游戏》的全过程。

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无双@

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

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

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

打赏作者

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

抵扣说明:

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

余额充值