随机数的生成之猜数字游戏(详解)

26 篇文章 0 订阅
订阅专栏

游戏要求:

1.电脑自动生成1到100的随机数

2.玩家猜数字,玩家猜数字的过程中,根据猜测数据的大小给出反馈,直至猜对游戏结束。

1.随机数的生成

1.1 rand

要想完成完成猜数字游戏,就要产生随机数,那我们怎么产生随机数呢?在C语言中提供了一个rand函数,这个函数时可以生成随机数的,其运用格式如下:

int rand(void);

rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是 依赖编译器上实现的,但是⼤部分编译器上是32767。rand函数的使⽤需要包含⼀个头⽂件是:stdlib.h 。我们就测试一下rand函数生成的随机数。

我们运行一次看看结果:

 那如果我们多运行几次呢?

 我们可以看到虽然⼀次运⾏中产⽣的3个数字是相对随机的,但是下⼀次运⾏程序⽣成的结果和上⼀次 ⼀模⼀样,这就说明有点问题。 如果再深⼊了解⼀下,我们就不难发现,其实rand函数⽣成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函 数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数.之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1。 如果要⽣成不同的随机数,就要让种⼦是变化的。

1.2 srand

C语言中又提供了一个函数叫srand,用来初始化随机的生成,其格式如下:

void srand(unsigned int seed);

程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随 机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。那也就是说给srand的种⼦是如果是随机的,rand就能⽣成随机数;在⽣成随机数的时候⼜需要⼀个随 机数,这就⽭盾了。

1.3 time

在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的,因为时间时刻在发⽣变化的。在C语⾔中有⼀个函数叫 time ,就可以获得这个时间,其运行格式如下:

time_t time(time_t* timer);

time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的 差值,单位是秒。返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类型 .time函数的参数 timer 如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存 中带回去。如果 timer 是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。如果只是让time函数返回时间戮,我们可以这么写:

time (NULL);

那我们就可以将生成随机数的代码改写如下:

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

运行两次看看,两次结果发生差异

 (注:截图只是当时的运行结果,你的运行结果不一定和这个一样)

srand函数是不需要频繁调⽤的,⼀次运⾏的程序中调⽤⼀次就够了。

1.4 设置随机数的生成范围

如果生成1到100之间的随机数,代码如下:

rand()%100+1;  //%100的余数范围是0到99,0到99的数字加1,范围就变成了1到100

 同理,如果生成a到b的随机数,代码如下:

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

