flappy-bird源程序设计.doc_第1页
flappy-bird源程序设计.doc_第2页
flappy-bird源程序设计.doc_第3页
flappy-bird源程序设计.doc_第4页
flappy-bird源程序设计.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四川师范大学成都学院高级语言程序课程设计Flappy bird游戏程序设计 学生姓名彭 强学 号2012101221所在学院通信工程学院专业名称移动通信班 级2012级移动通信方向1班指导教师周小丽成 绩 四川师范大学成都学院二一四年十二月四川师范大学成都学院课程设计报告课程设计任务书学生姓名彭强学生学号2012101221学生专业通信工程学生班级2012级移动通信方向1班指导教师周小丽职 称助教发题日期2014年10月20日完成日期 2014 年11月3日设计题目Flappy bird游戏程序设计设计目的:1、掌握c语言编程2、了解简单游戏设计思路及方法3、学习用c语言编写简单程序4、了解用c语言处理图片具体任务及要求:1、用c/c+完成flappy bird程序设计2、游戏包括加载、引导、开始、游戏、结束环节3、记分牌、记录等设计4、游戏分为白天和黑夜两个场景课程设计进度安排:序号内容安排时间1图片素材下载10.20-11.32大概实现框架11.4-11.103开始界面设计11.11-11.204游戏画面设计11.21-12.15结束画面设计12.2-12.10课程设计参考文献:1 仇芒仙、朱蓉:C/C+程序设计案例教程,清华大学出版社,2012.8,P20-P1002 钱能等:C+程序设计教程(第2版),北京邮电大学出版社,2005.1,P65-P773 赵真、刘文:C语言简易动画设计,陕西电子科技大学出版社,2008.4,P 201-P264指导教师签字院长审核签字III四川师范大学成都学院课程设计报告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 III四川师范大学成都学院课程设计报告目 录前言11 图片素材下载22 加载界面设计33 主页面设计34 游戏界面设计54.1 游戏前界面54.2 游戏中界面54.3 游戏结束界面65 各步骤图片96 结束语10附录11参考文献24IVFlappy bird游戏程序设计前言flappy bird是由来自越南的独立游戏开发者Dong Nguyen所开发的作品,该游戏于2013年5月上线,2014年年初迎来火爆之势。目前,该游戏全球下载或已超过5千万次。由于本游戏的成功受到质疑,研发者迫于压力,于2014年2月8日意外宣布游戏下线。游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍,而这只鸟其实是根本不会飞的所以玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡。该程序由c-free编程软件编写,用到了网上下载的EGG库函数。C-Free是一款支持多种编译器的C/C+集成开发环境(IDE)。利用C-Free,使用者可以轻松地编辑、编译、连接、运行、调试C/C+程序。C-Free是一款C/C+集成开发环境(IDE)。目前有两个版本,收费的C-Free 5.0 专业版和免费的C-Free 4.0 标准版。C-Free中集成了C/C+代码解析器,能够实时解析代码,并且在编写的过程中给出智能的提示。C-Free提供了对目前业界主流C/C+编译器的支持,你可以在C-Free中轻松切换编译器。可定制的快捷键、外部工具以及外部帮助文档,使你在编写代码时得心应手。完善的工程/工程组管理使你能够方便的管理自己的代码。EGE1(Easy Graphics Engine),是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向C/C+语言新手的图形库,它的目标也是为了替代TC的BGI库而存在。它的使用方法与TC中的graphics.h相当接近,对新手来说,简单,友好,容易上手,免费开源,而且因为接口意义直观,即使是之前完全没有接触过图形编程的,也能迅速学会基本的绘图。 目前,EGE图形库已经完美支持VC6, VC2008, VC2010, C-Free, DevCpp, Code:Blocks, wxDev, Eclipse for C/C+等IDE。1 图片素材下载在编写程序之前,我们必须搜集相应的素材。可以在网上收索,当然也可以自己画。完整的flappy bird游戏需要图片有:背景2张(黑白场景)、小鸟、地面、上下管道以及记分牌等。注:为了让画面像素更高,须收集更多的运动的小鸟照片。在我们建的主文件夹下建一个新文件夹,并命名为“依赖包”,然后将收集到的照片分类命名放在新建的依赖包下备用,具体素材如下图所示: 图1-1 背景和正反管道图1-2 奖牌图1-3 小鸟图1-4 其他2 加载界面设计此界面是游戏的引导界面,相当于是一个叫玩家等待界面。1秒过后进入游戏主界面。首先程序界面初始化,然后int ini(void);int game(void);int show(void); 然后获得窗口句柄HWND hWnd = getHWnd(); 设置主页面的宽和高initgraph(384,512); 在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作移动窗口、改变窗口大小、把窗口最小化等等。实际上许多Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等,不仅仅局限于窗口函数。换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗口、位图、图标、内存块、光标、字体、菜单等。SetWindowText(hWnd, TEXT(Flappy bird彭强);/ 使用 API 函数修改窗口名称最后把依赖包里的“加载”照片调到屏幕显示PIMAGE loading=newimage();getimage(loading,依赖包图片其他加载.png);3 主页面设计主页面为游戏的入口,包括上下运功的小鸟、向左运动的地面、开始按钮及分数榜等主题。首先调用依赖包的“开始”图片,getimage(main_interface,依赖包图片其他开始.png);然后用用算法实现地面和小鸟的运动(依次快速调用小鸟的三张不同照片,由于速度很快以及人的视觉停留,欺骗人的眼睛,误以为是小鸟在动,运动的地面也是如此)。动画是通过连续播放一系列静止的画面,当连续播放达到一定的速度时,我们用肉眼看到的就是动画了。它的基本原理与电影,电视一样,都是利用视觉原理。医学已经证明,人的眼睛具有“视觉暂留”特性,就是人的眼睛看到一幅画面或一个物体后,在1/24秒内不会消失,利用这一视觉变化效果。因此电影采用了每秒24幅画的速度拍摄播放,电视采用了每秒25幅(PAL制)或30幅(NSTC制)画面的速度拍摄播放,如果以每秒低于24幅画面的速度拍摄播放,就会出现停顿现象。 帧频:即每秒播放的帧数。帧频的大小直接影响到动画的快慢。帧频的单位是“帧/秒”,即“fps”,flash中默认为12fps.由于计算机显示器的荧光刷新特性,实际看到的相当于24帧,刚好达到了动画的一般要求。算法如下:a-=2;if(a=0&b=32&b=64&b=96&b1&keystate(VK_LBUTTON)v=-180;b=shijian;此时玩家已经真正进入游戏,随着玩家点击鼠标的频率小鸟高度不断发生变化,让小鸟不至于撞到柱子上和调到地上。4.2 游戏中界面首先管道依次向左运动,让人误以为是小鸟在向右运动。这里用到随机函数zhuzic.h=(random(200)+200;检测用户鼠标算法:if(shijian-b)1&keystate(VK_LBUTTON)v=-180;b=shijian;柱子移动的算法:for(c=0;c3;c+) zhuzic.x-=2; if(zhuzic.x=35&zhuzi0.x=135&(zhuzi0.hbird_h) break;if(zhuzi1.x=35&zhuzi1.x=135&(zhuzi1.hbird_h) break;if(zhuzi2.x=35&zhuzi2.x=135&(zhuzi2.hbird_h) break;if(bird_h415)break;setcolor(WHITE);setfont(-50,0,幼圆); xyprintf(180,40,%d,point);如果发生了碰撞或者落地,那么游戏结束,向屏幕弹出游戏结束和重来画面、显示分数、以及分数榜。碰撞后鸟向下落,直到掉到地上。putimage_withalpha(NULL,bird_middle_90,100,bird_h);if(a=4&a=8&a=12&a=0&a=4&a=8&a=12&a430)break;然后根据分数算出奖牌类型,从txt文件中读出记录,并向屏幕输出。Txt是我们用来记录最高记录的文本,具体程序如下:putimage_withalpha(NULL,gameover,55,60);delay_ms(300);putimage_withalpha(NULL,jifenpai,35,150);delay_ms(300);putimage_withalpha(NULL,again,35,350);putimage_withalpha(NULL,paihangbang,200,350);if(point=10&point=20&point=30&point=40)putimage(67,200,bai);setfont(-25,0,幼圆);xyprintf(270,195,%d,point);fp=fopen(依赖包记录.txt,r);fscanf(fp,%d,&point_jilu);fclose(fp);if(pointpoint_jilu)point_jilu=point;fp=fopen(依赖包记录.txt,w);fprintf(fp,%d,point_jilu);fclose(fp);xyprintf(270,260,%d,point_jilu); PIMAGE ground=newimage(); PIMAGE course_up=newimage(); PIMAGE course_down=newimage(); PIMAGE course_middle=newimage(); PIMAGE zhuzi_z=newimage(); PIMAGE zhuzi_f=newimage(); PIMAGE gameover=newimage(); PIMAGE jifenpai=newimage(); PIMAGE again=newimage(); PIMAGE paihangbang=newimage(); PIMAGE tong=newimage(); PIMAGE yin=newimage(); PIMAGE gold=newimage(); PIMAGE bai=newimage(); 如果玩家点击了重来按钮,游戏又重新开始。就构成了一个循环,小鸟碰撞后,玩家不想玩了,点击结束就可以结束游戏。至此,游戏大概框架已经搭建好了,然后加上EGG库,补全程序,最后调试修改就可以了。5 各步骤图片 图5-1 加载和开始界面 图5-2 游戏运行和小鸟落地6 结束语在设计中遇到了很多编程问题,最后在周老师的辛勤指导下,终于迎刃而解。同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!经过近两个月的学习,使我对c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。通过实践的学习,我知道学好计算机要重视实践操作,不仅仅是学习c语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好各门课程。通过课程设计,普遍感到自己应用基础知识及专业知识解决问题的能力有了很大的提高,以前所学的许多课程觉得很零散,也不知道有什么用及怎么用,现在也都找到了用武之地。同时,我也学到了在许多书本上不可能收录的东西。例如一些设计的具体的规范,和一些设计的要求。如何把规范里的明文规定运用到实际上去,以及运用过程中的把握上。也学到了如何独立思考,如何自己查阅资料,如何与人相处融洽等实际经验。今后走上社会,我主要还是靠在学校学到的知识技能来养活自己,并回报社会,回报父母,我也了解到了自己的很多不足,在今后的工作与学习中,我会不断的提高与改进。附录#include #include int ini(void);int game(void);int show(void);int ini(void)int x,y,a=0,b;initgraph(384,512);randomize();setbkmode(TRANSPARENT); HWND hWnd = getHWnd(); / 获得窗口句柄SetWindowText(hWnd, TEXT(Flappy bird彭强);/ 使用 API 函数修改窗口名称PIMAGE loading=newimage();getimage(loading,依赖包图片其他加载.png);putimage(0,0,loading);delay_ms(500);delimage(loading);PIMAGE main_interface=newimage();getimage(main_interface,依赖包图片其他开始.png);PIMAGE ground=newimage();getimage(ground,依赖包图片背景地.png);PIMAGE bird_u = newimage();PIMAGE bird_m = newimage();PIMAGE bird_d = newimage();getimage(bird_u, 依赖包图片鸟上0.png);getimage(bird_m, 依赖包图片鸟中0.png);getimage(bird_d, 依赖包图片鸟下0.png);while(1)a-=2;if(a=0&b=32&b=64&b=96&b10&x350&y=0&a=16&a=32&a=48&a=30&keystate(VK_LBUTTON)break;/初始化 shijian=0;bird_h=250;point=0;zhuzi0.x=700;zhuzi1.x=940;zhuzi2.x=1180;v=0;a=0;b=0;c=0;while(1)/游戏界面 shijian+=1;cleardevice();/*检测用户操作并执行 */if(shijian-b)1&keystate(VK_LBUTTON)v=-180;b=shijian;/*计算高度*/ v+=9.8;bird_h+=(v*1.9)/77);/*柱子的移动*/ for(c=0;c3;c+) zhuzic.x-=2; if(zhuzic.x=-70) zhuzic.x=650;if(zhuzic.x=512)zhuzic.h=(random(200)+200; /*计算分数*/for(c=0;c3;c+)if(zhuzic.x=100)point+;/*显示图像*/显示背景 putimage(0,0,bk);/显示柱子for(c=0;c=0&a=4&a=8&a=12&a=0&a=4&a=8&a=12&a=0&a=4&a=8&a=12&a=0&a=4&a=8&a=12&a=35&zhuzi0.x=135&(zhuzi0.hbird_h) break; if(zhuzi1.x=35&zhuzi1.x=135&(zhuzi1.hbird_h) break;if(zhuzi2.x=35&zhuzi2.x=135&(zhuzi2.hbird_h) break;if(bird_h415)break/*显示分数*/setcolor(WHITE);setfont(-50,0,幼圆); xyprintf(180,40,%d,point); delay_fps(77);/*游戏结束画面*/ while(1)/显示背景 cleardevice();putimage(0,0,bk);/显示柱子for(c=0;c=0&a=4&a=8&a=12&a430)break;putimage_withalpha(NULL,gameover,55,60);delay_ms(300);putimage_withalpha(NULL,jif

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论