热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏

本文主要介绍关于c语言,算法,开发语言的知识点,对【赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏】和【c语言编写1到100的猜数游戏程序】有兴趣的朋友可以看下由【牛牛要坚持】投稿的技术文

本文主要介绍关于c语言,算法,开发语言的知识点,对【赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏】和【c语言编写1到100的猜数游戏程序】有兴趣的朋友可以看下由【牛牛要坚持】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的相关技术问题。

c语言编写1到100的猜数游戏程序

刚学编程面对着黑框框的界面,面对做不完的编程题,是不是觉得枯燥无味,你敲得每一个代码都有用,都在给自己打好基础,建一栋高楼大厦,最开始就要耐心打好地基,今天来点有趣的,让我们来用c语言基础知识实现一个猜数字小游戏吧~

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏

猜数字游戏 猜数字游戏思路↓↓猜数字游戏实现思路猜数字游戏要用到的知识点 猜数字游戏整体实现↓↓↓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:                    //当为1时运行自定义游戏函数
			
			game();
			break;              //结束分支

		case 0:
			printf("退出游戏\n");        //为0时退出游戏
			break;
		default :
			printf("无效选择请重新输入\n");      //选项以外的选择提示错误重新输入
			break;
		}
	
	
	
	} while (input==1||input!=0);        //当为表达式里选项为1或者不为0时 会重新进入循环
	
	return 0;
}

上面框架使用了do—while循环,特点是不用判断表达式直接先进入一次循环 此时出现了菜单函数,为了便于维护和提高可视化效果,菜单列标封装在了函数里,通过运行menu()实现菜单功能,同样游戏功能也被封装在game()函数里实现运行游戏的功能。

2.游戏选择菜单实现

菜单就像门面,可以给用户选择,实现人性化操作~下面看代码

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


在menu函数里用两个printf()函数实现向终端屏幕输出字符 达到输出菜单的效果,实现效果展示↓↓

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


此时达到了输出菜单的效果,然后供用户选择。

3.游戏过程具体实现

打起精神,重点来了!!!
首先我们要使系统内部产生一个1-100的正整数,我们要用到rand()库函数,使用库函数我们得了解这个函数的用法!

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏

这个函数返回类型是int,参数为空,表示运行该函数会生成一个伪随机整数,
首先我们要设置返回值在1-100间

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


通过转定义发现该函数最后返回的数是在0-32767之间,所以我们可以通过运行此函数得到该区间的数再模上100加1最后得到1-100间的数字。

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


此时实现了 电脑内部生成一个1-100的数字↑

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


通过while(1)表达式为真一直循环玩家输入数字然后使两数比较↑↑ 当最后相等则游戏结束下面看运行代码

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


通过此思路实现了要达到的效果,但是再进行玩一次游戏时又得到了个不好的效果

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


每次程序启动第一个猜的数一直是42,这游戏就有bug了,此时进行一个简单的测试

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


发现虽然是随机了,但是每次运行程序都是42开始然后根据规律随机的一系列数字都是一样的,用户每次玩游戏只要记住了这一串数字就不用猜了,所以这种伪随机达不到想要的结果。
因此,我们还需要一个srand()函数 用来设置rand()函数随机数的起点值,

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


此函数实现是通过传递的参数 将其作为rand的起点值即rand()第一次生成的数字,因此使用这个函数先用常数1作为参数测试一下↓

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


发现该函数srand(1)使得rand的起点数设置为了42 但每次运行时都给其设置的42 又没有了随机的效果,那我们想使srand()里面的参数为一个随机数,然后才使rand生成的数是一个随机数要怎么做呢,此时我们可以用时间戳作为参数放到srand中,因为时间的不断变化的,因此每次运行srand得到的值都是不同的使得rand里面的数也不同,达到随机的效果,而使用时间戳要用到time库函数。

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


通过这个描述我们可以简单设置这个函数实现为(unsigned) time(NULL),因为参数需要指针此时可以设一个空指针使其得到当前时间,而为了防止得到的数字是负数将其强制类型转化为无符号整数,使其为一个正数。

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


简单测试后发现确实每个数都随机了,但是随机的数之间间隔都太短了,检查发现是因为每次进行游戏都运行了srand使得改变了rand随机起点数而srand每次是根据时间戳变化,猜数字时间间隔断导致每次生成的数字都太相近,此时我们只要将srand函数移至运行程序进入do–while循环前即可,表示运行此游戏以当前时间戳设置rand随机起点值,然后rand每次运行都会得到不同的数并且数字间隔不会太小。

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


此时程序已经整体达到了游戏实现的效果~
注意:警告显示time srand rand 未定义 ,这是因为引用这三个库函数要包含对应的头文件
time的头文件为 time.h srand 和rand的头文件为 stdlib.h

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏

游戏优化

光猜随机数一直猜下去总会猜到,我们可以做一个小小优化,比如猜中后显示猜数字花了几次,并且可以增加难度当猜数字猜了5次还没猜中则游戏失败重新生成一个随机数,这样使得游戏更有趣~

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


此设置给 猜中数字后显示猜数字次数提高人性化,猜10次数字没猜中游戏失败给游戏增加了难度。

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


当我再进行游戏测试时发现,此设置是输入数字选择功能,但是输入一个字母会使得直接出现意想不到的结果,秉着做到最好,不写bug的习惯,我打算将这种情况优化了。以下优化仅供参考,因为以后这个游戏设计不会有输数字给你数字母的情况。

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏


此设计将输入选项设置为字符型,将对应的case入口 设置为字符常量 ,当读取到第一个字符时 此时缓冲区还有其他字符或者\n存在 此时用while循环 表达式里用getchar()函数将输入缓冲区内的无效字符都读取掉,并当读取的第一个字符开始不是回车字符时 将input里的值设为0表示 表示此时input里的值不能调用 开始游戏和退出游戏入口 只能进入默认选项。
作者水平有限,优化暂时到这里了~
最后,将输出系统生成的随机数那行代码删除,否则玩这个游戏每次都可以显示系统数字就跟开挂一样,毕竟这只是后台设置时为了方便调试而写的,真正运行起来,玩家是不能看到该数字的

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏

猜数字游戏源代码展示

猜数字源代码已公布↓↓↓ 快去自己电脑上试试吧

#include
    
#include
    
#include
    
void menu()
{
   
	printf("**********1.play***********\n");
	printf("**********0.exit***********\n");
}
void game()
{
   
	int count = 1;
	int cp = rand()%100 + 1;            // 得到一个1-100间的整数数 存储在一个变量中 此变量为电脑内部生成的数字
	/*printf("%d", cp);*/              //显示系统生成的数字
	int num = 0;
	
	while (count<=10)                         //一个while循环 使 输入的数字和电脑系统生成的数字比较,大了提示猜大了,小了提示猜小了,重新循环输入数字比较,直到相等提示猜对了
	{
   
		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');           //input里的结果为字符1 或者不为字符0时表达式为真进入循环
	
	return 0;
}

作者水平有限,有什么不对的地方,还请大佬指正,我定当虚心采纳,第一时间更正

制作不易,给个一键三连吧~~~

赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏

本文《赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏》版权归牛牛要坚持所有,引用赶紧进来!!!用c语言基础知识几十行代码写一个猜数字小游戏需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
author-avatar
BaoBao佳佳佳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有