使用C语言实现超简单的推箱子游戏!
感谢您打开了这篇文章,下面我将讲述一下推箱子是如何实现的。
虽然我个人水平有限,但还是希望分享的内容能够帮助到大家!
如果您喜欢我的文章可以点赞支持一下。
如果您对我的程序有什么意见和建议欢迎在评论区发表评论。
另外附赠完美适配简单好用 专属推箱子地图编辑器
链接:
int:C语言 推箱子游戏 地图编辑器(简单好用)zhuanlan.zhihu.com
本程序在没有检测到地图文件的情况下也能独自运行!代码中储存了推箱子游戏第一关的标准地图,让您在没有地图文件的情况下也能熟悉整个程序的流程。
当然,拥有地图文件会也会获得更好的游戏体验,请自行编辑。
下面进入技术环节:
C语言版 多功能推箱子
编译环境: Windows VS2019
其他编译器,可通过查看下文的“注意事项”将代码更正为其他平台可正常版本
需求:
控制人物将箱子推至目标中,目标全部完成进入下一关。
思路:
使用二维数组储存不同数字,数字包括了地图中所有的元素,通过按键控制人物完成推箱子的操作,达成关卡内的所有目标后,自动进入下一关。
做法:
主要逻辑移动推箱子部分:按下方向键后,双重循环找到人物,根据移动方向储存 人物、人物前面、箱子、箱子前面四大基础信息,并通过判断前方数组值是否是墙壁、目标等,进行人物移动和箱子移动操作。
具体详细做法我已经整理到了代码注释当中,以便一一对应查看。
使用到知识点:
循环、二维数组、读取文件
难点:
在人物和箱子移动的同时,有需要注意当人物移动到了未完成目标或已完成目标、箱子移动到了已完成目标的情况,这种情况需要判断在人物/箱子离开之后,原地又再次变为原元素。
说明:
程序前部分有较多代码用于写出未检测到文件的情况逻辑和关卡选择逻辑,如果要直接查看核心代码请移动到operation();操作人物函数和gbszszhs(char ch);修改二维数组函数。
注意:
由于编译器原因程序中_kbhit()和_getch()函数可能在其他编译器上编译会出现错误,解决办法是去掉函数前面的“_”。
同时,要将 文件打开函数fopen_s(&fp, FLPA, "r");更改为fp = fopen(FLPA, "r");
fcanf_s更改为fcanf scanf_s()更改为scanf
运行效果:
菜单选择
游戏进行
代码实现:
#include
主要函数:gbszszhs()里面的逻辑是比较复杂的,我当时写这段代码的时候也是反反复复修改好多次甚至推翻重做才理通顺这些逻辑的。
如果对于程序代码注释有我没写明白的地方,欢迎在评论区下方留言询问,如果我看到会尽最大的努力为您解惑。
不足之处:
地图在屏幕上显示时容易出错,需要调整每关字数。原因并不明确。
因为作者对C语言的学习还比较浅薄,代码写到初始化游戏的两种模式(有文件和无文件)时思维有些混乱,导致代码在这一部分有很多的缺陷,但最终程序的效果还是出来了。但其实对整篇所有代码而言最重要的部分还是gbszszhs()函数,只要将这个函数完全理解并熟练掌握了,那么整个“推箱子”游戏也就非常简单了。
如果这篇文章帮助到了您,我感到非常荣幸。
我真心希望这个世界上所有正在努力拼搏的人最终都能够有一个很好的归宿。
在今后我还会分享很多有用的经验博客。如果您愿意可以关注我,我们共同进步。
最后,感谢所有愿意对我提出批评和建议的人,你们的支持是我坚持下去的强大动力!