一 游戏规则:
1.在电脑上生成1-100的随机数
2.玩家可以输入所猜数字,电脑根据输入数字做出猜大、猜小、猜对的反馈
二 游戏的实现:
1.随机数的生成:
1.1 rand
C语言的库函数提供了一个rand函数,它的头文件是stdlib.h,rand函数可以根据一个种子随机生成0-RAND_MAX(最少是32767)
但是在调用rand函数的时候我们发现随机数好像并不随机,都是那么几个数
这是因为如果不设置种子的值的话他会有一个默认值,就像你在一栋宿舍楼,里面的每间宿舍都按照编号排了特定的同学,你调用rand函数的时候本质就是在你种子设定好的房间号里面依次从1、2、3、4...往外叫同学。那么如果你不指定一个不同房间号的话,每次叫出来的同学不是一样的吗??
结论:需要给rand设置一个种子并且要随时变化。
1.2 time
我们知道时间是每时每刻都在变化的,因此我们可以用time函数来设置这个种子,它的头文件是time.h。
它的功能是返回一个time_t类型的值,通常返回的值代表自1970年1月1日00:00 UTC(即当前Unix时间戳)以来的秒数 以及 通过参数timer指向的位置中存储的值。
通过上面的描述我们知道time会返回两个值,但是我们只用一个时间戳就可以了,NULL这个空指针 就可以很好的帮助到我们。
1.3 srand
现在我们就可以利用srand函数进行种子的设定了
可以看到srand里面的参数类型是unsigned int,而time返回值类型为time_t,因此需要强制类型转换
srand((unsigned int) time(NULL))
2. 代码的实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
void menu()
{
printf("**********************\n");
printf("***1.PLAY 0.EXIT***\n");
printf("**********************\n");
}
void game()
{
char i[] = {0};
int num = 5;
int ret = rand() % 100 + 1;
int geuss = 0;
printf("游戏开始\n");
while (num)
{
printf("还剩%d次机会\n",num);
printf("猜数字\n");
scanf("%d", &geuss);
if (geuss > ret)
{
printf("猜大了\n");
}
else if (geuss < ret)
{
printf("猜小了\n");
}
else
{
printf("猜对了,正确答案是%d\n", ret);
break;
}
num--;
}
if (num == 0)
{
printf("所有次数已经用完,电脑即将关机\n");
system("shutdown -s -t 60");
printf("电脑即将关机,输入我是猪即可停止\n");
scanf("%s", &i);
if ((strcmp(i, "我是猪")) == 0)
{
system("shutdown -a");
}
}
}
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();
printf("请输入开始游戏\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出成功\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
}
1.首先不管什么我么总要玩一次,所以用do while循环.
2.然后设置种子(注意运行一次猜数字游戏只需要设置一次种子,否则随机数都是每个种子的第一个数,这样会使得随机数并不随机)
3.打印一个菜单,提示我们选择什么开始游戏
4.用input接受玩家输入的信息(根据输入的特点可以直接作为do while里面的判断部分)
5.对玩家输入信息分类处理,用switch case语句()
6.game函数的主体设计:生成随机数;玩家猜数字;进行两者的判断,并给出反馈;猜对了退出,没猜对就继续猜。这样整体架构就设计完了
7.当然也可以适当的优化一点功能:比如设置猜的次数;在规定次数内猜不到牌会有惩罚等等,这就靠大家自己发挥了
标签:rand,练习,游戏,int,time,C语言,种子,printf,输入 From: https://blog.csdn.net/2403_87718362/article/details/143088869