猜数字游戏的实现
设计一个猜数字游戏:
1.要猜的数字范围是1~100
2.用户可以选择重复选择,直到用户不想玩该游戏
大体思路
- 用户必须登录一次,最多可以登录三次。故可采用do while循环,将猜的部分放在do中。
- 用户选择之前得打印菜单,给出选择到底是玩还是不玩,还是其他情况。故将这部分可采用switch语句,以便实现不同的分支。
- 选择玩,则进入游戏部分,将这部分封装成一个函数;选择不玩,跳出do while循环;选择其他的值,再给机会进行选择。
代码的模拟实现
1.大体的代码的实现(初步确定一个轮廓)
#include <stdio.h>
void menu()
{
printf("******************\n");
printf("******0.exit******\n");
printf("******1.play******\n");
printf("******************\n");
}
int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 0:
printf("结束游戏!\n");
break;
case 1:
printf("开始游戏!\n");
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
} while (input);
return 0;
}
- 上述代码利用到的很巧妙的一点是将input的值放入while中。
- 在C语言中0表示的是假,非0表示的是真!
- 一旦用户选择0之后,跳出循环来到while中,因为input=0的,所以并不会继续执行do while循环,而是来到return的前面!
运行截图
- 大体上代码的实现已经完成!下面是细节的实现!
2.精细代码的实现
- 在这部分,将实现的是猜数字游戏的重点部分!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("******************\n");
printf("******0.exit******\n");
printf("******1.play******\n");
printf("******************\n");
}
void game()
{
int guess = 0;
int ret = rand() % 100 + 1;//产生一个1~100的随机数
while (1)
{
printf("请输入一个你猜的数字!\n");
scanf("%d", &guess);//输入的数必须要放在循环内,不然容易导致死循环
if (guess > ret)
{
printf("猜大了!\n");
}
else if (guess < ret)
{
printf("猜小了!\n");
}
else
{
printf("猜对了!\n");
break;//一旦猜对就跳出循环,游戏结束。
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//给rand设置一个起点
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出游戏\n");
break;
case 1:
game();//封装一个游戏函数
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
} while (input);
return 0;
}
- 几点重要问题的说明
- 要猜一个数,首先得给定一个数,下面会说明有关函数的使用!
- 要输入一个要猜的数,且与随机数相比较!这个输入的数必须要放入循环内,否则一旦输入一个非0的值,就会导致死循环!
rand函数
函数的描述
函数的作用:Generates a pseudorandom number.--生成一个随机数
需要引用的头文件:#include <stdlib.h>
返回值的范围是:0~RAND_MAX(32767)
需要配合srand函数使用
函数的组成
int rand(void);
函数的返回值是int
函数无参
srand函数
函数的描述
函数的作用:设置一个随机数起点
需要引用的头文件:#include <stdlib.h>
函数的组成
void srand(unsigned int seed);
函数无返回值
参数是无符号整型
- 众所周知的是,时间是不断变化的;因此,我们可以利用时间戳来设置srand的参数
time函数
函数的描述
函数的作用:Time返回以秒为单位的时间,没有错误返回。
需要引用的头文件:#include <time.h>
函数的组成
time_t time(time_t *timer);
time_t的类型实际上是一个长整型:long long
返回值是time_t
函数的参数是一个指针
- 通过上述函数基本功能的了解:可以很好的解释srand((unsigned int)time(NULL)); 以及rand() % 100 + 1; 两个语句的作用!
- rand函数返回的是0~32767中的一个随机值,将其%100得到的是0 ~ 99的数,加上1之后的范围就是1~100。
- rand函数的使用得设置一个起点,且这个起点只用设置一次就行!
- srand中的参数是一个无符号整型,又因为必须是随机的,故使用时间戳作为参数!但是,时间戳返回值是长整型,故将其强制类型转化为unsigned int。time中的参数是指针,故使用空指针(NULL)作为其参数。
3.写到这,猜数字游戏已经全部完成!下面让我们来试试看,简单的猜数字游戏吧!
运行截图