2.猜数字游戏的实现

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void game()
{
  int r=rand()%100+1;
  int guess=0;
  while(1)
   {
     printf("请猜数字:\n");
     scanf("%d",&guess);
     if(guess<r)
       printf("猜小了");
     else if(guess>r)
       printf("猜大了");
     else
       {
         printf("恭喜你猜对了");
         break;
       }
   }
}
void menu()
{
  printf("*********************\n");
  printf("*** 1.开始游戏   *****\n");
  printf("*** 0.退出游戏   *****\n");
  printf("*********************\n");
}
int main()
{
  int input=0;
  srand((unsigned int)time(NULL));
  do
   {
     menu();
     printf("请选择:');
     scanf("%d",&input);
     switch(input)
      {
        case 1:
          game();
        case 0:
          printf("游戏结束\n");
          break;
        default:
          printf("选择错误,请重新选择\n");
          break;
      }
   }
   while(input);
   return 0;
}

当然在这个基础上我们还可以加上次数限制。这里我们就以5次为例子 

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void game()
{
  int r=rand()%100+1;
  int guess=0;
  int count=5;//定义猜数字的次数为5次
  while(count)
   {
     prinf("你还剩余%d次机会\n");
     count--;//猜一次次数少一次
     printf("请猜数字:\n");
     scanf("%d",&guess);
     if(guess<r)
       printd("猜小了");
     else if(guess>r)
       printf("猜大了");
     else
       {
         printf("恭喜你猜对了");
         break;
       }
   }
  if(count==0)
    printf("游戏结束,正确答案是%d\n",r);//次数耗尽公布答案
}
void menu()
{
  printf("*********************");
  printf("*** 1.开始游戏   *****");
  printf("*** 0.退出游戏   *****");
  printf("*********************");
}
int main()
{
  int input=0;
  srand((unsigned int)time(NULL));
  do
   {
     menu();
     printf("请选择:');
     scanf("%d",&input);
     switch(input)
      {
        case 1:
          game();
        case 0:
          printf("游戏结束\n");
        default:
          printf("选择错误,请重新选择\n");
      }
   }
   while(input);
   return 0;
}

这次和大家分享的随机数的生成之猜数字游戏到这里就结束了,如果有错误请大家及时帮我找出来纠错改正,当然猜数字游戏还可以设置时间限制,大家可以尝试一下。

游戏精粹】随机数
Evil_Carl的博客
11-16 1418
目录 可预测随机数 生成真正的随机数 随机数生成 一、可预测随机数 前言: 细节丰富的背景已成为成功游戏的重要因素,游戏中的各种动作正式在此前景之上发送的。不仅如此,背景还在玩家与游戏的交互中扮演着积极的角色。为了得到这种效果,传统的方法是将手工制作的关卡数据提取出来,然后保存在一个相对复杂、占用空间较大的关卡文件里,以备实时重放。但即便拥有强劲的资源配置,对于规模宏大而复杂的游戏而言,开发者也常常缺乏足够的空间进行调配。如果关卡数据不足,可能会使游戏的深度低于...
随机数生成以及猜数字游戏的实现
qq_56870066的博客
07-25 502
猜数字游戏简介: 一、首先一进去就要有个菜单页面 二、菜单页面可选择进入或者退出游戏 三、要对所猜的数字进行大小提示 四、游戏要能够反复地玩 实现步骤: 菜单页面的实现 # include <stdio.h> void menu() { printf("***************************\n"); printf("******1.进入游戏************\n"); printf("******0.退出游戏************\n");
随机数 猜数字
qq_40529747的博客
03-12 330
/* * 猜数字 */ public static void main(String[] args) { //new一个random Random r=new Random(); //获取1-100之间的随机数 int number=r.nextInt(100); //多次猜,死循环 while(true) { Scanner sc=new Scanner(System.in)...
随机数实现猜数字游戏
W1024201的博客
10-18 647
C语言实现猜数字游戏 方法:使用随机数产生数字 1-100 效果:1、在输入一个数字以后提示猜大或猜小 2、猜中后显示猜中,并返回猜的数字 3、记录玩家猜的次数 4、玩后选择是否继续玩 代码实现: #include <stdio.h> #include <stdlib.h> //提供包含随机数种子的srand()和rand()函数 #include <time.h> //提供时间,产生变...
随机数生成+猜数字游戏
最新发布
lllsure的博客
01-23 533
内容;一.随机数生成的方法二.猜数字游戏
MT19937:超长周期均匀随机数生成器Mersenne Twister算法详解
其名字来源于它利用了梅森素数(Mersenne Prime)的特性,使得周期长度达到天文数字级别的2^19937-1,这是当时已知最长的随机数生成器周期之一。这种巨大的周期性保证了随机数序列在统计意义上几乎无限,对于需要...
C语言实现的猜数字小游戏
12-23
这个猜数字游戏的实现,展示了C语言的基本结构和控制流程,以及如何利用随机数生成和用户交互来创建一个简单的游戏。通过这个游戏,开发者可以深入理解C语言的输入输出、条件判断和循环控制等核心概念。同时,这个...
详解Python基础random模块随机数生成
09-19
例如,当使用`randint`方法生成一定范围内的随机数时,会首先指定一个特定的种子值,然后将这个种子值通过特定的随机数生成算法得到一定范围内随机分布的数字。因此,对于相同的种子值,产生的随机数是相同的;而...
Spring Boot 配置随机数的技巧代码详解
08-27
Spring Boot 配置随机数的技巧代码详解 Spring Boot 配置随机数的技巧代码详解主要介绍了 Spring Boot 配置随机数技巧,Spring Boot 支持在系统加载的时候配置随机数,具体实例代码大家参考下本。 在 Spring Boot...
python3实现猜数字游戏
09-19
### Python3 实现猜数字游戏知识点详解 #### 一、项目背景与意义 在学习编程的过程中,通过实际项目来巩固理论知识是非常重要的。本篇内容将详细介绍如何利用Python3实现一个简单的猜数字游戏猜数字游戏不仅能够...
猜数字 随机数的产生
m0_37733257的博客
02-27 202
C1猜数字 随机数的产生 1.头文件和相关语句 #include Rand(); 就是一个函数关系,seed 通过这个函数对应关系得到另一数值,一个seed对应到一个值。 这个seed在电脑开机时已经固定,直接cout<<rand()值是一个 固定的,除非重启电脑 ()里面不东西 Srand(); rand()用到的seed由这个函数提供,这个括号里面什么seed就是谁 这个se...
Python随机数和猜数字小游戏
cnds123的专栏
02-24 1899
Python随机数,和其应用示例——猜数字小游戏
游戏中伪随机数的产生
dizuo的专栏
12-22 5311
游戏编程,随机数的应用无所不在,例如扑克类游戏中的随机发牌,俄罗斯方块的随机生成,拼图游戏中单元图片的散化,道具的摆放等等,我们希望所产生的数字随机,而且在我们预先设计的范围之内,同时又不希望有重复的两个数字出现,对于一般的作法:srand( (unsigned)time( NULL ) );    // 使用时间产生随机数.int number=rand()%mRange; 
幸运猜猜猜:游戏随机给出一个0~99(包括0和99)的数字,然后让你猜是什么数字。 你可以随便猜一个数字,游戏会提示太大还是太小,从而缩小结果范围。 经过几次猜测与提示后,最终推出答案。
m0_50180708的博客
08-27 7209
""" 幸运猜猜猜:游戏随机给出一个0~99(包括0和99)的数字,然后让你猜是什么数字。 你可以随便猜一个数字,游戏会提示太大还是太小,从而缩小结果范围。 经过几次猜测与提示后,最终推出答案。在游戏过程中,记录你最终猜对时所需要的次数, 游戏结束后公布结果。 说明: 1~2次猜中,打印你太TM有才了! 3~6次猜中,打印这么快就猜出来了,很聪明嘛! 大于7次猜中,打印猜了半天才猜出来,小同志,尚需努力啊! 猜测次数最多20次。 """ import random i = 1 compute
C#Windows窗体做一个随机猜数(1~100)
qq_41874322的博客
06-21 9206
public partial class Form1 : Form    {        public int k = 0;   //接收随机数的值        int count = 0;  //  计数        int number = 0; //输入猜的数值        public Form1()        {            InitializeComponent(...
猜数字游戏的简单实现
weixin_55772584的博客
07-04 709
模拟随机生成一个数字(1~100)玩家在规定次数内猜数字
猜数字游戏详解及关联知识点
欢迎来到潮汐的博客
07-30 186
猜数字游戏及关联知识点
java猜数字小游戏
m0_63112274的博客
06-01 1027
猜1到100之间的随机数 理解Random 理解while()循环
C语言——猜数字游戏
tan_run的博客
10-28 1945
2,玩家猜数字,总共五次机会,猜数字过程中,根据猜测数字的大小给出“猜大了”或“猜小了”的反馈,若猜对了则成功,若五次没猜出,则失败。当count的值==0时,不再进行循环,并提示失败。time 会返回:1970年1月1日0时0分0秒到现在程序运行时间之间的差值,单位是秒。我们只需要多设置一个变量:count,(count的初始值就是次数),就可以实现在不同条件下,给出“猜大了”或“猜小了”的提示。1,让电脑随机生成1~100的随机数。2,让电脑根据所猜的数,给出提示。之间的随机数,只需让任意的随机数
写文章

热门文章

  • C语言中的数组之二维数组 6337
  • 【数据结构】探索树中的奇妙世界 3015
  • 【数据结构】穿梭在二叉树的时间隧道:顺序存储的实现 3009
  • C语言趣味代码(三) 2826
  • C语言趣味代码(四) 2598

分类专栏

  • 数据结构 10篇
  • C语言 26篇

最新评论

  • 【数据结构】二叉树:一场关于节点与遍历的艺术之旅

    土豆片片: 博主深入浅出地介绍了二叉树的节点与遍历,让复杂的数据结构变得生动有趣。感谢分享,期待更多佳作!

  • C语言趣味代码(一)

    鸽鸽程序猿: 受益匪浅,感谢大佬分享,学到很多

  • C语言练习之打印菱形

    鸽鸽程序猿: 受益匪浅,感谢大佬分享,学到很多

  • C语言中的数组之二维数组

    鸽鸽程序猿: 受益匪浅,感谢大佬分享,学到很多

  • C语言中的数组(一维数组)

    鸽鸽程序猿: 受益匪浅,感谢大佬分享,学到很多

大家在看

  • 【保姆级教程】Proxmox+VE本地部署并实现无公网IP远程访问管理界面 693
  • HNU-操作系统实验Lab2-2022级
  • 探索虚拟世界的无限可能 —— Rope AI换脸技术 596
  • 【神兵利器】——197、Burpsuite之代理配置使用 210
  • 含物流查询、实名核验、天气查询的热门API大全 505

最新文章

  • 【数据结构】二叉树:一场关于节点与遍历的艺术之旅
  • 【数据结构】穿梭在二叉树的时间隧道:顺序存储的实现
  • 【数据结构】二叉树:简约和复杂的交织之美
2024年19篇
2023年17篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

野生的编程萌新

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

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

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

打赏作者

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

抵扣说明:

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

余额充值

玻璃钢生产厂家河南头像玻璃钢人物雕塑广东主题商场美陈制作卡通雕塑雪人玻璃钢雕塑商场美陈道具租聘玻璃钢仿真植物水果雕塑批发鼓楼玻璃钢雕塑设计玻璃钢雕塑厂家福建高频机昆明玻璃钢雕塑哪家好玻璃钢花盆装饰画遂宁卡通玻璃钢雕塑设计河北通道商场美陈厂家直销涟源玻璃钢花盆花器郑州彩绘玻璃钢雕塑揭阳玻璃钢主题雕塑梅州玻璃钢动物雕塑生产金华动物玻璃钢雕塑订做价格汕头市商场美陈玻璃钢雕塑市场行情玻璃钢烽火台雕塑玻璃钢红军雕塑系列哪里有玻璃钢人物雕塑制作河南商业商场美陈生产厂家卫辉商场美陈植物墙浙江商场美陈订购卡通雕塑玻璃钢批发山东商场创意商业美陈费用新疆玻璃钢广场雕塑软装玻璃钢卡通雕塑设计辽宁人像雕塑玻璃钢德惠道路景观玻璃钢花盆香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化