猜数字游戏与简单登录操作类似。可以让电脑生成一个随机数,可以通过取模操作来控制这个随机数的范围,然后我们输入一个数与这个随机数比较即可。
生成一个随机数的操作可以用 <stdlib.h>头文件中的srand函数:
在使用之前需要给srand函数传入一个无符号整形的数,它会根据这个数生成一个随机数生成随机数rand();但是很遗憾,每次生成的随机数都是一样的:
第一次:
第二次:
为了避免这种情况,我们需要在srand中传入一个随机数,而这个随机数可以用时间戳:
时间戳是当前计算机的时间减去计算机的起始时间(1970年1月1日0时0分0秒),因此这个值是时刻变化的,因此用这个时间戳生成的随机数也是变化的,在MSDN的srand函数举例中就出现了时间戳:
time函数:
要使用time函数要引用头文件<time.h>,传入一个time_t的指针,在这里传入空指针NULL即可,它的返回值time_t是一个长整型,这个可以从定义中得知:
而srand中的参数是一个无符号整形,因此我们需要进行强制类型转换,修改后的代码:
两次产生的随机数不同,随机数的生成就解决了,如果要得到固定范围比如1-100,只需要用产生的随机数取模与100然后加1即可。
最难的随机数解决完以后,剩下的就是用while循环和switch选择结构来搭建游戏框架了,具体的代码比较简单:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()//将菜单封装成函数
{
printf("**********************************\n");
printf("*********** 1.开始****************\n");
printf("*********** 0.退出****************\n");
printf("**********************************\n");
}
void game()//游戏实现的程序
{
int num = rand() % 100 + 1;
int input = 0;
while (1)
{
printf("请输入猜的数字>:");
scanf("%d", &input);
if (input > num)
{
printf("猜大了\n");
}
else if (input < num)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
menu();
printf("请选择>:");
scanf("%d", &input);//输入玩游戏或者退出游戏的选项
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("选择错误,请重新输入!\n");
break;
}
} while (input);
return 0;
}
在猜对了之后加入<stdlib.h>中的两个函数按任意键继续system(“pause”)和清屏system(“cls”),可以让体验更好:
按任意键后:
如果想实现最多猜多少次的操作,可以在while循环中加入一个计数变量,当达到指定次数后直接跳出循环,以最多猜测五次为例:
最终的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdlib.h>
void menu()
{
printf("**********************************\n");
printf("*********** 1.开始****************\n");
printf("*********** 0.退出****************\n");
printf("**********************************\n");
}
void game()
{
int num = rand() % 100 + 1;
int input = 0;
int count=0;
while (1)
{
printf("请输入猜的数字>:");
scanf("%d", &input);
if (input > num)
{
printf("猜大了\n");
count++;
}
else if (input < num)
{
printf("猜小了\n");
count++;
}
else
{
printf("恭喜你,猜对了\n");
system("pause");
system("cls");
break;
}
if (count == 5)
{
printf("猜测次数用完,游戏失败\n");
system("pause");
system("cls");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
menu();
printf("请选择>:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("选择错误,请重新输入!\n");
break;
}
} while (input);
return 0;
}