![0052efaf8fc23c14c7b4117d8a534bfa.png](https://i-blog.csdnimg.cn/blog_migrate/9ad0aa0f7c9e937cb0db1873c895dbcb.jpeg)
使用C语言和EGE图形库实现简单精美的推箱子小游戏
如果您喜欢我的文章可以点赞支持一下。
如果您对我的程序有什么意见和建议欢迎在评论区发表评论。
这是我目前为止写的,无论从时间上还是从工程量上来说都是最长的一个小程序。
从初学EGE到攻克所有的技术难点,总共历时五天。
全代码一千一百多行。
在此向帮助过我解决问题的陌生人和老师表示由衷的感谢。
首先展示几张程序的运行效果:
主菜单界面
![bd56a34b88ae0ae6e7ff7da0f8fdb6f7.png](https://i-blog.csdnimg.cn/blog_migrate/1f8f3cfb40806487495705edee4c2e58.jpeg)
游戏进行中界面:
![2634ef932e78ac81364306f561efcc81.png](https://i-blog.csdnimg.cn/blog_migrate/e4934d268b0091c75d0194ae63bfb7fb.jpeg)
![12b3060c951396af11a3e3475852ac08.png](https://i-blog.csdnimg.cn/blog_migrate/b62f44a30be48d2c3530dda30805c27c.jpeg)
![7fd4bdf09c8e4ff207261d8dcb92c80e.png](https://i-blog.csdnimg.cn/blog_migrate/ec2ef8498a97373dcbb4aaed7ec54e28.jpeg)
关卡选择界面
![07b76b1a61a3d3f43cd912a19f08e449.png](https://i-blog.csdnimg.cn/blog_migrate/880fa80d40344d13e15600f25e0a0817.jpeg)
游戏商城界面
![0b391bbdf7e44a75e76542f1319e602a.png](https://i-blog.csdnimg.cn/blog_migrate/0e94ffca47d3499106badd1ea8e0cca7.jpeg)
地图编辑器界面
![37ab86ce81fb2f5b40dcdce01a80ce83.png](https://i-blog.csdnimg.cn/blog_migrate/8f48b089ab3aa6c65ef98a5256081081.jpeg)
程序中除操控人物移动外所有操作均使用鼠标操作
下面进入技术环节:
C语言 EGE实现图形界面版推箱子
编译环境: Windows VS2019
其他编译器,可通过查看下文的“注意事项”将代码更正为其他平台可正常版本
需求:
界面之间互相跳转、选择关卡、控制人物移动推箱子、游戏商城、地图编辑器
思路:
使用EGE库函数在图形界面上画出图片。使用三维数组存储所有关卡。
使用wasd键控制地图数组中的值,根据值的改变实现界面的改变。
地图编辑器根据鼠标移动到的像素坐标判断他属于哪一个格子,鼠标点击则再改格子的位置画出相应图片。
做法:
游戏部分:双重循环找出二维数组中人物的位置,并根据按键和条件改变数组中的值,然后根据数组中的值画出这个数组所对应的地图。
编辑器部分:以格子宽度,通过将循环初始值0加格子边框距离边界的像素值,小于这个像素值加总的格子的宽度,最后内外层循环各循环16次,再根据这个像素值区分鼠标当前坐标所在的格子区域的xy坐标,当鼠标点击左键时在对应xy处画出对应图片。
具体详细做法清查看代码。
使用到知识点:
三维二维数组,写入文件,函数之间相互调用,EGE相关操作
难点:
EGE各种函数的使用
函数之间相互调用
根据按键改变数组中的值
编辑器循环确定鼠标对应网格坐标(不在左上角的情况)
说明:
在写程序的过程中,因为比较赶进度,所以在ege函数的用法和代码规范上可能存在较多缺陷,还请大家多多包涵。
如需要程序需要的图片素材请对我留言。
注意:
因为该程序需要用到ege库函数,所以在编译使用该代码之前需要配置ege图形库
并使用c++编译器进行性编译。
如果要在VS之外的编译环境编译,需要将
文件打开函数fopen_s(&fp, buff, "w");更改为fp = fopen(buff, "w");
fprintf_s更改为fprintf fprintf_s()更改为fprintf
代码实现:
#include
不足之处和反思:
关于内存管理方面的知识我掌握的并不是很好,因此在写程序的过程中还闹出过几次笑话。
我在写程序的过程中遇到的两个我曾经认为比较大的问题,后来被证明全都是其他地方、并且我早已想到只是没有去解决的问题。
虽然我解决了程序中大部分的问题,但是该程序在内存管理和其他方面还肯定存在着很多其他问题。
ege的库函数大部分是使用c++写的,如:类、对象、函数重载等。这些概念在c语言中并不存在。
在完成这么一个稍显复杂的小程序后,我发现用c面向过程的方法去写稍大的程序会非常复杂,且代码复用率低。且通过写这个程序又暴露了部分我在一些方面的不足。
所以综上考虑,在巩固完基础知识和学习完面向对象程序设计之前,我不会再用C语言写一些其他花里胡哨的程序了。
欢迎大家在评论区对我的程序提出意见和建议。
----
感谢您阅读了这篇文章。
最后,感谢所有愿意对我提出批评和建议的人,您的支持是我坚持下去的强大动力!