社会实践|南京农业大学信息科学技术学院卓越工程师班
社会实践正式宣告结束作品展Ⅱ

作者: 卓工班团队  提交时间:2018/9/6 20:39:32  浏览:432   [打印本篇文章]

编写游戏从来就不是一件简单的事

——南京农业大学信息科学技术学院2018年卓工班优秀作品展Ⅱ


3天学会几乎全新的技术,5天自行设计和实现自己的游戏,这对于每一位啄木鸟们都是一个不小的挑战。在第二阶段的培训结束,张老师告诉我们:“大家可以开始动手了,我要说的都已经说完了!“大家听到这些话后,很多同学都愣住了,心里想着这就开始啦?就是在这样几乎都没有准备好的情况下,大家开始了各自游戏的设计。

5天里,各位啄木鸟真的是八仙过海,各显神通。飞机大战、猴子与怪兽、坦克大战、夺天、星际碰撞、飞天小女警、月僧、泡泡大冒险、黄金矿工、千与千寻、保卫萝卜……46名卓工班成员,设计出46件游戏作品,这正是考验啄木鸟们灵感的关键时刻,摆在啄木鸟工程师们面前的一个关键的问题是:如何在短短5天的时间内设计出一款既有可玩性又有创意的游戏。

游戏具有可玩性是本次任务最基础的要求,各位啄木鸟们完成的作品要在没有BUG的情况下运行出来,且将代码移植到其他的电脑也能正常运行。这种硬性要求,不需要经过老师提醒我们都得做到,而创意性就属于各位同学的锦上添花,游戏的选题需要有创意、游戏的玩法需要有创意性、游戏的故事背景需要有创意性。

本次我们挑选了徐家睦、唐毅、陈禹廷、张梦伟四位同学的作品进行展示。


卓工班班长陈锋评语——“徐家睦同学挑选了高难度的RPG类,意境古雅,而且是为数不多的在游戏中运用了高难度算法的同学。

徐家睦同学设计的游戏作品名为《月僧》,这是一款RPG类战斗益智类游戏,游戏主要通过1+1”的地图模式,即对话类事件地图和战斗类事件地图的结合。玩家在对话类地图中可以通过“<-”和“->”按钮控制玩家左右移动,通过空格键与NPC产生对话,通过ESC按钮查看当前任务。


1 月僧游戏运行界面


该同学设计的游戏有以下几个亮点:

第一、游戏素材使用PS精心修改过,这样具有原创性,且游戏画质精美。



2 月僧游戏运行界面


如果我们在代码中直接简单地使用TransparentBlt()函数,而不对原素材进行加工处理,那么这些素材很容易在窗口显示时留下白边,这样显得游戏的质量较差。


3 带白边的飞机


如上图所示,这是在游戏窗口中显示的飞机,飞机的边缘看起来比较模糊,有白边的痕迹,这是不经过处理直接读取原素材的效果,和徐家睦同学游戏作品相比,好坏显而易见。

第二、游戏的玩法有创意。玩家负责控制人物角色移动,并在靠近NPC时触发对话,对话结束后接受挑战才能进入游戏的闯关环节。


4 月僧游戏运行界面



5 月僧游戏运行界面


玩家跟随游戏中人物角色和NPC的对话便逐渐了解剧情,给人以身临其境的感觉。其次,闯关环节的玩法具有新颖性,玩家需要在以下界面设置障碍物堵截敌人。


6 月僧游戏运行界面


中间是游戏中的敌人,而白色的圆形区域则是玩家控制的人物角色所放置的障碍物,游戏中的敌人会按着箭头所指的6个方向之一移动,直到最后离开整个地图区域,敌人不能通过有白色障碍物的位置,玩家要做的就是在黑色区域放置白色障碍物阻止敌人逃出地图。

为了实现敌人从6个方向中寻找出口,徐家睦同学曾尝试过最短路径迪杰斯特拉算法,但是经过测试发现这样的敌人寻找出口的能力很弱,敌人会绕着某一点不断移动,不具备走出地图的能力。为了解决这个问题,徐家睦尝试着将最短路径算法换为贪心算法,算法更换之后代码的复杂性变得更高,贪心算法需要使用300多行代码才能实现,而且最初的代码版本中有一个严重的BUG,这个BUG会导致游戏中的敌人忽略障碍物的阻碍作用,直接覆盖白色障碍物,然后走向出口,显然这是不符合我们的规则的。为了修复这个BUG,他不得不调试到第二天的凌晨,还和其他同学一同讨论,终于到了答辩前的最后一刻得以解决。

