1~100以内猜数字游戏
一、猜数字的实现思路
难点:随机数的产生和循环语句、分支语句的运用
二、随机数的产生
2.1 函数 int rand(void):生成一个随机的整数,范围为0~RAND_MAX(具体指看编译器)不需要 参数,函数返回类型为整型
函数的具体简介:
但这样产生的随机数在每次执行代码时产生的随机数一致。这样每次所猜数字的值都一样,那这个游戏就没有趣味性了。例:
根据我们的需求,我们需要的随机数需要完全随机,没有规律可言,这里我们就可以将随机数与时间结合起来,时间是在不断改变的,这里就产生了时间戳的概念。怎样才能将时间和产生的随机数结合起来呢?
查看 rand()函数的用法,在调用 rand()函数之前可以调用 srand()来 生成随机数的生成器。
2.2 函数 void srand(unsigned int seed):该函数没有返回值,传参的时候需要传一个无符号的整形。 函数作用是设置一个随机开始的起点,如果每次运用该函数都需要进行传参,那么每需要一个随机数就要传一个数字,这样就不方便。例:
int main()
{
srand(999);
int ret = rand();
printf("%dn", ret);
return 0;
}
所以我们需要传一个值,这个值会不断地变化,这样就可以联想到时间是不断地改变。
时间戳:每一个时间相对应计算机起始时间的差值,单位是秒,只要时间改变,对应的时间戳就在改变。可以通俗地理解为每一个时间对应一个不同的数值。
2.3 生成时间戳:需要用到 time_t time( time_t *timer ) 函数
time_t time( time_t *timer )函数:函数的返回值就是时间戳,其类型是,返回的就是时间戳,需 要传参的是一个指针,如果不需要用参数的时候可以传一个空 指针NULL
time_t:是C语言规定的一种类型,是一个long long的整型
我们在对srand传参的时候需要传一个无符号的整型,所以需要对time的返回值进行强制类型转换。产生随机数的代码为:
#include#include int main() { srand((unsigned int)time(NULL)); int i= 0; for (i = 1; i <= 10; i++) { int ret = rand(); printf("第%d个随机值为:%dn",i, ret); } return 0; }
随机数:
三、游戏代码思路
1.打印游戏菜单界面
2选择是否玩游戏,选择是否不符合选项
3.猜数字,与生成的随机数进行比较
4.游戏结束,再次选择是否玩游戏
代码:
#define _CRT_SECURE_NO_WARNINGS #include#include #include void menu() { printf("*************************n"); printf("******* 0.退出游戏 ******n"); printf("******* 1.开始游戏 ******n"); printf("*************************n"); } void game() { int n = 0; int ret = rand()%100+1; while (1) { printf("请猜数字>:"); scanf("%d", &n); if (n > ret) { printf("猜大了n"); } else if (n < ret) { printf("猜小了n"); } else { printf("恭喜你,猜对了!!!n"); break; } } } int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("请选择>:"); scanf("%d", &input); switch (input) { case 0: printf("退出游戏n"); break; case 1: game(); break; default: printf("选择错误,请重新选择n"); break; } } while (input); return 0; }
四、带有关机惩罚的猜数字游戏
若猜数字5次以后还没有猜中,将进入惩罚。
#define _CRT_SECURE_NO_WARNINGS #include#include #include #include void menu() { printf("*************************n"); printf("******* 0.退出游戏 ******n"); printf("******* 1.开始游戏 ******n"); printf("*************************n"); } void game() { int n = 0; int i = 5; int ret = rand()%100+1; while (i) { printf("请猜数字>:"); scanf("%d", &n); i--; //用来调整while()中真假 if (n > ret && 0 != i) { printf("猜大了,你还有%d次机会n",i); } else if (n < ret && 0 != i) { printf("猜小了,你还有%d次机会n", i); } else if(n==ret) { printf("恭喜你,猜对了!!!n"); break; } if (i == 0) { char arr[20] = { 0 }; printf("5次机会已经用完,你的电脑将在30秒后关机,输入“我是猪”后取消关机n"); system("shutdown -s -t 30"); while (1) { scanf("%s", arr); if (strcmp(arr, "我是猪") == 0) { system("shutdown -a"); break; } else { printf("回答错误n"); } } } } } int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("请选择>:"); scanf("%d", &input); switch (input) { case 0: printf("退出游戏n"); break; case 1: game(); break; default: printf("选择错误,请重新选择n"); break; } } while (input); return 0; }



