作者:BaoBao佳佳佳 | 来源:互联网 | 2023-01-29 18:17
本文主要介绍关于c语言,算法,开发语言的知识点,对【赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏】和【c语言编写1到100的猜数游戏程序】有兴趣的朋友可以看下由【牛牛要坚持】投稿的技术文
本文主要介绍关于c语言,算法,开发语言的知识点,对【赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏】和【c语言编写1到100的猜数游戏程序】有兴趣的朋友可以看下由【牛牛要坚持】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的相关技术问题。
c语言编写1到100的猜数游戏程序
刚学编程面对着黑框框的界面,面对做不完的编程题,是不是觉得枯燥无味,你敲得每一个代码都有用,都在给自己打好基础,建一栋高楼大厦,最开始就要耐心打好地基,今天来点有趣的,让我们来用c语言基础知识实现一个猜数字小游戏吧~
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/941da64d8e6d61e5.gif)
猜数字游戏 猜数字游戏思路↓↓猜数字游戏实现思路猜数字游戏要用到的知识点 猜数字游戏整体实现↓↓↓1.构建游戏运行框架2.游戏选择菜单实现3.游戏过程具体实现 游戏优化猜数字游戏源代码展示
猜数字游戏思路↓↓ 猜数字游戏实现思路
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示猜大了(“Too big”),还是猜小了(“Too small”),相等表示猜到了。 如果猜到,则结束程序。 程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。
猜数字游戏要用到的知识点
实现猜数字游戏需要掌握 while、do–while循环结构,Switch–case 和if–else分支结构、(对于结构不熟悉的可以看我上一篇博客,坐稳扶好单击右方传送门)→传送门,库函数(rand、srand)、自定义函数,这里简单提到函数章节,在下一篇博客会详细讲解函数。
猜数字游戏整体实现↓↓↓ 1.构建游戏运行框架
游戏没有运行框架是没有灵魂的,它就像树没有皮,人没有好看的衣服~游戏也是需要包装的,这样看起来高端上档次。
所谓框架就是用户第一次运行时能弹出可视化菜单,供玩家选择是否玩游戏,如果选择玩游戏,则开始运行游戏,如果选择不玩则结束程序,而玩家玩完一次不过瘾,应再提供一次菜单选择,供玩家继续选择玩还是不玩游戏。
#include
void menu()
{
}
void game()
{
}
int main()
{
int input = 0;
do
{
menu();
printf("输入数字选择对应功能\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default :
printf("无效选择请重新输入\n");
break;
}
} while (input==1||input!=0);
return 0;
}
上面框架使用了do—while循环,特点是不用判断表达式直接先进入一次循环 此时出现了菜单函数,为了便于维护和提高可视化效果,菜单列标封装在了函数里,通过运行menu()实现菜单功能,同样游戏功能也被封装在game()函数里实现运行游戏的功能。
2.游戏选择菜单实现
菜单就像门面,可以给用户选择,实现人性化操作~下面看代码
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/5f13d75b0c5f8c3e.png)
在menu函数里用两个printf()函数实现向终端屏幕输出字符 达到输出菜单的效果,实现效果展示↓↓
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/77a3ee81faf37377.png)
此时达到了输出菜单的效果,然后供用户选择。
3.游戏过程具体实现
打起精神,重点来了!!!
首先我们要使系统内部产生一个1-100的正整数,我们要用到rand()库函数,使用库函数我们得了解这个函数的用法!
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/dfa3495162f67cc0.png)
这个函数返回类型是int,参数为空,表示运行该函数会生成一个伪随机整数,
首先我们要设置返回值在1-100间
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/c48b4681f68cca56.png)
通过转定义发现该函数最后返回的数是在0-32767之间,所以我们可以通过运行此函数得到该区间的数再模上100加1最后得到1-100间的数字。
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/ec2653a9c917d216.png)
此时实现了 电脑内部生成一个1-100的数字↑
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/306c52aad8b4c879.png)
通过while(1)表达式为真一直循环玩家输入数字然后使两数比较↑↑ 当最后相等则游戏结束下面看运行代码
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/569698ada01092d6.png)
通过此思路实现了要达到的效果,但是再进行玩一次游戏时又得到了个不好的效果
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/1c1e197b79f1d72a.png)
每次程序启动第一个猜的数一直是42,这游戏就有bug了,此时进行一个简单的测试
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/f569f240d18837e4.png)
发现虽然是随机了,但是每次运行程序都是42开始然后根据规律随机的一系列数字都是一样的,用户每次玩游戏只要记住了这一串数字就不用猜了,所以这种伪随机达不到想要的结果。
因此,我们还需要一个srand()函数 用来设置rand()函数随机数的起点值,
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/6984bbb229478322.png)
此函数实现是通过传递的参数 将其作为rand的起点值即rand()第一次生成的数字,因此使用这个函数先用常数1作为参数测试一下↓
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/ed22a2b15586a536.png)
发现该函数srand(1)使得rand的起点数设置为了42 但每次运行时都给其设置的42 又没有了随机的效果,那我们想使srand()里面的参数为一个随机数,然后才使rand生成的数是一个随机数要怎么做呢,此时我们可以用时间戳作为参数放到srand中,因为时间的不断变化的,因此每次运行srand得到的值都是不同的使得rand里面的数也不同,达到随机的效果,而使用时间戳要用到time库函数。
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/e26565a180f9ccb7.png)
通过这个描述我们可以简单设置这个函数实现为(unsigned) time(NULL),因为参数需要指针此时可以设一个空指针使其得到当前时间,而为了防止得到的数字是负数将其强制类型转化为无符号整数,使其为一个正数。
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/ccfc2939d9af6b97.png)
简单测试后发现确实每个数都随机了,但是随机的数之间间隔都太短了,检查发现是因为每次进行游戏都运行了srand使得改变了rand随机起点数而srand每次是根据时间戳变化,猜数字时间间隔断导致每次生成的数字都太相近,此时我们只要将srand函数移至运行程序进入do–while循环前即可,表示运行此游戏以当前时间戳设置rand随机起点值,然后rand每次运行都会得到不同的数并且数字间隔不会太小。
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/193a164dd66187c9.png)
此时程序已经整体达到了游戏实现的效果~
注意:警告显示time srand rand 未定义 ,这是因为引用这三个库函数要包含对应的头文件
time的头文件为 time.h srand 和rand的头文件为 stdlib.h
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/edd44527123859e1.png)
游戏优化
光猜随机数一直猜下去总会猜到,我们可以做一个小小优化,比如猜中后显示猜数字花了几次,并且可以增加难度当猜数字猜了5次还没猜中则游戏失败重新生成一个随机数,这样使得游戏更有趣~
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/41679e1013be646e.png)
此设置给 猜中数字后显示猜数字次数提高人性化,猜10次数字没猜中游戏失败给游戏增加了难度。
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/23fd64d4c35661aa.png)
当我再进行游戏测试时发现,此设置是输入数字选择功能,但是输入一个字母会使得直接出现意想不到的结果,秉着做到最好,不写bug的习惯,我打算将这种情况优化了。以下优化仅供参考,因为以后这个游戏设计不会有输数字给你数字母的情况。
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/26525fb90d838c45.png)
此设计将输入选项设置为字符型,将对应的case入口 设置为字符常量 ,当读取到第一个字符时 此时缓冲区还有其他字符或者\n存在 此时用while循环 表达式里用getchar()函数将输入缓冲区内的无效字符都读取掉,并当读取的第一个字符开始不是回车字符时 将input里的值设为0表示 表示此时input里的值不能调用 开始游戏和退出游戏入口 只能进入默认选项。
作者水平有限,优化暂时到这里了~
最后,将输出系统生成的随机数那行代码删除,否则玩这个游戏每次都可以显示系统数字就跟开挂一样,毕竟这只是后台设置时为了方便调试而写的,真正运行起来,玩家是不能看到该数字的
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/1bf0d2f2c2ff4d8b.png)
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/2d205efabdea0e07.gif)
猜数字游戏源代码展示
猜数字源代码已公布↓↓↓ 快去自己电脑上试试吧
#include
#include
#include
void menu()
{
printf("**********1.play***********\n");
printf("**********0.exit***********\n");
}
void game()
{
int count = 1;
int cp = rand()%100 + 1;
int num = 0;
while (count<=10)
{
printf("输入你要猜的数字:");
scanf("%d", &num);
if (num > cp)
{
printf("数字猜大了\n");
count++;
}
else if (num < cp)
{
printf("数字猜小了\n");
count++;
}
else
{
printf("猜对了!你花了%d次猜中该数字\n",count);
count = 0;
break;
}
}
if (count == 11)
{
printf("您猜了10次还没猜中,游戏失败\n");
getchar();
}
}
int main()
{
srand((unsigned)time(NULL));
char input = 0;
do
{
menu();
printf("输入数字选择对应功能\n");
scanf("%c", &input);
while (getchar() != '\n')
{
if(input=='1'||input=='0')
input = 0;
}
switch (input)
{
case '1':
game();
break;
case '0':
printf("退出游戏\n");
break;
default :
printf("无效选择请重新输入\n");
break;
}
} while (input == '1' || input != '0');
return 0;
}
作者水平有限,有什么不对的地方,还请大佬指正,我定当虚心采纳,第一时间更正
制作不易,给个一键三连吧~~~
![赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏](https://img1.php1.cn/3cd4a/24de0/cd5/5536448380999909.webp)
本文《赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏》版权归牛牛要坚持所有,引用赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏需遵循CC 4.0 BY-SA版权协议。