我的C语言学习历程:游戏篇

来源:互联网 发布:淘宝升级天猫 编辑:程序博客网 时间:2024/05/01 00:14

目前正在开发一款2D格斗游戏,戏效果如下图所示:


虽然游戏能够windows和GNU/Linux这两种平台上编译并运行,但由于部分功能模块对GNU/Linux平台的支持并不是很好,因此,此游戏在GNU/Linux平台上的运行效果并不是很好,以后会继续改进。

有兴趣的可以关注一下此项目在GitHub上的动态:https://github.com/lc-soft/LCUI-2DFightGame


以下是正文:


尝试编写自己的游戏

由于知道了如何显示图形,就产生了一种想法:做一个2D图形游戏。

游戏呢,我采用了flash小游戏《死神vs火影》中的图形素材,网上有提供。

学习机的可用内存并不多,只能节约使用内存了,图形的显示,我采用的方法是:

调用相关动作的函数,获取指定帧的图形数组,画到背景图上后,直接释放,这时,占用的内存只是一帧图形所占用的内存。

测试了一下,用的是黑崎一护的站立动画,背景是全白:


添加了移动动作的动画后,考虑到只有人物朝向右边的图形,没有朝向左边的,如果用PS编辑,做个朝向左边的的图形,需要花费很多时间,于是就想要个图形水平翻转算法,自己用脑子想了一下,并不难,只需要将图片每一行的像素点左右置换即可,水平翻转图形的代码在这里:http://blog.csdn.net/liuchao35758600/article/details/6685536


在测试这个程序时,人物移动到屏幕边缘会出现问题,显示不正常,经过大量时间仔细研究后,最终解决了这个问题,效果图如下:


即使显示在屏幕左上角,也不会出现显示问题,显示出问题也就是数据处理方法有问题,超出屏幕显示范围的图形,进行裁剪就可以了。


2D游戏的图形处理,大多涉及到图形处理算法方面的知识,比如:图形混合,图形裁剪。


在这之后,只要有空,并且有兴趣,就会继续编写这个游戏,直到最近几个月暂停了游戏编写,因为我想写个自己的GUI库;

这是游戏现在的效果:


背景图是我用PS编辑而成,费了一点时间,至于文字,也是预先用PS编辑好的。

“按确定键继续”这个文本背后的红色光标,具备闪烁动画效果,是通过调整红色光标的透明度实现的,alpha的值从0增加到255,为淡入效果,相反,由255减少到0,为淡出效果,两种效果往复使用,就变成了闪烁动画效果。


按确定键后,整个画面会使用淡出效果,然后使用淡入效果进入主菜单,选择选项用的光标还是用了那个具有闪烁动画效果的红色光标,在移动光标时,我使用了平移动画,光标一边闪烁,一边平移。


开始游戏后,就是上图的效果,起初,是没有人物状态栏的,这是在后面添加的,添加状态栏后,游戏画面的刷新速度变慢了一点,不知道有什么办法提高图形刷新的效率。

黑崎一护使用月牙天冲,原始的动作动画是一次性释放一个,我觉得这个太死了,就把人物动作和技能效果图分离出来,单独处理显示,按住U键,每隔一段时间释放一次月牙天冲,在释放完后,人物可以移动,可以与它接触。

游戏还没添加人工智能,攻击与受攻击的处理,现在来看这个游戏的源码,还是觉得有些代码写得不怎么样,打算以后把游戏的源码做大部分的修改。


需要源码的话,请留言,貌似还有源码,但是,在电脑端测试的话,只能进主菜单,进游戏会出现段错误,因为电脑的屏幕分辨率比学习机的大,写代码是根据学习机的屏幕尺寸写的,过大的屏幕尺寸会造成数据处理出错。编译源码所要求的环境是基于linux的系统环境,windows系统不可能编译通过,因为头文件和函数有的不一样。




未完,待续。。。。。。


以前玩过的游戏(大多是网游),脑子里都会有一些想法,觉得这个游戏可以改进的地方还有很多,有时非常希望游戏开发公司能根据我的建议来改进游戏,当然,这是不可能的,与其要求他们改变他们的游戏,还不如自己写游戏,按照自己的想法来设计游戏,这不是很好吗?

现在,用C语言完全可以自己写2D游戏,写好核心代码,调用图形进行显示就可以了,写程序,自己的思想是很重要的,用正确的代码来描述自己的思想,才能得到自己想要的结果;编译时出现错误或警告,那是语法错误,很容易解决,而程序在运行过程中出现的错误,那是代码逻辑问题,需要自己调试,寻找出错位置,这是比较难的,也是比较费脑力的,我曾经为了解决一个小问题,花费了一整天的时间去测试才得到解决。