c语言游戏设计_第1页
c语言游戏设计_第2页
c语言游戏设计_第3页
c语言游戏设计_第4页
c语言游戏设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、1: C 语言游戏设计 1.1 :课程设计目标 C 语言编写一款打飞机游戏,掌握函数的使用和编程的整体思路。 1.2 :整体设计思路 总体设想:运行游戏时显示游戏的界面,允许用户选择个性化设置, A 、 D、W 分别控制飞机的左右移动和发射子弹,不同的敌机飞行和攻击,并不 时伴有奖励。游行运行时播放音效,同时记录飞机的生命和得分,达到一定 的分数进入下一关。 需要构建的函数:位图调用模块、界面输出函数、主菜单函数、设置函 数、速度选择函数、游戏控制函数、敌机移动函数、子弹移动函数、boss函 数、计时函数 控制台输入输出流头文件 系统函数头文件 时间函数头文件 函数库 导入声音头文件 导入声音

2、头文件 1.3: 需调用的头文件: include /常规库头文件 include / include/ include/ include /windows include / pragma comment(lib,winmm.lib )/ 库 1.4: 游戏过程模拟: 5 启动游戏 用户个性化设置 记录飞机飞行时间和 Me nu Mpov Move Boss Bmp Set Moveb Print In delay 菜单 epall pal 函数 位图| 设置 ul 界面 速控函 函数 敌弹 敌机 判用断 飞函机生 命子弹速 输岀 数 函数 1f 1J 度 J Delay 游控 函数 Upd

3、ate 计时函 数 生命 Ga飞机0的移动,子弹的发射,音乐的播放,信息的记恭喜进入下一关 1.5 : 显示效果如下图所示: 初始设置界面:游戏界面 hahaDebuchaha, ese* : 飞行控制:A向左D向右 熾射翔 S = ttt “开始辭裁 游戏邨如分种 本游裁由王均坐改编 :*E:hahaDebmrhaliiai. eier日| v生齡7 叶间:0:35 腔制: V A D 双击回车槌直接迸入游戏:. 2算法实现 2.1需要了解的知识点: Main函数和menu函数编写比较顺利,在bmp函数中遇到如何显示窗口和调用图 片的问题,看了一些例子和网上的资料,逐渐掌握了一下知识点: 设

4、备上下文:设备,显示器,打印机,数码相机,扫描仪这些类似的设 备,上下文,就是上面设备的相关信息,比如屏幕分辨率等 HANDLE通用句柄,实际上是一个指向指针的指针,在Windows操作系统中, 内存操作器经常移动对象,来满足各种程序的内存需要,为了解决寻找对象问题, 内存管理器开辟出一块专门的内存储存空间,把移动后的地址存储在该空间,这 样就可以通过该地址间接寻找到对象。 Q HDC设备描述句柄,实现对窗口操作区域的 GDI (图形设备接口,负责系统 与绘图程序之间的信息交换,处理所有Windows程序的图形输出)操作,如画线、 写文本、绘画制图等。 Q BITMAP用于处理有像素数据定义的

5、图像的对象。 GetDC(O)检索特定的客户区域或整个屏幕的宣示设备上下文环境的句 柄,以后可以使用该句柄在设备上下文环境中绘图。 Q LoadImage 装载图标、光标或位图。HANDLELoadlmage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,intcxDesired,int CyDesired,UINT fuLoad), hinst处理包含被撞在图像模块的实例,装载 oem图像时参数设为0; name指向装载图像资源的名称;type指定被装备图像类型cxdesired和 cyDesired指定图标的宽度和高度,如果参数为0,则使用目前资源

