提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在掌握基础知识后,学习编程最重要的就是实操,这里给大家演示一个简单的猜数字小游戏,希望大家好好学习,以达到对知识的巩固
1.游戏规则
1.产生一个1~100的随机数
2.玩家对数字在键盘上进行猜测,如果玩家猜对就直接退出游戏,如果没猜对,对玩家进行猜大 或者猜小进行提示。
3.玩家玩完一次游戏后玩家可以决定是否继续游戏
2.编写思路
1.打印一个菜单。
2.实现游戏功能
3.游戏优化
1.打印菜单
编写菜单函数以实现玩家页面的选择
void mune()
{
printf("*********************\n");
printf("***** 1:play ******\n");
printf("***** 0:exit ******\n");
printf("*********************\n");
}
实现效果
2.实现游戏
1.主函数编写
do-while豫剧的使用的为了在每次游戏结束后都能实现函数菜单的打印,利用swich语句选择玩家是否继续进行游戏。
int main()
{
srand((unsigned int)time(NULL));
int j;
do
{
mune();
scanf("%d",&j);
switch(j)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default :
printf("输入错误\n");
break;
}
}while(j);
return 0;
}
2.游戏函数编写
void game(){
int b=rand()%100+1;
int c=0;
while(1)
{
printf("输入你猜的数字:");
scanf("%d", &c);
if(c>b)
{
printf("猜大了\n");
}
else if(c==b)
{
printf("恭喜你,答对了\n");
break;
}
else
{
printf("猜小了\n");
}
}
}
首先是产生随机数,对于随机数的产生这里我要给大家进行几个函数的介绍
rand函数
此处注解中说名在rand是使用前要使用srand对伪随机数生成种子,rand函数本身并不能产生绝对的随机数,接下来我和大家演示
#include<stdio.h>
#include<stdlib.h>
int main()
{ int i=0;
while(i<=9)
{
int b=rand()%100+1;
printf("%d ",b);
i++;
}
return 0;
}
此处我们随机打印10个1~100的随机数,结果如下
大家可以看到其实产生的随机数是随机的,但是我为什么说此处不够随机呢,此处我们关闭程序再调用一次。
大家可以看到两次调用产生的随机数是完全一模一样的,这就让我们的游戏有着局限性,也就是每次产生的随机数是不够随机的,那我们怎么解决这个问题呢,接下来我们介绍另一个函数。
srand函数
这里我们可以了解到srand函数是设置 rand
函数使用的伪随机数生成器的起始种子值。此处我给大家演示一下srand函数的功能。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i=0;
while(i<=9)
{srand(99);
int b=rand()%100+1;
printf("%d ",b);
i++;
}
return 0;
}
结果如下
此处我们看到该每次产生的值都是一样的,这里说明给一个固定的值给srand函数并不能每次产生一个随机数,那我们怎么给一个随机值给srand函数呢,这里我们给大家介绍一个新的函数。
time函数
从上我们可以看出time返回值是根据时间判定的,那把time函数赋予srand函数我们每次就可以设置 不同rand
函数使用的伪随机数生成器的起始种子值。从而每次产生不同的随机数演示如下。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int i=0;
srand((unsigned int)time(NULL));
while(i<=9)
{
int b=rand()%100+1;
printf("%d ",b);
i++;
}
return 0;
}
第一次调用结果
第二次调用
这里我们可以观察到每次产生的值都是随机的,上面我们可以知道srand的参数类型是unsigned int类型,所以这里要进行强制转换。随机数产生后我们仅需要进行进行判断即可。
总代码
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void mune()
{
printf("*********************\n");
printf("***** 1:play ******\n");
printf("***** 0:exit ******\n");
printf("*********************\n");
}
void game(){
int b=rand()%100+1;
int c=0;
while(1)
{
printf("输入你猜的数字:");
scanf("%d", &c);
if(c>b)
{
printf("猜大了\n");
}
else if(c==b)
{
printf("恭喜你,答对了\n");
break;
}
else
{
printf("猜小了\n");
}
}
}
int main()
{
srand((unsigned int)time(NULL));
int j;
do
{
mune();
scanf("%d",&j);
switch(j)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default :
printf("输入错误\n");
break;
}
}while(j);
return 0;
}
演示:
3.游戏优化
为了每次游戏结束后能够清空屏幕以实现更好的游戏效果,我们引进system函数
system函数
system函数是执行系统命令的,头文件是window.h,此处我们添加系统命令”cls“(用于清空屏幕)。
代码如下
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
void mune()
{
printf("*********************\n");
printf("***** 1:play ******\n");
printf("***** 0:exit ******\n");
printf("*********************\n");
}
void game(){
int b=rand()%100+1;
int c=0;
while(1)
{
printf("输入你猜的数字:");
scanf("%d", &c);
if(c>b)
{
printf("猜大了\n");
}
else if(c==b)
{
printf("恭喜你,答对了\n");
system("cls");
break;
}
else
{
printf("猜小了\n");
}
}
}
int main()
{
srand((unsigned int)time(NULL));
int j;
do
{
mune();
scanf("%d",&j);
switch(j)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default :
printf("输入错误\n");
break;
}
}while(j);
return 0;
}
此处就不加以演示。