C语言 – 小小冒险岛
分享17级同学大一上学期用C语言实现的小小冒险岛。分步骤代码、图片音乐素材、可执行程序可从百度网盘下载:
链接:/s/1MRNnZAMZj8iC_c6bxruQnA
提取码:5zui
摘要
本设计是模仿盛大冒险岛并且从小游戏《小小冒险岛》吸取经验制作而来.算是一个小小的同人游戏.整个游戏的风格以小清新RPG为主,人物与地图全为2D图像冒险岛下载安装,利用if函数实现了人物与背景的分开移动,让人物可以在小游戏框下走出大地图.本游戏图片来自原游戏冒险岛下载安装,玩法为人物的移动和狩猎怪物。玩家可以在不同的地图中来回穿梭,在不同的挡板上跳跳下下。走出村庄可以进行狩猎怪物,不过也会被怪物狩猎,被怪物触碰会减低Hp,当Hp为0时gameover。
一、设计思路
1、搭建基本框架.
2、从原游戏中盗取最基本的人物及背景图.
3、实现人物简单的左右移动,设计图片的输出.
4、编写结构体,对于地图要素进行定义.
5、对于定义好的地图要素编写挡板及跳跃的判定,实现人物在地图中的跳跃.
6、增加地图的要素,定好传送点,方向,并且加入更多的地图,实现地图的变换.
7、再次增加地图要素,加入怪物的数据及贴图,完善人物的攻击函数.
二、分步骤实现方法
1.对于人物图像的输出
其实在一开始我的人物图片比如站立,走动.及攻击的连贯显示是不清楚的.但是采用了我对于动画的了解,在一定而规律的时间内改变人物的图片,可以营造动的感觉.这么说好像Sleep好像是最合适的,但是因为有怪物的存在,如果用Sleep就会影响怪物的显现,于是采用的老师飞机大战是用的延迟数.人工确定帧数,良好的显现出了人物.
2.对于地图要素的定义
小小冒险岛一个地图中的要素十分多,有挡板,绳索,有光圈,而且各个地图独立,如果单独定义会占很多行数,而且变量会很多很杂.这里采用了结构体,对于要素的定义整齐而有规律,输入要数数据时更加简单.
3.人物跳跃与挡板联系
这游戏中人物离开挡板就会进入跳跃状态,于是我把人物的跳跃写进withoutinput,而withinput只改变人物上升速度及状况判定.在withoutinput中在改变人物的位置移动.为了使role_x,role_y为人物底边中间位置,人物图片的输出位置为role_x,role_y分别减去宽的二分之一和高.这样便于判断人物与挡板相遇.人物的下落用循环函数来写,每下降一个像素都会判断每一个挡板,一旦判定了,人物的纵坐标等于挡板的纵坐标,从而提高人物与挡板的契合.
4.人物爬绳
人物在爬到绳子最上端,与最下端时或者横向移动离开绳索范围会脱离爬绳状态,这里也采用了与跳跃一样的自动判定.同时人物在绳索上同时按W和K时会改变role_vy,借助跳跃函数实现人物的快速爬绳.(因为时间关系没有人物爬绳的图片.这个快速爬绳如果能加个特效也会很有趣)
5.人物传送
人物通过光圈从一个地图到另一个地图不是一件容易的事,我对于每个传送点都定义了他们的位置,传送去的地图,传送去地图的光圈的位置.为了处理好人物传送后位置变换的处理,我赋予它一个相对于游戏框的位置,在通过传送点相对于背景的位置反推背景的位置,实现了人物的传送.
6.人物二段跳
按E可以实现人物的二段跳,即便在空中也可以改变人物的跳跃方向.并且提高role_vx role_vy的绝对值,用于加快人物走地图.因为个人爱好,二段跳没有延迟,于是就有了像是飞行一样的效果.
三、体会与总结
1.不应该在循环函数内部定义变量,这会极大地拖慢程序运行的速度.
2.两个人应该多多商量代码中的变量,并且统一算法,不要一个相似的部分用两种算法写.
3.在每次写完相应的程序一定要备份,不然一改出现bug还得自己一步一步敲回去.
4.在这次大作业中我深刻体会到了与人合作的困难.两个人的代码风格不一样,写出来的代码另一个人很难看懂,如果注释非常少那么是更加糟糕.在编程时特别是与人合作时,一定要规范自己的代码,不能由着自己的性子乱写一通,到时候别人看不懂,自己到时候也很难改.