6、的高度。 Fuload -LR_LOADFROMFIL根据参数lpszName的值装载图像。若标记未被给定, lpszName的值为资源名称。 Q CreateCompatibleDC该函数创建一个与指定设备兼容的内存设备上下文 环境(DQ。通过GetDc()获取的HDC直接与相关设备沟通,而本函数创建的DC 则是与内存中的一个表面相关联。 Q SelectObject计算机编程语言函数,该函数选择一对象到指定的设备上 下文环境中,该新对象替换先前的相同类型的对象。 Q GetObject函数功能:该函数得到指定图形对象的信息,根据图形对象, 函数把填满的或结构,或表项(用于逻辑调色板)数目放

7、入一个指定的缓冲区。 BitBIt该函数对指定的源设备环境区域中的像素进行位块(bit_block ) 转换,以传送到目标设备环境 0 ReleaseDC函数释放设备上下文环境(DC供其他应用程序使用。函数的 效果与设备上下文环境类有关。它只释放公用的和设备上下文环境,对于类或私 有的则无效。 / void Delay(void); / void In Delay(void);/ void prin t(i nt N);/ void movebul(i nt N); / void movebul1(i nt N); /BOSS void movepla(i nt N); / void move

8、pla1(i nt N); / void boss(i nt N);/boss void bmp(void);/ void set(void); / void menu( void); / int scr23N=0,pl=20,bl=1,width=40,speed=4,de nsity=30,score=0,death=7 ,k1=0,k2=7; 全局变量定义 int minu te=0,sec on d=0,p=0,k3=0; long int max=0; /时间结构体 struct clock int min ute; int sec ond; ; typedef struct clo

9、ck CLOCK; /计时模块 void Update(void) p+; if(P=7 p=0; second+; /游戏控速模块 void Delay(void) long t; for(t=0;t=max;t+) /速度选择函数 void In Delay(void) I int sw=0; system(cls); do E printf( 请游戏的速度:0-10n); switch (getch() case0:max=0;break; case1:max=1000;break; case2:max=10000;break; case3:max=100000;break; case4

10、:max=1000000;break; case5:max=10000000;break; case6:max=100000000;break; case7:max=1000000000;break; case8:max=10000000000;break; case9:max=100000000000;break; case10:max=500000000000;break; default:printf(输入错误,请重新选择); sw=1; (urmuud FcoL (g fq翌 - 兰苍 p-=pf = -(/vs-z/v 宀 /BOSS攻击模块 /子弹攻击模块 void movebul

11、(int aN) int i,j; for(i=0;i21;i+) for(j=0;j=0;i-) for(j=0;j=0;i-) for(j=0;jwidth;j+) if(i=21 if(aij=7)aij=0,ai+1j=7; if(a21pl=1 for(i=0;i=0;j-) if(i=21 | /位图调用模块 void bmp(void)/i nt argc, char* argv HANDLE h; HDC dc1,dc2; BITMAP bmp; de仁GetDC(0);得到屏幕DC h=Loadlmage(NULL,E:hahamusic1.bmp,IMAGE_BITMAP,

12、0,0 丄 R_LOADFRO MFILE); dc2=CreateCompatibleDC(dc1); SelectObject(dc2,h); GetObject(h,sizeof(bmp), BitBlt(dc1,100,100, bmp.bmWidth=2080,bmp.bmHeight=1080,dc2,0,0,SRCCOPY); Sleep(20); ReleaseDC(0,dc1); DeleteDC(dc2); DeleteObject(h); getch(); /游戏设置模块 void set(void) int sw=0,i,j; system(cls); do E sw=

13、0; printf(请游戏界面的大小:1.小2.大nn); switch (getch() case1:width=200;pl=200;break; case2:width=20;pl=40;break; default:printf(输入错误,请重新选择); sw=1; while(sw); do sw=0; printf( 请选择敌机密度:1.大2.中3.小nn); switch (getch() | case1:de nsity=1O;break; case2:de nsity=20;break; case3:de nsity=30;break; default:printf(错,请重

14、新选择); sw=1; while(sw); do sw=0; printf(敌机的飞行速度:1.快2.中3.慢nn); switch (getch() | case1:speed=2;break; case2:speed=3;break; case3:speed=4;break; default:printf(错误,请重新选择); sw=1; while(sw); for(i=0;i22;i+) for(j=0;j:,15); if(getch()=s|getch()=S) set(); I /主函数 void main() I| /全局变量初始化 long int i=0,j=0; men

15、u(); system(mode con cols=54 lin es=25); / 屏幕大小控制 system(color 0A);屏幕颜色更改 scr21pl=1; scr00=3; /关卡一背景音乐 /PlaySou nd(E:hahamusicgame_music.mp3, NULL, SND_ASYNC | SND_LOOP | SND_FILENAME); /方式一,不能同时播放两首歌曲 mciSe ndStri ng(ope n E:hahamusicgame_music.mp3 alias MyS on g,NULL,0,NULL); mciSe ndStri ng(play

16、MyS on g,NULL,0,NULL); /方式二,课同时播放两首歌 /关卡一 / / while(1) int sec on d=0 ,minu te=O; if(kbhit()判断键盘当前是否有输入,有则返回该值,无则返回0 switch(getch() casea: caseA: case 49:if(pl0) scr21pl=0,scr21-pl=1;break; cased: caseD: case 51:if(pl=100) mciSendString(close MySong,NULL,0,NULL); PlaySou nd(E:hahamusic1761.mp3, NULL

17、, SND_FILENAME | SND_ASYNC); printf( 恭喜你闯过第1关:按任意键继续 对不起,游戏结束:按任意键结束 );getch();getch();break; if(k2=0) pri ntf( 对不起,游戏结束:按任意键结束 );getch();getch();break; if(k3=10) pri ntf( );getch();getch();break; /关卡二 / / if(k1=100) / 全局变量初始化 k仁0; score=0; death=7; minu te=0; sec on d=0; width=40; den sity=20; spee

18、d=3; /关卡二背景音乐 mciSe ndStri ng(ope n E:hahamusicgame_music.mp3 alias MyS on g,NULL,0,NULL); mciSe ndStri ng(play MyS on g,NULL,0,NULL); while(1) if(kbhit()/判断键盘当前是否有输入,有则返回该值,无则返回0 switch(getch() casea: case 49:if(pl0) scr21pl=0,scr21-pl=1;break; cased: case 51:if(pl=500) mciSe ndStri ng(close MySo n

19、g,NULL,0,NULL); PlaySo un d(C:gameresources oun dsW9.wav, NULL, SND_FILENAME | SND_ASYNC); printf( 恭喜你闯过第2关:按任意键继续 );getch();getch();break; if(k2=0) pri ntf(对不起,游戏结束:按任意键结束 );getch();getch();break; if(k3=10) pri ntf(对不起,游戏结束:按任意键结束 );getch();getch();break; /关卡三 / / if(k1=500) / 全局变量初始化 k仁0; score=0;

20、 death=7; k1=0; minu te=0; sec on d=0; width=20; speed=2; /关卡三背景音乐 mciSe ndStri ng(ope n C:gameresources oun ds1.mp3 alias MyS on g,NULL,0,NULL); mciSe ndStri ng(play MyS on g,NULL,0,NULL); while(1) if(kbhit()判断键盘当前是否有输入,有则返回该值,无则返回0 switch(getch() casea: case 49:if(pl0) scr21pl=0,scr21-pl=1;break;

21、cased: case 51:if(pl=1000) mciSe ndStri ng(close MyS on g,NULL,0,NULL); PlaySou nd(E:hahamusic1761.wav, NULL, SND_FILENAME | SND_ASYNC); printf(恭喜你闯过第3关:按任意键继续 );getch();getch();break; if(k2=0) pri ntf(对不起,游戏结束:按任意键结束 );getch();getch();break; if(k3=10) pri ntf(对不起,游戏结束:按任意键结束 );getch();getch();break

22、; 2.3游戏音效素材:背景音乐采用的是超级玛丽,其他采用微信打飞机的资 源,共设置3个关卡,供用户娱乐。这套程序的缺点是画面闪动太快,音效文件 只支持Windows xp系统,运行速度迟缓,画面显示后 5秒钟才加载音乐素材, 采用绝对路径,在别的电脑运行时画面和声音素材会失效。 目 录 学生 实验 心得 实验课的真正目的不是为了完成某项作业, 而是为了培养我们主动学习和解 决问题的能力,丢掉长久以往形成的“坐以待毙”的习惯。我们在实验中有很多 想法要实现,有很多苦难需要克服,就逼迫我们通过各种手段来获取解决方案, 也就是在这一过程中,主动学习和解决问题的能力得到培养和提高。在互联网时 代,获

23、取方法和资料变得特别容易,但其中也掺杂了很多虚假信息(在寻找位图 实现方法时,就走了很多弯路),建议以图书为主,互联网为辅,会大大节省时间, 提高效率。我通过设计课,认识到程序设计整体性的重要程度。在敲第一个代码 之前,要做到心中有一个清晰的轮廓,知道自己干什么,该怎样干,才能做到程 序写的又快又好。同时算法又是一个不容忽视的重要因素,一个程序的好坏很大 程度取决与算法,我们应探索多种通向目的的算法,从中找出那个最优的。 总之,通过实验课,我学习到了程序设计的整体思想,算法最优化概念,最重 要的是主动解决问题的能力。 学生(签名):王均坐 2015年5月17日 指导 教师 评语 成绩评定: 指

24、导教师(签名): 年 月日 21 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签。 错误!未定义书签

温馨提示

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

评论

0/150

提交评论