最终的效果是很令人惊艳的,卓工班的几位同学曾试玩过这个游戏,如果是初次尝试,不一定能够赢得了基于贪心算法寻找最近出口的敌人。


陈锋评语——“千与千寻的主题贯穿始终,特色鲜明,轻快亮丽。”

张梦伟同学设计的是一款简单的小游戏,游戏以宫崎骏动画《千与千寻》为背景创作,共三个关卡,关卡主要也以动画的故事线为背景串联。第一关是键盘操纵人物进行八个方向的移动来击碎草地上的石块,限制在规定的时间内必须击中一定数量的石块才可通关。第二关是鼠标操纵白龙和小千来收集空中漂浮的玫瑰花,也是要在规定的时间内手机到足够数量的玫瑰才可以通关。第三关是要求鼠标和键盘一起操作,鼠标操作人物移动,键盘的上下左右键控制武器发射,要求武器发射不能触及空中随机漂浮的石块,击中指定区域才可以得分。


7 千与千寻游戏运行界面



8 千与千寻游戏运行界面


该游戏中的素材大量采用了电影中的元素,游戏画风、故事背景和电影《千与千寻》的剧情十分符合,这个选题很明显是根据游戏作者的爱好确定的。而游戏运行的界面也是较为精致,和徐家睦同学类似的是,张梦伟同样使用了PS对自己的素材进行了抠图和合成。


9 千与千寻游戏运行界面



       陈锋评语——“瓜农抓野猪是一个看似简单的小游戏,但实际上对画面动态性要求很高,比如跳动的计时器,摆动的钩子,还有被拉上来的物品。完成得很有趣。“

                           “泡泡大冒险中向四面八方伸展的爆炸特效,AI人物的移动,都处理的非常到位,遗憾的是缺一点道具。

之前我们曾提到过秦瑞玥同学复刻了经典游戏《坦克大战》,卓工班的陈禹廷同学实现了类似于黄金矿工游戏的瓜农抓野猪小游戏,唐毅同学同样也复刻了类似于泡泡堂的游戏——《泡泡大冒险》。

10 11 瓜农抓野猪游戏运行界面


12 13 泡泡大冒险游戏运行界面


唐毅同学设计的泡泡大冒险游戏界面十分精美,而且实现起来复杂。根据游戏的规则,每一个方块可以被玩家放置的水泡炸破,仅仅这个功能我们就需要考虑以下三个问题:


14 泡泡大冒险水泡爆炸效果


一、水泡爆炸后水波纹的方向有4个方向,那么贴图就需要考虑到4个不同方向显示问题,同时还需要考虑中间的水波的显示效果。

二、爆炸后水波纹需要区分空地和方块障碍物,对于空地,水纹可直接显示,遇到障碍物,则不显示水纹,还需要使方块由于爆炸而消失。但是,方块是否消失还需要根据爆炸检测机制来判断水泡爆炸是否能够影响方块。

三、程序需要引入延时机制,使水泡放置后经过一定的时间后才爆炸,这就要求代码中需要使用time.h文件,通过clock()函数获取当前时间。程序中分两次获取时间,时间相减满足一定条件后,水泡开始爆炸。

最后,还需要实现的一个关键问题是:玩家控制的人物角色在移动时不能穿过建筑物或者水泡。唐毅同学是通过设置一个二维数组bar[15][13]用于存放每个60*60的小方格的信息,0代表空地,1代表角色,2代表水泡,3代表建筑,4代表道具,在角色移动前先判断该格子是否有建筑或者水泡,根据判断的结果再决定其是否可以进行移动。

制作一款好的游戏作品不是一件简单的事,月僧中我们看到徐家睦引入了高难度的贪心算法,千与千寻中张梦伟对游戏素材细心处理打磨,瓜农抓野猪里陈禹廷需要考虑计时器、摆动的钩子的问题,而泡泡大冒险则要求唐毅分不同的要求去实现一个功能。