写一个猜数字游戏
游戏要求:
1. 电脑
自动生成1~100的随机数
2.
玩家猜数字,猜数字的过程中,根据猜测数字的大小给出大了或小了的反馈,直到猜对,游戏结束
生成伪随机数的rand函数
‼️前提:必须加一个头文件
#include <stdlib.h>
这时候,打出“rand()“就代表一个伪随机数
比如
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%d", rand());
return 0;
}
你就会得到一个伪随机数
当然,多来几个也行
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%d", rand());
printf("%d", rand());
printf("%d", rand());
printf("%d", rand());
printf("%d", rand());
return 0;
}
为什么叫伪随机数
因为不论运行代码多少次都不会改变生成的数字
生成随机数
这时候要用到两个其他函数
第一个是srand
第二个是time
srand
为什么用这个?
你把rand理解为一个公式,比如“1的平方”
那么srand就相当于把这个式子改为了“x的平方”
这时候你输入x的值就可以得到不同的rand的值
time
“time(NULL)”
用这个来改变上面提到的x
‼️头文件#include <time.h>
这时候就有3个头文件了,让人头大
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
这时候如果打出“time(NULL)”,就可以刷新一个新的数字———现在的时间,带入x,从而得到真随机数
实践的注意事项
time本质是个长整型整数(比如像long/long long那样的大整数类型
srand要的是unsigned int
那么这样就不行⬇️
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
printf("随机数:%d\n", rand());
return 0;
}
这时候需要用到
强制类型转换
int a = (int)3.14;//意 思是 将 3.14换为int类型,这种只 取 整 数部分
就像在3.14前面加上“(int)”,使浮点型强迫转化为整形
我们这样做
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand((unsigned int)time(NULL)); //‼️
printf("随机数:%d\n", rand());
return 0;
}
注意‼️部分的变化
就可以实现随机数的生成,耶耶耶
设置随机数的范围,1到100
‼️利用余数的性质➡️如果一个数除以3,那么余数只能是0,1或2
➡️如果一个数除以a,那么余数只能在0到a-1
rand() % 100;//余数的 范围是 0~99
⬆️余数的 范围是 0~99
1 + rand() % 100 ;//范围是 1~100
⬆️实现啦
生成100到200的随机数
100 + rand() % 101 ;
生成a到b的随机数
a + rand() % (b - a + 1);
具体实践
开始菜单
来一个式子叫menu(随便起的),在游戏最开始提示
void menu()
{
printf("--------------");
printf("----1. play---");
printf("----0. leave--");
printf("--------------");
}
游戏实体
void game()
{
int a = 0;
int r = rand() % 100 + 1;
while(1)
{
printf("请猜数字>:");
scanf("%d", &a);
if(a < r)
printf("猜小了\n");
else if(a > r)
printf("猜大了\n");
else
{printf("恭喜你,猜对了\n");
break;}
}
}
游戏整体
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("--------------\n");
printf("----1. play---\n");
printf("----0. leave--\n");
printf("--------------\n");
}
void game()
{
int a = 0;
int r = rand() % 100 + 1;
while(1)
{
printf("请猜数字>:");
scanf("%d", &a);
if(a < r)
printf("猜小了\n");
else if(a > r)
printf("猜大了\n");
else
{printf("恭喜你,猜对了\n");
break;}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{ menu();
printf("请选择>\n");
scanf("%d", &input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}while(input);
return 0;
}
增加次数限制
改变“游戏实体”⬇️
void game()
{
int a = 0;
int r = rand() % 100 + 1;
int count = 5;
while(count)
{
printf("\n你还有 %d 次机会\n", count);
printf("请猜数字>:");
scanf("%d", &a);
if(a < r)
printf("猜小了\n");
else if(a > r)
printf("猜大了\n");
else
{printf("恭喜你,猜对了\n");
break;}
count --;
}
if (count == 0);
printf("你这次没对,正确值是%d。要再来一次吗\n", r);
}
1040





