一、不多废话,直接进入主题
我们来理清一下实现这个小游戏的思路:
1.生成随机数(重点)
2.你来猜(输入要猜的数)
3.提示玩家猜大或猜小了,直到猜对为止
ok,只要能把上面要求都实现了,那我们的小游戏也就完成了。
二、实现功能
1.生成随机数(1~100的随机数)
咦!懵了!我怎么生成随机数呢?
———————————————————————————————————————————
别慌,下面介绍一个库函数 rand()—————— 解锁新技能(很重要,仔细看)
上面是官方定义,简单点这个函数就能让我们得到随机值
行!我们来用用看
include<stdio.h>
include<stdlib.h>//别忘记头文件
int main()
{
int a = rand();
int b = rand();
int c = rand();
printf("%d %d %d",a,b,c);
return 0;
}
运行几次后发现,怎么每次都41 18467 6334这三个数字,给人一种随机又不随机(如随)的感觉。
我们再来好好看看这个rand函数怎么介绍的
emmm...
简单就是说,使用rand函数之前我们得先用一个srand的函数来设置“种子” 。
我们可以这样理解,rand函数其实就是接受一个值x,然后加减乘除一通(或者其他运算),算来算去,最后得到我们所谓的随机数y。 类似于y=f(x) 给个种子x就给你个随机值y。
理解了这个,我们就来看看刚刚咋回事?
哦!我们原来并没有给rand种子,所以它就用默认的种子来算,所以每次得到的结果都是一样的。
接下来我们就把srand用上,先来看看官方介绍
把srand用起来!
include<stdio.h>
include<stdlib.h>//别忘记头文件
int main()
{
srand(200);//设置种子
int a = rand();
int b = rand();
int c = rand();
printf("%d %d %d",a,b,c);
return 0;
}
运行了几次之后,咋结果还是一样呢
原因是:其实这和刚刚就是一样的道理,只是这次的初始值是由我们给了个200,上次的初始值是默认的。 每次初始值都不变,所以最终还是没法得到真正的随机值。
难道我们srand里设置的种子应该是个————随机值?!!
为了生成随机值首先我们得有随机值??!
No,再仔细一想,其实srand里不是随机值也行,但值必须是每次运行程序时都不一样。这样每次生成的随机值才不一样。
哦!!奥妙就在这里,我们发现每次运行程序的时间都不一样,那我们把时间放进去不就可以了,时间不就是一个一直在改变的值吗?
接下来我们看看怎么把时间放进去
这里我们要用到第三个函数 time
Gets the system time——获取系统时间
对头,这个就是我们想要的函数
include<stdio.h>
include<time.h>//time 函数的头文件
include<stdlib.h>//rand srand 的头文件
int main()
{
srand((unsigned int)time(NULL));//设置种子 srand+time
int a = rand();
int b = rand();
int c = rand();
printf("%d %d %d",a,b,c);
return 0;
}
srand里需要个unsigned int 所以我们就强制类型转换一下,time函数里需要个指针,那我们就放个NULL空指针进去。
运行结果交给你们来!
OK,随机数已经到手,现在只差临门一脚
怎么得到1~100之间的数呢?
(随机数%100)这个的范围,我们想想是不是0~99
那(随机数%100)+1 这个的范围不就是我们想要的1~100
大功告成!接下来就简单了!
2、你来猜(输入要猜的数)
int com=0;
scanf("%d",&com)//后面也用com表示
相信对于大家来说那不是有手就行!
3.提示玩家猜大或猜小了,直到猜对为止
//生成1~100的随机数
srand(unsigned int(time(NULL));
int R = rand() % 100 + 1;
int Com = 0;//玩家
int count = 0;//记录猜的次数
int Time = 6;//设置一个猜数次数
for (count = 0; count < Time; count++)
{
printf("猜猜我是多少?\n");
printf("我猜是> ");
scanf("%d", &Com);
if (Com > R)
{
printf("猜大了!\n");
printf("剩余次数:%d次\n", Time - count-1);
}
else if (Com < R)
{
printf("猜小了!\n");
printf("剩余次数:%d次\n", Time - count-1);
}
else
{
printf("恭喜你,猜对了!\n");
}
}
同样的这不也就是信手拈来!
三、最后我们把功能合并一下,看代码!
接下来就会运用到:
循环语句:
do-while 语句
for 语句
选择语句:
if 语句
switch 语句
游戏中加入菜单 猜数次数功能,让游戏更合理
//猜数字游戏
#include<stdio.h>
#include<stdlib.h>
#include<time.h> //头文件
void menu()//菜单界面
{
printf("******************************\n");
printf("**** 猜数字游戏 ****\n");
printf("**** 1.开始游戏 ****\n");
printf("**** 0.退出游戏 ****\n");
printf("******************************\n");
}
void game()//选择开始游戏就会调用这个部分
{
//生成1~100的随机数
int R = rand() % 100 + 1;
int Com = 0;//玩家
int count = 0;//记录猜的次数
int Time = 6;//设置一个猜数次数
for (count = 0; count < Time; count++)
{
printf("猜猜我是多少?\n");
printf("我猜是> ");
scanf("%d", &Com);
if (Com > R)
{
printf("猜大了!\n");
printf("剩余次数:%d次\n", Time - count-1);
}
else if (Com < R)
{
printf("猜小了!\n");
printf("剩余次数:%d次\n", Time - count-1);
}
else
{
printf("恭喜你,猜对了!\n");
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));//定义种子,运用上面讲的知识
int input = 0;//用来选择的变量
do
{
menu();//菜单
printf("请输入你的选择> ");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择>\n");
}
} while (input);
return 0;
}
恭喜你!运用所学知识做出了猜数字小游戏!
未来掌握更多知识后,可以加点好玩的功能(超过猜数次数就关机等)给好兄弟(倒霉蛋)玩一玩。
希望大家喜欢作者的写作风格,以后会持续更新各种各样有意思的程序!在开心玩耍中学习知识,请大家多多关注!