目录
一.题目
生成100到200之间的数字,玩家进行猜数字,直到猜对才算成功
二.分析
1.产生随机数
(一)rand()函数
生成随机数需要用到rand函数,它属于库函数,因此我们需要加一个头文件,叫#include<stdlib.h>。然而rand函数生成的随机数是伪随机数,如图:
第一次运行:
第二次运行结果:
经过俩次运行产生的随机数都是一样的,这就是伪随机数,一旦第一次产生了随机数,以后不管运行多少次都是这个问题,这就涉及到了种子,因为rand()函数种子默认为0,所以产生的随机数每次都一样。改变种子就涉及到srand函数
(二)srand()函数
srand函数形式如下:
srand(unsigned int seed)
使用rand函数的前提就是srand函数里面的种子是随机的,当种子随机那么rand函数产生的就是真正的随机数,想要种子随机,那又涉及到time函数了
(三)time()函数
time()函数对应的头文件是#include<time.h>,当time函数的参数是一个空指针,也就是time(NULL)时它会返回一个时间戳,也就是当前程序运行时间与1970年1月1日0分0秒的差值
2.游戏主界面
void menu()
{
printf("************************\n");
printf("******** 1. paly *******\n");
printf("*********0. exit *******\n");
printf("************************\n");
}
3.游戏主体
void game()
{
int r = rand() % 101 + 100;
int guess = 0;
while (1)
{
printf("请输入数字:\n");
scanf("%d", &guess);
if (guess > r)
{
printf("猜大了\n");
}
else if (guess < r)
{
printf("猜小了:\n");
}
else
{
printf("恭喜你,猜对了!\n");
break;
}
}
}
4.代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("************************\n");
printf("******** 1. paly *******\n");
printf("*********0. exit *******\n");
printf("************************\n");
}
void game()
{
int r = rand() % 101 + 100;
int guess = 0;
while (1)
{
printf("请输入数字:\n");
scanf("%d", &guess);
if (guess > r)
{
printf("猜大了\n");
}
else if (guess < r)
{
printf("猜小了:\n");
}
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");
break;
}
} while (input);
return 0;
}
运行结果:
三.代码优化
加入次数限制
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("************************\n");
printf("******** 1. paly *******\n");
printf("*********0. exit *******\n");
printf("************************\n");
}
void game()
{
int r = rand() % 101 + 100;
int guess = 0,count=5;
while (count)
{
printf("请输入数字:\n");
printf("你还有%d次机会", count);
scanf("%d", &guess);
if (guess > r)
{
printf("猜大了\n");
}
else if (guess < r)
{
printf("猜小了:\n");
}
else
{
printf("恭喜你,猜对了!\n");
break;
}
count--;
}
}
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");
break;
}
} while (input);
return 0;
}
运行结果: