C语言实现猜数字小游戏

这篇博客介绍了如何使用C语言编写一个简单的猜数字游戏。游戏逻辑包括设置开始选项、生成随机数以及用户猜数。重点讨论了rand函数生成伪随机数,并通过srand和time(NULL)结合来获取更随机的效果。博主强调了时间戳作为随机数种子的优势,确保了每次运行游戏时的随机性。代码中包含了详细注释,便于理解。
摘要由CSDN通过智能技术生成

先给上代码:(加sleep函数纯粹为了好玩)

#define _CRT_SECURE_NO_WARNINGS 1

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

void menu()
{
	printf("*************************************************************\n");
	printf("******************* 开始(请输入1)****************************\n");
	printf("******************* 退出(请输入0)****************************\n");
	printf("*************************************************************\n");
}

//rand的函数16进制代码:0x7fff,说明rand给出的随机数是0~32767(转换为十进制)

void game()
{
	int ret = 0;//1.生成一个随机数
	//拿时间戳来设置随机数的生成起始点
	//time_t
	//问题:计算机只能生成伪随机数,即离散型随机数,所以我们应当找到一个随时都在变化的量
	//这个量就是时间戳
	ret = rand()%100+1;
	Sleep(500);
	printf("随机数已生成完毕\n");
	int guess;//1.生成一个随机数,1至100
	//printf("%d\n", ret);
	//2.猜数字:
	Sleep(500);
	while (1)
	{
		printf("请猜数字:");
		scanf("%d", &guess);
		if (guess > ret)
		{
			Sleep(500);
			printf("猜大了\n");
		}
		else if (guess < ret)
		{
			Sleep(500);
			printf("猜小了\n");
		}
		else
		{
			Sleep(500);
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}


int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//放在主函数里面防止频繁调用
    menu();
	printf("请选择:");
	scanf("%d", &input);
	do {
		switch (input)
		{
		case 1:
			game();//游戏本体
			break;
		case 0:
			break;
		default:
			printf("出现错误,请重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

这个猜数字小游戏代码的整体逻辑是较简单的:

1:设置游戏开始项

2:设置一个随机数

3:用户开始猜数

4:简单的while+if语句完成游戏主过程

但重点是第二步:我们如何让电脑生成随机数?

首先想到的是rand函数,这个函数可以在默认0~32767范围内生成随机数,

但这种随机数严格意义上来说并不是真正完全随机的数,而是伪随机数

rand的函数16进制代码:0x7fff,说明rand给出的随机数是0~32767(转换为十进制)

要想创造在短时间内使正常人无法探测到的循环规律,那就可以引入一个随时可以变化的量,来使rand函数变化规律无法被轻易观测;

这里就引入了时间戳:表示距离时间(1970-1-1, 00:00:00)的秒数(在Linux系统下)

时间戳是一直在不断改变的量

要想使用时间戳,我们要调用一个库函数srand:

void srand(unsigned int seed)

seed是种子

在这里只给出最简单的写法:srand((unsigned int)time(NULL))

并将srand函数放在主函数里面调用:防止srand仅根据时间顺序改变。

最后,C语言实现猜数字小游戏的核心其实是随机数的生成

如有错误或者更好的方法,欢迎在评论区指出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值