c语言delay_2017级C语言大作业 - 合金弹头

65e56ba6fe9970ce2791c639fed0d62a.png
5ae9f7596ab2d3815fa505890fccfa37.png
合金弹头https://www.zhihu.com/video/1217838581596786688

分享17级同学大一上学期用C语言实现的合金弹头。分步骤代码、图片音乐素材、可执行程序可从百度网盘下载:

链接:https://pan.baidu.com/s/1cm01uEDNodXH-eU5zfF3kw

提取码:toam

一、设计思路

1. 游戏主要基于Easyx提供的函数库,能够忽略WinAPI,减轻代码量。

2. 游戏基本设计思路:

为了方便总体控制和简化操作,选择将easyx底层抽象,可以直接加载相应动画图片到精灵(即游戏中的每个图像元素)结构,通过设置精灵结构中数据,来直接控制动画的播放和移动。

为了实现精灵的操作,选择定义游戏图片结构,封装原图和蒙版,实现基本的根据坐标将蒙版和原图运算到背景中。

为了方便精灵结构的管理,选择实现场景结构。场景主要负责根据Z轴顺序来绘制添加到该场景的所有精灵。另外可以将每个场景相应的逻辑函数,初始化函数,消息处理函数,关闭函数,储存在场景中方便调用。

为了方便场景的管理,选择实现引擎结构。将场景添加到其中,设置相应的游戏编号。就可以通过游戏编号的转换实现场景的切换。

游戏框架选择的基本循环框架。即包含游戏初始化,游戏主循环,消息处理,逻辑执行,碰撞检测,音乐控制。

所有的添加都通过指针连接,最基本的图像结构通过new分配内存,每个结构提供释放函数

3. 具体合金弹头的实现就可以通过,建立场景,建立精灵,将图片资源加载到精灵中。在需要的时候显示或者隐藏相应的动画。在逻辑中进行图片的移动判断,在相应的消息处理函数中,改变相应的变量。就可以完整的实现游戏的基本动画,和控制。具体细节,可以通过游戏的反馈进行调整.

4. 具体的游戏资源收集于各论坛。

5. 在最后对写好的游戏进行优化。

二、功能描述

1. 在主函数中依次调用,GameStart(),在主循环中调用MousEvent(),KeyEvent(),GameAction(),循环结束调用GameEnd();

2. 游戏主体框架及功能

typedef 

3. 另外游戏通过在适当位置添加文件的读写操作(二进制),来实现基本的存档功能。

三、分步骤实现的方法

1. 主体框架的实现

主题框架实现的重点主要在游戏精灵结构的实现以及各种播放模式的实现,要保证不冲突。还有就是游戏资源的释放,由于前期的设计问题,涉及到的多个相同精灵的复用,精灵结构中储存的是资源的地址,所以复用精灵使用的数组,添加到场景中,无法再使用delete来释放资源。具体解决方法,为每一个精灵增加了一个bool用来控制是否释放资源。

2. 具体玩家人物的设计

由于图像资源太过分开(分为上半身和下半身),导致人物的动作设计过于复杂,且代码可读性降低。同时由于相同动画资源图片大小不同导致必须每一帧的坐标都必须手动设置。具体解决办法,牺牲代码的可读性。

3. 游戏音乐的实现

在游戏中使用mciSendString()函数实现音乐的播放,但由于函数加载音乐资源速度太慢,会对游戏造成明显的卡顿。所以选择单独开一个线程来播放音乐。由于mciSendString使用的是栈操作,所以选择在线程函数中建立一个无限循环,通过不断的检测音乐标志的变化,来实现播放音乐。另外再降低音乐质量。

四、体会与总结

1. 版本控制很重要

在游戏分步实现的过程中,随着编写的不断加深,代码量逐渐增大,每次修改都有可能会产生不可预料的结果。甚至有可能某个阶段功能的实现的失败。所以及时回溯,版本控制很重要。

2. 前期设计的重要性

最开始的设计关系到整个游戏最终是否能完成。不然就只能降低代码的可读性来实现。

3. 团队

一个人的精力是有限。在某些情况下需要多人合作。

4. 总结

这是我个人独立写过的代码最多行的程序(近4000行),代码写得越多对语言的设计理解的越深。这次的课设让我学到了很多。写代码的过程中遇到了很多的问题,设计不够完善,中途修改主体框架,找不到bug等等,但庆幸的是都一一解决掉(百度,参考手册,博客等).我以前也写过几个小程序,录频,合成图像,其中不乏一点原理也不懂的,但不懂的总是可以通过各种方法学会。所以不管写什么程序,不管有多复杂,只要坚持下去去学习研究尝试,总会写出来。另外整个框架的优势体现在有多个场景的游戏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值