【小白系列】C语言 猜数字游戏

目录

1.前言

2.编写思路

3.代码实现

3.1菜单代码

3.2游戏代码

3.2-1 rand函数

3.2-2 srand 函数

3.2-3 time函数

4.注意事项

5.完整的猜数字游戏代码展示

6.结语



1.前言

 猜数字游戏游戏是一个简单有趣的游戏,相信大家在现实也会有一起玩过。通过一些简单的C语言代码,就能实现这个游戏。赶紧来看看吧!

2.编写思路

 首先作为一个小游戏,点开程序的时候就应该先玩一次,完成一次游戏后可以再选择玩或者不玩。那么由此我们想到了do while 循环作为起始语句。

其次需要一个菜单来提示玩家进行继续或结束游戏的提示,我们选择用简单的函数来实现。

接着玩家会不断地进行猜数字,程序需要告诉玩家猜大了还是猜小了。

最后玩家猜中数字,根据菜单来决定是否进行下一次游戏。

3.代码实现

 根据编写思路,我们可以简单构造出一个大体框架。

#include <stdio.h>
int main()
{
	int input = 0;
	do
	{
        //编写一个菜单函数
		nemu();
		printf("请选择:>");
		scanf("%d", &input);
        //根据玩家选择是否需要继续游戏
		switch (input)
		{
		case 1:
			printf("开始游戏\n");
			game();
			break;
		case 0:
			printf("游戏结束");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
    return 0;
}

接下来就是game函数的编写与nemu函数的编写,来充实我们游戏的主体内容。

3.1菜单代码

nemu函数起到一个提示玩家选择的作用,用printf即可实现,由于不需要返回值,所以nemu的类型是void。具体如下

void nemu()
{
	printf("***********************************\n");
	printf("***********   1.play   ************\n");
	printf("***********   0.exit   ************\n");
	printf("***********************************\n");
}

3.2游戏代码

进入game函数后,我们需要程序生成一个随机数。然后玩家再去猜这个随机数。

那么程序如何实现每一次都生成一个完全随机的数字呢?

3.2-1 rand函数

rand函数需要引用<stdlib.h>才可以使用,功能随机生成一个数。那么这个数的范围是多少呢?答案是(0~32767)。我们的游戏不可能需要玩家猜那么大的数字!于是在使用rand函数后应该模上一个数,来圈定随机数的范围。

void game()
{
	//随机数命名为num  
	int num = 0;
	printf("请在0~100之间猜一个数字\n");
	num = rand() % 100 + 1;
	//此时num的范围在0~100
	while (1)
	{
        //玩家猜的数字k
		int k = 0;
		scanf("%d", &k);
		if (k < num)
			printf("猜小了\n");
		else if (k > num)
			printf("猜大了\n");
		else if(k = num)
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

用while即可实现之前我们所说的循环猜数字的功能,合理用break来打破循环,若不达到条件,则不会执行break语句,从而可以一直循环。while(1)这么写还是十分常见且实用的!

但是也存在一个问题,仔细调试的小伙伴们会发现,虽然程序中每次的随机数不同,但是再次打开程序,与上一次打开程序时,程序生成的随机数是相同的。                                                             

 那么这个猜数字小游戏在玩过一次后,就已经失去了随机性和趣味性。那么我们该怎么解决这个问题呢?我们不妨先去了解一下rand函数!!

 

 看得懂最好,看不懂也没关系。

总的来说rand函数使用之前,需要先调用srand函数来重置随机生成数起点。这样就能保证每一次打开程序所生成的随机数真正随机。

3.2-2 srand 函数

 *由于文章是面向小白,所有srand函数不会过多介绍。*

调用srand函数需要引用头文件<stdlib.h>功能重置随机生成数起点。需要注意的是srand()括号内需要一个unsigned int 类型的数值。如果括号内我们设置成常量。那么每次生成随机数的起点都会相同,同样达不到完全随机的效果。

void game()
{
    srand(1);
	//随机数命名为num  
	int num = 0;
	printf("请在0~100之间猜一个数字\n");
	num = rand() % 100 + 1;
	//此时num的范围在0~100
	while (1)
	{
        //玩家猜的数字k
		int k = 0;
		scanf("%d", &k);
		if (k < num)
			printf("猜小了\n");
		else if (k > num)
			printf("猜大了\n");
		else if(k = num)
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

所以我们需要一个每时每刻都在变化的一个变量,来放到srand的括号里,保持rand函数每一次的起点都不一样,才能真正达到完全随机的效果。

3.2-3 time函数

time函数,也叫时间戳 ,需要引用头文件<time.h>。这里介绍一下什么是时间戳:我们现实每一个时间与系统初始时间的差值叫做时间戳。时间戳是一串数字,一串无时无刻都在变的数字,这串数字可以转化成现实中的时间。知道这些,我们的问题也就能解决了!

void game()
{
srand((unsigned int)time(NULL));

	//随机数命名为num  
	int num = 0;
	printf("请在0~100之间猜一个数字\n");
	num = rand() % 100 + 1;
	//此时num的范围在0~100
	while (1)
	{
		int k = 0;
		scanf("%d", &k);
		if (k < num)
			printf("猜小了\n");
		else if (k > num)
			printf("猜大了\n");
		else if(k = num)
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

time()函数的返回类型是time_t,之前有提到srand()括号内需要一个unsigned int类型的变量,于是我们在time()前面加上(unsigned int)来强制转换数据类型。

另外time()括号里需要一个指针变量。但是我们不需要这个指针变量,只需要他生成的随机数,所以time()括号内可以放NULL空指针。

这样,rand()函数就可以真正的做到完全随机!game函数的功能也完全齐全!

4.注意事项

 srand函数只需要调用一次,如果每次使用rand函数前都调用srand函数,在循环足够快的情况下,还是有可能出现与srand()括号内放常量的那种重复情况!!!

5.完整的猜数字游戏代码展示

#include <time.h>
#include <stdlib.h>
#include <stdio.h>


void nemu()
{
	printf("***********************************\n");
	printf("***********   1.play   ************\n");
	printf("***********   0.exit   ************\n");
	printf("***********************************\n");
}
void game()
{
srand((unsigned int)time(NULL));

	//随机数命名为num  
	int num = 0;
	printf("请在0~100之间猜一个数字\n");
	num = rand() % 100 + 1;
	//此时num的范围在0~100
	while (1)
	{
		int k = 0;
		scanf("%d", &k);
		if (k < num)
			printf("猜小了\n");
		else if (k > num)
			printf("猜大了\n");
		else if(k = num)
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}
int main()
{
	int input = 0;
	do
	{
		nemu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("开始游戏\n");
			game();
			break;
		case 0:
			printf("游戏结束");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
    return 0;
}

6.结语

 此次示例代码仅写出猜数字游戏的核心功能,且引用的各种函数讲解也不是很透彻。希望有兴趣的小伙伴可以继续完善游戏代码,写出属于自己的功能更完备的猜数字游戏!!

最后还是请大家多多支持,点赞,关注,收藏!!!

https://cplusplus.com/reference/  ps:这个是查阅rand函数时博主使用的网站,可以收藏一下哦!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Laxinues

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

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

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

打赏作者

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

抵扣说明:

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

余额充值