Flappybird游戏设计
- 格式:doc
- 大小:1.24 MB
- 文档页数:22
四川师范大学成都学院高级语言程序课程设计Flappy bird游戏程序设计学生姓名向华峰学号**********所在学院通信工程学院专业名称通信工程班级2014级移动通信方向指导教师周小丽成绩四川师范大学成都学院二○一六年十二月课程设计任务书Flappy bird游戏程序设计内容摘要:flappy bird是一款形式简易但难度极高的休闲游戏。
玩家需要不断控制点击屏幕的频率来调节小鸟的飞行高度和降落速度,让小鸟顺利通过画面右方的管道缝隙。
如果小鸟不小心擦碰到了管子的话,游戏便宣告结束。
本设计介绍了电脑版的该游戏的大概框架以及具体源程序代码。
关键词:游戏设计程序Flappy bird game programmingAbstract: Flappy bird is a form of simple but very casual games. Players need to keep control of the frequency of the click on the screen to adjust the flying height of the birds and landing speed, and let the bird pipe aperture pass the picture to the right. If the bird accidentally brush against the pipe, the game has ended. This design introduced the computer version of the game about framework and specific source program code. Keywords:Game Design Program目录前言 (1)1 游戏设计思路 (1)2 游戏设计过程 (1)3 图片素材下载 (3)4 加载界面设计 (4)5 游戏界面设计 (4)6 游戏设计 (4)4.1 场景设计 (4)4.2 游戏中界面 (6)4.3 游戏结束界面 (6)7 效果图 (8)参考文献 (17)Flappy bird游戏程序设计前言《flappy bird》是由来自越南的独立游戏开发者Dong Nguyen所开发的作品,该游戏于2013年5月上线,2014年年初迎来火爆之势。
目前,该游戏全球下载或已超过5千万次。
由于本游戏的成功受到质疑,研发者迫于压力,于2014年2月8日意外宣布游戏下线。
游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍,而这只鸟其实是根本不会飞的……所以玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡。
cocos2dx editor,它是开发跨平台的手机游戏工具,运行window 系统上,javascript脚本语言,基于cocos2d-x跨平台游戏引擎, 集合代码编辑,场景设计,动画制作,字体设计,还有粒子,物理系统,地图等等的,而且调试方便,和实时模拟。
1 游戏设计思路●游戏场景:游戏主要有三个场景组成,开始场景、主场景、结束场景●主场景:主场景是由上下两个水管和水管之间空隙组成,间隙时一定的,下水管可以是随机出来的,然后上水管可以由下水管的数据计算出。
●小鸟:每次按一下向上小鸟坐标就向上加一定的高度,释放后就自由落下●游戏成绩:当小鸟没通过一个水管的时候分数就自加一定分值。
●死亡判断:当小鸟碰到水管或者是地面的时候,小鸟死亡,游戏结束。
判断到小鸟坐标与水管坐标或者地面坐标在一定的范围内就可以判断其死亡。
2 游戏设计过程✧刚想到做这个游戏。
用线程来让小鸟掉下来,用鼠标监听来控制小鸟的飞行,当时也没把各个对象抽象出来,就一个劲把它放到界面的那个类里面,然后又把地面、水管等陆续加进去,后来随着做的深入,发现这样是行不通的。
因为做这个游戏还要拿到他的坐标判断游戏是否结束,现在的问题是把小鸟、水管、地面等都放到一个类里面,根本就不方便往下做,因为这样拿不到他们的数据,比如说他们的坐标等。
✧在上面这样做行不通的时候,只有停下来思考怎么做其实很很明显,要把各个对象抽象成为一个类(当然可能还有更好的办法,但是我觉得现在办法是行的通的),这样一个类就只管一个对象,比如说,小鸟一个类、水管一个类、地面有事一个类,这样就能更好的做下去,各个类之间关系也不会那么,让每个类具有自己单一的功能,体现低耦合的思想。
✧做小鸟是比较简单的,毕竟一个线程就能轻松搞定……但是现在水管应该怎么做呢?玩过这个游戏的人都知道,水管是上下对着各一根,上下水管之间的间距也是一定的,而且水管是随机出现的,这样下水管就可以的位置也就能确定了,因为知道游戏面板的高度和上下水管的间距,所以可以确定下水管的位置。
具体怎么实现,我下面会说明。
✧还有一步比较重要就是如何判断游戏的输赢。
判断游戏的输赢也可以分为两种情况,一种是小鸟掉到地上了;一种是小鸟碰到水管了。
还有一个就是计算分数了,这个可以直接写在判断输赢的类里面,只要小鸟没越过一根水管,就令一个数加一,并显示到游戏面板上就可以了。
✧当然并不是这个游戏就只有那么简单的几步。
还有其他的部分,比如说,开始的场景、结束的场景,如果真的要把做的很完美还有一点点细节需要考虑。
3 图片素材下载在编写程序之前,我们必须搜集相应的素材。
可以在网上收索,当然也可以自己画。
完整的flappy bird游戏需要图片有:背景2张(黑白场景)、小鸟、地面、上下管道以及记分牌等。
注:为了让画面像素更高,须收集更多的运动的小鸟照片。
然后将收集到的照片分类备用,具体素材如下图所示:4 加载界面设计此界面是游戏的引导界面,相当于是一个叫玩家等待界面。
1秒过后进入游戏主界面。
首先程序界面初始化,然后int ini(void);int game(void);int show(void); 然后获得窗口句柄HWND hWnd = getHWnd(); 设置主页面的宽和高initgraph(384,512); 在Windows中,句柄是一个系统内部数据结构的引用。
例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口最小化等等。
实际上许多Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等,不仅仅局限于窗口函数。
换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗口、位图、图标、内存块、光标、字体、菜单等。
5 游戏界面设计游戏界面为该游戏的设计难点,包括动画、碰撞检测等等。
分为游戏前界面、游戏中界面、以及结束界面。
游戏前界面此界面与主页面相似,但没有开始按钮,在界面右边多了2根管道,程序现在就检测玩家是否在游戏界面内点击了鼠标,如果是,那么就进入了游戏中界面。
6 游戏设计4.1 场景设计如下图;主要分三层,开始场景、主场景、游戏结束场景,通过显示隐藏控制三个场景的切换图4-1开场景图4-2主场景图4-3游戏结束场景4.2 游戏中界面首先,小鸟在向前飞,其实是底部的路和水管在向左移动,相对的你就感觉小鸟在向右飞了;路循环移动代码:MainLayer.prototype.groundRun = function (){var action1 = cc.MoveTo.create(0.5, cc.p(-120, 0));var action2 = cc.MoveTo.create(0, cc.p(0, 0));var action = cc.Sequence.create(action1, action2);this.ground.runAction(cc.RepeatForever.create(action));}4.3 游戏结束界面该步骤包括碰撞和落地的算法设计、分数显示、是否重来等小模块。
碰撞后,小鸟先下落,游戏结束场景显示, 碰撞判断、显示分数的算法为:MainLayer.prototype.birdFallAction = function (){this.gameMode = OVER;this.bird.stopAllActions();this.ground.stopAllActions();var birdX = this.bird.getPositionX();var birdY = this.bird.getPositionY();var time = birdY / 2000;this.bird.runAction(cc.Sequence.create(cc.DelayTime.create(0.1),cc.Spawn.create(cc.RotateTo.create(time,90),cc.MoveTo.create(time, cc.p(birdX, 50)))));this.overNode.setVisible(true);}如果发生了碰撞或者落地,那么游戏结束,向屏幕弹出游戏结束和重来画面、显示分数、以及分数榜。
碰撞后鸟向下落,直到掉到地上。
for(c=0;c<3;c++){pillar[c].x-=SPEED;if(pillar[c].x<=-70)pillar[c].x=650;if(pillar[c].x==512){pillar[c].h=(new Random()).nextInt(200)+200;}}/***************计算分数************************/for(c=0;c<3;c++){if(pillar[c].x==100)point++;}/****************地面移动***********************/a-=SPEED;如果玩家点击了重来按钮,游戏又重新开始。
就构成了一个循环,小鸟碰撞后,玩家不想玩了,点击结束就可以结束游戏7 效果图图5-1游戏加载和开始.图5-2 游戏运行和小鸟落地8 结束语经过近两个月的学习,使我对JAVA 语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对JAVA语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对JAVA语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。