C语言-猜数字小游戏

为了完成这个简单的小游戏,我们首先需要解决的问题是如何获得一个随机数

c语言提供了一个函数rand(需包含头文件stdlib.h可以生成随机数,但使用rand生成随机数取决于一个叫做“种子”的东西,而种子在未被设定的情况下为默认值1,这样就会导致rand每次生成的随机数其实是固定,也就是伪随机数,并不能达到我们想要的效果,这时c语言又提供了一个可以设定种子的函数srand,在调用rand前先调用srand设定种子,只要种子是随机的那么rand生成的数也就是随机的了,如何获得一个随机的种子呢,时间是在一直变化着的,因此在程序中我们一般使用程序运行的时间作为种子,这样我们的种子就是一直变化着的随机值了,时间的运用c语言中调用的是time函数(需包含头文件time.h)当该函数的参数为NULL时返回的是一个时间的差值(时间戳)将时间戳进行强制类型转换为srand的参数类型(unsigned int)即可作为随机种子,进而通过rand生成获得我们想要的真正的随机数,通过对rand运算还可以设置随机数的范围。

以生成一个1~100的随机数为例,代码如下:

也不要忘记头文件哦!

接下来任务就相对基础了,先整一个piu亮的菜单,这里直接定义了一个menu函数,在后面如需反复运用菜单时会更加的方便;

然后我们来设计主程序,为实现菜单中按1开始游戏按0退出游戏的目的,可以使用一个swich语句,scanf输入变量x,为1时运行game函数开始游戏,为0时退出游戏,当输入其他错误数字时也会给出相应提示,同时为实现多次游戏,可以使用do-while循环,当一局游戏结束时再输入1可通过循环进入下一局游戏;

最后我们来设计游戏本体game函数,获得随机数>>开始游戏,运用的都是一些简单的循环和判断,详细请看图片,这里就不多赘述啦~

完整代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h> 
void menu()
{
	printf("********************\n");
	printf("*** 猜数字小游戏 ***\n");
	printf("*** 开始游戏(1)***\n");
	printf("*** 退出游戏(0)***\n");
	printf("********************\n");
}
void game()
{
	srand((unsigned int)time(NULL));  //通过时间戳获得一个随机种子
	int a = 1 + rand() % 100;         //获得随机数a并且范围是1~100
	int b = 0; 
	int y = 8;
	printf("游戏开始\n");
	while (y!=0)
	{
		printf("你还有%d次机会\n",y);
		scanf("%d", &b);
		if (a > b)
			printf("猜小了\n");
		else if (a < b)
			printf("猜大了\n");
		else
		{
			printf("猜对啦!数字是:%d\n",a);
			break;
		}
		y--;
		if (y == 0)
			printf("你输了,数字是:%d\n", a);
	}
	printf("本局游戏结束\n");
	menu();
}
int main()
{
	int x=0;
	menu();
	do
	{
		scanf("%d", &x);
		switch (x)
		{
		case 1:
			game();
			break;
		case 0:
			printf("Bye~\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (x);
	return 0;
}

c语言小白,博客小白,第一次完整地完成了一篇属于自己的博客,两个多小时的成果,如果有问题的话欢迎指出哦,如果对你有帮助的话可以给我一个赞嘛~我会继续加油哒!(^▽^ )

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值