首页 > 其他分享 >猜数字游戏

猜数字游戏

时间:2024-10-01 11:53:48浏览次数:9  
标签:rand 游戏 int time 随机数 printf 100 数字

要求:1.生成1至100内的随机数

2.猜数字过程中,根据玩家所猜数字与随机数比较大小,给出猜大了或小了的反馈,直到猜对了结束游戏。

1.随机数的生成

猜数字游戏首先需要产生随机数

1.1rand函数

作用:可以生成随机数

int rand (void);

rand函数会返回一个伪随机值,范围在0~RAND-MAX之间,RAND-MAX依赖编译器,一般是32767。

注:rand使用时需要包含头文件 stdib.h

测试rand函数

#include <stdio.h>
#include <stdlib.h>
int main()
{
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

 运行结果如下

fe055a9aa5134a2bbebfb2b9e43c2b1c.png

 当我们运行多次,却发现结果都与上一次的一样,为什么呢?

我们深入了解发现,rand函数产生伪随机数,不是真正的随机数,是通过某种算法生成的随机数。而rand函数是对一个叫种子的基准值进行运算生成的随机数。

对于上述代码运行结果一样是因为rand的默认种子是1。

如果要生成随机数,就要让种子变化。

1.2srand函数

用于初始化随机数的生成器

void srand (unsigned int seed);

使用rand函数前先调用srand函数

通过设置srand函数的参数seed改变rand函数的种子。只要种子在变化,随机数也变化起来。

也就是说给srand的种子是随机的,rand就生成随机数。在生成随机数时又需要一个随机数,就互相矛盾了。

1.3time函数

在程序中我们一般将时间作为种子,因为时间是一直变化的。

time (timer);

time函数会返回当前日历时间,其实是返回1970年1月1日0时0分0秒与当前时间的差值,单位是秒。

time函数的参数timer如果是非NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存 中带回去。

如果timer是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。

注:time的使用需包含头文件time.h

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	srand((unsigned int)time(NULL));
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

 注意:srand函数只需要调用一次,无需频繁调用

1.4设置随机值的范围

如果我们要生成0~99之间的随机数,方法如下:

rand()%100;

 如果我们要生成1~100之间的随机数,方法如下:

rand()%100+1;

 如果我们要生成100~200之间的随机数,方法如下:

100+rand()%(200-100+1);

所以我们要生成a~b之间的随机数,方法如下:

a+rand()%(b-a+1);

2.猜数字游戏的实现

//猜数字游戏
//随机生成1至100间的数字
//若猜小了,输出猜小了;若猜大了,输出猜大了;若猜对了,输出恭喜你,猜对了!
//玩一次不过瘾,循环多次
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
//菜单
void menu()
{
	printf("--------------\n");
	printf("----1.play----\n");
	printf("----0.exit----\n");
	printf("--------------\n");
}
void game()
{
	int r = rand() % 100 + 1;//限制rand产生的随机值在1至100內
	int guess = 0;
	int count = 5;//只有五次机会
	while (count)
	{
		printf("开始游戏,你只有%d次机会,请猜数字:",count);
		scanf("%d", &guess);
		if (guess < r)
			printf("猜小了\n");
		else if (guess > r)
			printf("猜大了\n");
		else
		{
			printf("恭喜你,猜对了!随机数是%d\n", r);
			break;
		}
		count--;//每猜一次减少一次机会

	}
}
int main()
{
	srand((unsigned int) time(NULL));//使用srand改变rand的种子,time产生不一样的值
	int num = 0;
	do 
	{
		menu();//将菜单调出来
		printf("请选择;>");
		scanf("%d", &num);
		switch (num)
		{
		case 1:
			game();//与菜单同理
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入!\n");
			break;
		}
	} while (num);
	return 0;
}

 

 

标签:rand,游戏,int,time,随机数,printf,100,数字
From: https://blog.csdn.net/2401_86562710/article/details/142668630

相关文章

  • StarTowerChain:数字共享生态的引领者,共创美好未来
    在数字时代,共享经济已经成为一种趋势。StarTowerChain以其强大的共享经济模式,打造了一个全新的数字共享生态。在StarTowerChain的平台上,用户可以轻松地共享自己的资源,包括计算资源、存储空间、数据等。这种共享不仅可以提高资源的利用率,还可以为用户带来额外的收益。共享经......
  • 京东云金秋国庆上云服务器推荐(网站搭建,代码测试,企业官网,游戏联机服务器)
    轻量云主机是面向中小企业、开发者打造的预装精选软件、开箱即用的主机产品,快速搭建网站、电商、企业低代码工具箱,云盘、共享文档、知识库、开发测试环境等,相对普通云主机,按套餐购买更优惠、控制台可视化管理,运维更简单,提供更便捷上云体验。轻量云主机这个专区是本次活动的主......
  • C++在游戏开发中的卓越性能:优势解析与代码示例
    在游戏开发领域,C++一直是一种备受青睐的编程语言。它以其高性能、灵活性和强大的功能集,成为了游戏开发者的首选语言之一。在本文中,我们将深入探讨C++在游戏开发中的优势,并提供一些代码示例来展示这些优势是如何在实际开发中发挥作用的。高性能与低级控制C++提供接近硬件......
  • 踏上C++游戏开发之旅:初学者指南与实战代码
    游戏开发是一个充满挑战和创造力的领域,而C++作为其中的一种强大工具,为开发者提供了实现他们最狂野游戏创意的能力。如果你是一个初学者,想要开始学习C++游戏开发,那么这篇文章将为你提供一条清晰的学习路径和实用的代码示例,帮助你迈出第一步。1.基础知识:C++和计算机科学在......
  • 1068:与指定数字相同的数的个数 【printf和scanf的非常正常用法】
    【题目描述】输出一个整数序列中与指定数字相同的数的个数。输入包含2行:第1行为N和m,表示整数序列的长度(N<=100)和指定的数字;第2行为N个整数,整数之间以一个空格分开。输出为N个数中与m相同的数的个数。【输入】第1行为N和m,表示整数序列的长度(N<=100)和指定的数字,中间用一个空......
  • vcomp110.dll丢失怎样修复?游戏缺少vcomp110.dll解决方案
    vcomp110.dll是MicrosoftVisualC++RedistributablePackage的一部分,主要用于支持基于VisualStudio2012开发的应用程序中的C++视觉组件。当您尝试运行某些应用程序或游戏时,可能会遇到“vcomp110.dll丢失”或“找不到vcomp110.dll”之类的错误信息。这通常意味着该动态......
  • MATLAB数字水印系统
    课题介绍本课题为基于MATLAB的小波变换dwt和离散余弦dct的多方法对比数字水印系统。带GUI交互界面。有一个主界面GUI,可以调用dwt方法的子界面和dct方法的子界面。流程包括,读取宿主图像和水印图像,嵌入,多种方法的攻击(剪切,加噪,旋转等),提取,最后利用psnr峰值信噪比进行评价不同攻击......
  • 鹏哥C语言59-60---三子棋游戏
    //------------------------------------------------------5. 数组实现(游戏)-----------------------------------------//----------------------------------------------------5.1利用数组实现三子棋----------------------------------------//分块 test.c  ......
  • 基于HTML、CSS和JavaScript的滚动数字显示效果,类似于老式计数器或电子表上的数字滚动
    这段代码实现了一个基于HTML、CSS和JavaScript的滚动数字显示效果,类似于老式计数器或电子表上的数字滚动效果。以下是代码的详细解释说明:HTML结构基础设置:<!DOCTYPEhtml> 声明文档类型为HTML5。<htmllang="en"> 指定文档语言为英文。<metacharset="UTF-8"> 和......
  • 南沙C++信奥赛陈老师解一本通题: 1963:【13NOIP普及组】小朋友的数字
    ​ 【题目描述】有 nn 个小朋友排成一列。每个小朋友手上都有一个数字,这个数字可正可负。规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值。作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这样规定的:......