前言
在掌握基础知识后,学习编程最重要的就是实操,这里给大家演示一个简单的猜数字小游戏,希望大家好好学习,以达到对知识的巩固
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; }