猜数字游戏

今天给大家分享一个猜数字游戏代码

我们要完成一下几个部分(完整的代码放在最后)

1.生成1-100的随机数

2.打印一个简易的菜单

3.使用循环结构 让玩家输入值决定是否进行游戏 玩完一次后可以继续决定是否继续游戏

4.完成猜数字逻辑结构

----------------------------------------------------

1.生成随机数

生成随机数我们要使用几个函数实现

1.1 rand

ac7c5cf9ebb14cbdbd773a2d2007be8e.png

 void表示rand函数无需传值 int表示rand函数会生成一个整形随机值 这个随机值的范围在0-rand_MAX之间 最大值的大小是由编译器实现的 通常该值为32767

但是rand函数生成的是一个伪随机数 并不是真正的随机数 rand函数是对一个叫“种子”的基准值进行运算生成的随机数  种子就是一个固定的数 rand函数对这个值进行某种运算从而生成一个伪随机数 在默认情况下种子的值为1,如果我们不把种子改变的话就会出现下面的情况

ad9585cb1a904c15a15d8a933f9a5486.png

这里我们调用5次rand函数并将生成的随机值打印

848703007da24817b91f6c76c76d5f5f.png 

这是运行两次的结果 我们发现两次运行生成的随机数是一样的 这是因为种子没有发生改变 那么当我们玩完一次游戏之后退出游戏 下次再玩我们要猜的值就永远不会改变 所以我们要想办法改变种子

注:使用rand函数要包含头文件#include<stdlib.h>

1.2 srand

1e0d174df13f4b52bc93e3ab0832b172.png

srand函数是用来初始化种子的 种子类型为unsigned int 简单来说 srand(2)就代表种子变为2 那么只要让括号里的值一直改变 然后再在rand函数之前调用srand函数 就可以让种子保持变化 那么就可以在每次调用程序时生成不一样的随机数了

那么我们怎么样才能让srand括号里的值一直改变呢?在我们的生活中 有一样东西一直在变 那就是--时间

1.3 time

7d1b439bd2824884a204b501fd024701.png

time函数要传的值是一个指针变量 time函数会返回当前的日历时间 实际上返回的是1970年1月1日0时0分0秒到当下时间的差值 单位是秒 返回类型为time_t time_t本质上就是32位或者64位的整形类型 在今天的代码中 我们不需要给time函数传值 所以我们给time函数赋一个空指针Null 这样time函数就只会返回时间的差值 如下图

6c90270b7a974652b0a8736a031caf4d.png

 注:使用time函数要包含头文件#include<time.h>

1.4 生成随机数

我们把这些函数结合使用就能够实现生成随机数了

860c39a026164bdf9e622f2aaf727fe7.png

 35900833f1394f798e9f0ddeb19eca16.png

这样一来 每次生成的随机数就都不一样了

1.5 设置随机数的范围

如果我们要生成a-b的随机数 方法如下

78e91cfc8bba4d3a9e011170fce848e7.png

 我们要生成1-100的随机数 则只要套用公式

81efce5c912540dba41992c447c79cee.png

 2.打印菜单

06538f8755224f7da3018020b1abfc09.png

通过一个简单的menu函数来实现一个简易的菜单

3.循环结构实现选择游戏逻辑

 5ced4e9e7fe5429da609b98f8ef5b394.png

 选择do while 循环是因为不管怎样我们都要先打印一次菜单供玩家选择 程序开头创建了input变量 进入循环后 先调用menu函数打印菜单并让玩家选择输入input的值 再用switch语句根据input的值来判断进入哪个入口 玩家选择1则开始游戏 选择0则结束游戏 选择其他的值则会提醒玩家选择错误 这里while表达式为input的值 如果玩家输入0则代表要退出游戏 其他非0值则代表继续 符合逻辑

4. 猜数字逻辑

7300312b711c40e9aafd0e8b098721f5.png

 在玩家选择1之后就会进入game()函数开始猜数字游戏

首先创建变量r来接收随机数 然后创建玩家要猜所输入的值 进入循环 玩家输入所猜测的值 如果比r小则提示“猜小了” 如果比r大则提示“猜大了” 直到猜中r则打印“恭喜你,猜对了” 然后退出循环

注:srand函数我们只需要在程序开头调用一次就好 

这样我们在每一次调用程序的时候就会改变一次种子

完结

写的不好大家见谅❤️❤️

ad3ee9d15ca749e9858202a9006c0b60.jpg

 #define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void game()

{

 int r = rand() % 100 + 1;

 int guess = 0;

 while (1)

 {

  printf("请猜数字>:");

  scanf("%d", &guess);

  if (guess < r)

  {

   printf("猜小了\n");

  }

  else if (guess > r)

  {

   printf("猜大了\n");

  }

  else

  {

   printf("恭喜你,猜对了\n");

   break;

  }

 }

}

void menu()

{

 printf("***********************\n");

 printf("****** 1. play ******\n");

 printf("****** 0. exit ******\n");

 printf("***********************\n");

}

int main()

{

 int input = 0;

 srand((unsigned int)time(NULL));

 do

 {

  menu();

  printf("请选择:>");

  scanf("%d", &input);

  switch (input)

  {

  case 1:

   game();

   break;

  case 0:

   printf("游戏结束\n");

   break;

  default:

   printf("选择错误,重新选择\n");

   break;

  }

 } while (input);

 return 0;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值