猜数字小游戏(加强版)它来了

简介: 猜数字小游戏(加强版)它来了

一、游戏设计思路


1.菜单: 设计一个”菜单“,让玩家可以选择”玩游戏“或者”不玩“。


2. 随机数:每次进入游戏,程序会自动生成一个”随机数“为目标数字(设置范围,不可过大)。


3. 限定次数:给玩家营造紧张的氛围,我们限定最多的猜测次数。


4. 选择难度:猜测的次数由玩家自己选择。


5.提示: 玩家每次猜测数字的时候程序会给出相应提示(比目标数字大还是小?)


6. 结局:玩家成功或者失败给出相应的结果。


二、代码的实现


2.1 菜单


我们可以用自定义函数打印一个游戏菜单。


如下:


void menu()//游戏菜单
{
  printf("***************************************************\n");
  printf("*********   1.玩游戏      ******      2.不玩*******\n");
  printf("***************************************************\n");
  printf("请选择:\n");
}


2.2 随机数rand函数


函数名: rand函数
头文件 #include <stdlib.h>
格式 int rand(void)
返回值 返回生成伪随机数的整数


rand函数会生成的随机数是int型的整数。最小值为0,但最大值(RAND_MAX)由编程环境决定,最大值最低不得低于32767.


int main()
{
  int retry=0;//是否再运行一次
  do
  {
    printf("随机数是%d\n", rand());
    printf("是否再运行一次:(1)是,(0)否\n");
    scanf("%d", &retry);
  } while (retry);
}



通过上述代码运行结果我们发现,虽然我们的确生成了一组随机数(随机数列),但是每次重新重新生成随机数列的时候,随机数列都是一样的,这就很令人费解,这到底是不是随机数列啊?


其实rand函数是对一个叫做”种子”的基准值来运算生成的,之所以前面每次生成的随机数列都相同是因为rand函数默认的种子是常量1,要生成不同的随机数列就得改变种子的值。


那么怎么改变种子的值呢?


改变种子的值:srand函数


函数名: srand函数
头文件 #include <stdlib.h>
格式 void srand(unsigned seed(种子))
功能 改变rand函数的种子
返回值 无


例如:srand(10)就是将rand函数的种子改成了10.


我们希望种子的值是变化的,那样rand函数生成的随机数组才是完美的随机数列。


时间不就是在一直变化吗?


srand((unsigned)time(NULL));//这样就可以根据时间来改变种子了。


time函数的头文件是#include <time.h>


最后:我们将rand() % 100 + 1就会=得到1到100之间的数了。


2.3 根据难度设置猜测的次数


我们设置难度级别分别为1到3三个级别。


1级三次机会


2级五次机会


3级十次机会


用count(表示机会的次数)作为玩家循环猜测的次数。


当难度不同时,count值不同。


2.4 提示


玩家如果盲目的猜数字也太难了,所以我们在每次玩家猜测过后给出相应提示,让玩家有更好的游戏体验。


比如:告诉玩家较于目标数字是大还是小,玩家还有几次机会。


2.5 结局


当玩家猜对成功后:我们恭喜玩家。


失败了:安慰一下玩家。


到这里我们的加强版猜数字游戏就结束了,如果有什么不理解的地方欢迎大家私信或者评论区指出哦。牛牛会一 一改正的。


下面是完整版的原码:


#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void menu()
{
  printf("***************************************************\n");
  printf("*********   1.玩游戏      ******      2.不玩*******\n");
  printf("***************************************************\n");
  printf("请选择:\n");
}
void game()
{
  int num = rand() % 100 + 1;//产生一个1到100的随机值
  int guess = 0;//定义一个玩家猜测的数
  int count = 0, i = 0, diffculty = 0;//count表示还剩几次机会,nandu表示游戏难度
  printf("游戏名:猜数字游戏\n");
  printf("游戏规则:系统会自动生成一个1到100之间的数,玩家在有限的机会内猜对。\n");
  printf("请选择游戏难度:1级别=三次机会   2级别=五次机会  3级别=十次机会\n");
  scanf("%d", &diffculty);//让玩家选择难度
  if (diffculty == 1)//难度为a时,次数为3
  {
    count = 3;
  }
  else if (diffculty == 2)//难度为b时,次数为5
  {
    count = 5;
  }
  else if (diffculty == 3)//难度为c时,次数为10
  {
    count = 10;
  }
  for (; count > 0; count--)//根据难度限定循环次数
  {
    printf("您还有%d次机会\n请输入:", count);//告诉玩家自己还有几次机会
    scanf("%d", &guess);//从键盘读取玩家猜测的数字
    if (guess < num)
    {
      printf("牛牛告诉你:您猜小了,往大猜一点。\n");
    }
    else if (guess > num)
    {
      printf("牛牛告诉你:您猜大了,往小猜小一点\n");
    }
    else if (guess == num)
    {
      printf("恭喜您,猜对了,您太厉害了!\n");
      break;
    }
  }
  if (count == 0)//次数用完了
  {
    printf("很遗憾,你失败了,不要灰心,我们再来一次。\n\n");
  }
}
int main()
{
  srand(time(NULL));//根据时间改变种子的值
  int n = 0;
  do
  {
    menu();
    scanf("%d", &n);//让玩家在菜单中选择
    switch (n)
    {
    case 1://代表玩游戏
      game();
      break;
    case 2:
      break;
    default:
      printf("没有这个选项哦。\n");//玩家不小心输错了
      break;
    }
  } while (n - 2);//当玩家选择2时,代表不玩了
  return 0;
}
目录
相关文章
|
JSON 自然语言处理 编译器
Alibaba.com瘦包40MB——业界最全的iOS包大小技术总结
前言包大小是衡量APP性能的一项重要指标,它直接影响用户的下载点击率(包太大不想下)、下载安装成功率(下载慢不用了)、APP卸载率(太占空间先删掉)。包大小的计算逻辑很简单,它是各种类型的文件占用磁盘大小相加。APP瘦身的技术却很复杂,代码文件的复杂度和编译器策略决定了可执行文件的大小,业务功能和工程架构决定了代码文件的复杂度。iOS APP瘦身,需要掌握的技能有XCode构建技术、LLVM编译器
5364 0
Alibaba.com瘦包40MB——业界最全的iOS包大小技术总结
|
机器学习/深度学习 人工智能 算法
大型语言模型为何产生幻觉
语言模型为何会产生幻觉?OpenAI 最新研究指出,幻觉源于模型在训练和评估中被鼓励猜测而非承认“不知道”。即使强大如 GPT-5,也无法完全避免幻觉。改进评估方式、奖励模型表达不确定性,是减少幻觉的关键。
822 10
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
Linux
使用Kali Linux跟踪任何设备位置
如果您的手机在某处丢失或被某人偷走了,您可以使用此技巧,或者如果您的兄弟姐妹/朋友/家人失踪并使用他们的电话,那么您可以使用此技巧来定位并找到他们,
1743 0
使用Kali Linux跟踪任何设备位置
|
人工智能 自然语言处理 Serverless
阿里云函数计算 x NVIDIA 加速企业 AI 应用落地
阿里云函数计算与 NVIDIA TensorRT/TensorRT-LLM 展开合作,通过结合阿里云的无缝计算体验和 NVIDIA 的高性能推理库,开发者能够以更低的成本、更高的效率完成复杂的 AI 任务,加速技术落地和应用创新。
1249 15
|
机器学习/深度学习
RT-DETR改进策略【损失函数篇】| 替换激活函数为Mish、PReLU、Hardswish、LeakyReLU、ReLU6
RT-DETR改进策略【损失函数篇】| 替换激活函数为Mish、PReLU、Hardswish、LeakyReLU、ReLU6
876 2
RT-DETR改进策略【损失函数篇】| 替换激活函数为Mish、PReLU、Hardswish、LeakyReLU、ReLU6
|
人工智能
月之暗面获得中国AI公司最大单轮融资
【2月更文挑战第11天】月之暗面获得中国AI公司最大单轮融资
749 1
月之暗面获得中国AI公司最大单轮融资
|
Oracle Java 关系型数据库
yum安装指定版本的openJDK
yum安装指定版本的openJDK
|
SQL 数据挖掘 Python
R中单细胞RNA-seq数据分析教程 (1)
R中单细胞RNA-seq数据分析教程 (1)
R中单细胞RNA-seq数据分析教程 (1)
|
网络协议 Ubuntu 网络安全