实现目标
- 菜单 首先猜数字游戏肯定得要有一个随机数
- 可以重复玩多次
- 猜数字能提示(大了,小了,对了)
菜单
- 一般游戏都有个菜单界面,询问玩家游戏或者退出!我们将它封装成一个函数Game_begin提示玩家。
void Game_begin()
{
printf("****************************\n");
printf("**********猜数字游戏********\n");
printf("****** 1.play ******\n");
printf("****** 2.exit ******\n");
printf("****************************\n");
printf("请输入选项:\n");
}
游戏框架
如何实现反复玩游戏,首先我们想到的就是利用循环 while for do while实现循环达到反复游戏的目的
这里便选择switch更直观一点
1 .进入游戏
2.退出游戏
3.选择错误(然后默认退出)
游戏主体
在封装好的函数里将要猜的值传进去,用while(1)形成一个死循环
接着scanf输入一个数字,用if语句判断猜大还是猜小,如果没猜对就继续循环,每猜一次就计数一次,如果猜对了就break退出。
部分游戏主题代码
int Guess_num(int ret)//ret为随机数
{
int temp = 0;//计数器
int num = 0;//输入的数
while (1)
{
printf("请猜一个数字:");
scanf_s("%d", &num);
temp = temp + 1;//每次循环完计数+1
if (num < ret)
{
printf("猜小了!\n");
}
else if (num > ret)
{
printf("猜大了!\n");
}
else
{
printf("恭喜您猜对了!\n");
break;
}
}
return temp;
}
rand()、srand()
C语言产生随机数要用到的函数是rand()和srand()。random()函数不遵循ANSIC标准,在gcc、vs等编译器下不能通过编译。
(1)若是为了生成一个无范围限制的随机数,只需要使用rand()即可。
rand()返回一个随机数,范围为0~RAND_MAX。RAND_MAX定义在stdlib.h中,其值为2147483647。
(2)如果要生成某个范围内的随机数,有两种情况:
①从0开始的随机数,例如:生成0~10的随机数,利用rand()函数对10求余,即rand()%10;
②不从0开始的随机数,例如:生成5~25的随机数,利用rand()函数对25-5=20求余再加上5,即rand()%20+5.
(3)以上两种情况生成的随机数都是一次性的,以后无论再运行几次,输出的结果都将与第一次相同。为了使程序在每次执行时都能生成一个新序列的随机值,需要为随机数生成器提供一个新的随机种子。此时需要使用srand()函数,该函数为随机数生成器播撒种子。只要种子不同,rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。
函数原型:void srand(unsigned int seed);
该函数的参数seed是种子,用来初始化rand()的起始值。
功能为:从srand(seed)中所指定的seed开始,返回一个在[0,RAND_MAX]之间的随机整数。rand()函数是真正的随机数生成器,srand()为rand()提供随机数种子。srand((unsigned int)time(NULL)) 表示使用系统定时器的值作为随机数种子。
系统在调用rand()函数之前会自动调用srand()函数,如果用户在调用rand()函数之前没有调用srand()函数,那么系统就会默认将1作为伪随机数的初始值。如果用户调用过srand(),并给参数seed赋一个值,那么rand()函数就会将此值作为产生随机数的初始值。如果给seed一个固定值,那么rand()函数产生的随机数将会是一样的。
游戏完整代码
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int Guess_num(int ret)//ret为随机数
{
int temp = 0;//计数器
int num = 0; //输入的数
while (1)
{
printf("请猜一个数字:");
scanf_s("%d", &num);
temp = temp + 1;//每次循环完计数+1
if (num < ret)
{
printf("猜小了!\n");
}
else if (num > ret)
{
printf("猜大了!\n");
}
else
{
printf("恭喜您猜对了!\n");
break;
}
}
return temp;
}
void Game_begin()
{
printf("****************************\n");
printf("**********猜数字游戏********\n");
printf("****** 1.play ******\n");
printf("****** 2.exit ******\n");
printf("****************************\n");
printf("请输入选项:\n");
}
int main()
{
srand(time(NULL));//随机数种子
int ret = rand() % 100 + 1;//范围是0-100的随机数
int temp = 0;//计数器
int i = 0;//用户输入的值
Game_begin();//游戏菜单
scanf_s("%d", &i);//输入1、2,进入游戏或者退出
while (1)
{
switch (i)
{
case 1:
{
temp = Guess_num(ret);
printf("您一共猜了%d次\n", temp);
break;
}
case 2:
exit(0);
default:
printf("输入有误!");
break;
}
printf("是否继续游戏?\n");
printf("1.继续\n");
printf("2.退出\n");
scanf_s("%d", &i);
switch (i)
{
case 1:
continue;
case 2:
exit(0);
default:
printf("输入错误!");
exit(0);
}
}
return 0;
}