游戏整体框架
首先我们需要制作一个建议菜单:
void menu()
{
printf("**************************************\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("**************************************\n");
}
接着我们来思考游戏是怎么运行的,游戏开始或退出需要用户输入指令,我们可以使用switch语句,用户玩完一把游戏之后,我们可以让菜单再次出现,再次输入指令是否继续,这里使用do while 循环语句。
int main()
{
srand((unsigned int)time(NULL));
printf("欢迎来到猜数字游戏\n所猜数字的范围从 1 到 100\n");
int input;
do
{
menu();
printf("请输入数字指令--->");
scanf("%d", &input);
switch (input)
{
case 1:
game();
printf("现在您可以选择退出游戏或继续游玩\n");
break;
case 0:
printf("退出游戏,欢迎您下次游玩。\n");
break;
default:
printf("没有该指令,请重新输入--->\n");
break;
}
} while (input);
return 0;
}
最后就是自由发挥了,这里我写了用户可以自行选择猜数数字的代码。如果用户输入的数字超过游戏范围,我这里会进行提醒操作。
随机数的生成
这个游戏的精华就是随机数的生成了,下面我来介绍三个函数:
rand
rand是用来生成随机数的,头文件是stdlib.h
上面也有代码例子介绍如何使用。
rand()%100
%是取余,rand随机数生成的范围是:0~RAND_MAX(这个大小是由编译器决定的,大多数编译器时32767) %100就是生成0到99的数字,游戏里我设置时1到100的范围,就是说我们需要+1,这样就是生成1~100的随机数了。
int num = rand() % 100 + 1;//生成1到100的随机数
但是rand有一个缺陷:
就是它并不是生成真正的随机数,也就是说这个数字并不随机,rand生成随机数时依赖相应的算法的,其中rand是以随机数种子为基准值来生产随机数的,所以只要种子是变化的,每次随机数就会不一样,这就需要下面两个函数的加持了。
srand
srand头文件也是stdlib.h
srand函数是来初始化随机数种子的,出现在调用rand 之前都会先调用srand,srand函数中的参数seed就是来设置随机数的种子的,所以只要让种子变化就可以实现随机了。如何让种子变化,请看time函数。
time
在程序中程序运行时间是变化的,因此我们考虑将程序运行的时间作为种子
time函数的头文件为time.h
代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("**************************************\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("**************************************\n");
}
void game()
{
int num = rand() % 100 + 1;//生成1到100的随机数
int n = 0;
printf("您可设置猜数的数字,请您输入猜数的次数--->");
int cs = 0;
do
{
scanf("%d", &cs);
if (cs <= 0)
{
printf("我想您肯定在开玩笑,能重新输入一下猜数次数吗?\n请您输入猜数次数--->");
}
} while (cs <= 0);//确保用户输入的输入次数合法
int count = cs;
printf("请您输入您心中所想的数字吧--->");
while (count)
{
do
{
scanf("%d", &n);
if (n <= 0 || n >= 100)
{
printf("输入数字有误,请您重新输入--->");
}
} while (n <= 0 && n > 100);// 确保用户输入正确的数字
if (n > num)
{
printf("数字猜大了\n");
}
else if (n < num)
{
printf("数字猜小了\n");
}
else
{
printf("恭喜您猜对了,获得游戏胜利!!!\n");
break;
}
count--;
}
if (count == 0)
{
printf("真正的数字是 %d\n虽然游戏失败了,但您也要保持一颗快乐的心哦!\n欢迎您下次挑战.\n",num);
}
}
int main()
{
srand((unsigned int)time(NULL));
printf("欢迎来到猜数字游戏\n所猜数字的范围从 1 到 100\n");
int input;
do
{
menu();
printf("请输入数字指令--->");
scanf("%d", &input);
switch (input)
{
case 1:
game();
printf("现在您可以选择退出游戏或继续游玩\n");
break;
case 0:
printf("退出游戏,欢迎您下次游玩。\n");
break;
default:
printf("没有该指令,请重新输入--->\n");
break;
}
} while (input);
return 0;
}