问题:
你好,欢迎来到数字爆炸,系统随机生成一个数字,猜大了,提示猜大了,猜小了,提示猜小了。
思路:
- 先写游戏大概思路
- 首先,会有菜单吧,所以先写一个菜单函数,显示菜单的内容。
- 然后选择菜单中的选项,不同的选项,对应不同的功能,因此这个用switch实现最好。
- 而想要一直玩,选择退出才结束,则,来一个do while循环,因为先出菜单,再选择,所以选择do while;
- 如果选择进入游戏,则进入游戏函数,
- 游戏函数开始,随机生成一个数字,rand()函数为随机生成数字。但由于范围过大,我们想生成0到100内的数字,给随机生成的数字取模(即取余数)%100,这个所求的肯定在0-99内,因为大于100的,我都出除走了。因为想出现100,所以再+1.因此总体语句为:int ret = rand() % 100 + 1;
- 但rand函数要求需要一个随机数的起始地址。这时候需要用到srand()函数,他会提供一个随机数的起始地址,保证不会乱跳。而srand()函数内部,需要提供一个一直变化的量,而电脑时间就是一直变的,因此,用time(NULL)函数最合适,又因为time返回time_t类型,即long long类型,但srand需要unsigned int类型,所以给time强制转化即srand((unsigned int)time(NULL));这里需要注意,srand提供的随机数起始位置,调用一次就好,因此在主函数开始,调用即可。
- 之后便进行游戏即可。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("********************\n");
printf("1-开始游戏\n");
printf("2-退出\n");
printf("********************\n");
}
void game()
{
int ret = rand()%100+1;
printf("%d\n", ret);
Sleep(50);
system("cls");
int n = 0;
while (1)
{
printf("请输入你猜的数字\n");
scanf("%d", &n);
if (n == ret)
{
printf("我靠,牛皮,猜对了\n");
printf("\n还想再来一局不,搏一搏,单车变摩托\n");
printf("再来一局(1/0):");
int choose = 0;
scanf("%d", &choose);
if (choose == 1)
{
game();
}
break;
}
else if (n < ret)
printf("猜小了啊,老铁\n");
else if (n > ret)
printf("猜大了,铁子\n");
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择选项\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 2:
break;
default:
printf("选项不存在,请重新输入\n");
break;
}
} while (input != 2);
}
结果如下: