水果忍者 C语言作业
分享17级同学大一上学期用C语言实现的水果忍者。分步骤代码、图片音乐素材、可执行程序可从百度网盘下载:
链接:https://pan.baidu.com/s/1i-e_MVChl4fIUSiPBnNp-Q
提取码:67lj
设计思路
我们小组经过在4399网站上试玩游戏,经过多次研究讨论,最后确定了水果忍者这个游戏,这个游戏大家都玩过,核心玩法是不同的水果往上抛,然后玩家用刀切掉水果。由于网上有Java水果忍者的素材包,我们可以直接使用其中的素材。主要的设计的思路是先实现水果们的竖直上抛,斜抛,旋转,以及炸弹的斜抛,开始利用时间函数,发现会卡顿,之后改用次数实现。然后加入鼠标切水果的判断,之后加入菜单,结束界面。随后解决水果被切后掉落的问题,还有解决刀刃的问题,最终做成了完整的游戏。
一、功能描述
总体分七大块:
1 实现随机位置抛出水果,并且循环出现;
2 运用png格式的图片,实现水果的旋转;
3 实现点击鼠标左键,使水果消失;
4 加入了UI和记分系统,并加入禅宗模式;
5 实现切到水果分成两瓣微微旋转落下;
6 加入刀刃;
7 实现切到炸弹,炸弹爆炸的效果 。
二、分步骤实现方法
我的部分第一个难点就是实现水果的旋转。我们首先使用的是水果图片的格式是png,通过转码器得到bmp图片及其掩码图,但是有掩码图的图片利用rotateimage函数会有黑色背景,所以在在各方面的资源帮助下,得到了可以加载png图片的头文件,加入后就可以进行水果的旋转了。
第二个难点就是实现按下左键切到水果。首先使用的是easyx里面的GetMouseMsg来获取鼠标的信息,开始设计的碰到鼠标就水果就消失,后改进成按左键的时候,始终不能实现按下左键,水果消失,后来我去网上找到一个方法,利用:#define KEY_DOWN(vk_c) (GetAsyncKeyState(vk_c)&0x8000?1:0)
定义按下某个键的时候就为1,即执行,松开的时候就是0,不执行,我们通过运用if(KEY_DOWN(VK_LBUTTON))来判断鼠标左键是否按下,按下就为1,执行之后的程序,最后解决了这个问题。
第三个难点就是炸弹爆炸的效果。我们开始是在一个新的工程里测试的,在那里面可以实现炸弹爆炸的效果,但是,当我们加入到大工程里的时候,发现了个问题,当切到炸弹的时候,对应flag直接改变,变化到gameover的界面,就没有炸弹爆炸的效果,我们先是利用时间函数time_t,定义了开始结束时间,开始的时间直接放在切到炸弹的那里,然后把结束的时间放在炸弹爆炸的那个函数里,如果结束的时间减去开始的时间大于3秒,才能执行到到gameover那个界面,这样就给了炸弹爆炸足够的时间。切到炸弹后爆炸。
三、体会与总结
小组一起做的游戏,很好得实现了原游戏的大部分还原,效果还是很不错的,虽然做的过程中遇到过各种各样的麻烦,有些麻烦真的是在网上找也没有,问学长也不能解决,有时候很伤心,烦闷,想要放弃,但是在组员之间的互相鼓励下,终于挺了过来,最后游戏做成功的时候,大家都很高兴,这可能是今天除了高考进入河海,最开心的事了,以前都没想过自己做一个游戏,虽然是盗版的,但是也是自己做的第一个游戏了,非常有成就感。