




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1: C语言游戏设计1.1 :课程设计目标c语言编写一款打飞机游戏,掌握函数的使用和编程的整体思路。1.2 :整体设计思路总体设想:运行游戏时显示游戏的界面,允许用户选择个性化设置, A、D、W分别控制飞机的左右移动和发射子弹,不同的敌机飞行和攻击,并 不时伴有奖励。游行运行时播放音效,同时记录飞机的生命和得分,达到一 定的分数进入下一关。需要构建的函数:位图调用模块、界面输出函数、主菜单函数、设置函数、速度选择函数、游戏控制函数、敌机移动函数、子弹移动函数、boss函数、计时函数1.3 :需调用的头文件:include /常规库头文件include /include/include/incl
2、ude /windows控制台输入输出流头文件系统函数头文件时间函数头文件函数库include /导入声音头文件pragma comment(lib,winmm.lib )/导入声音头文件库1.4:游戏过程模拟:记录飞机飞行时间和Menu菜单 函数Mpov epall 敌弹Move pal 敌机 函数Boss函数Bmp 位图 调用Set 设置 函数Moveb ul 子弹速 度11Print界面 输出Indelay速控函 数IDelay 游控 函数飞机的移动,子弹的发射,音乐的播放,信息的记录1,5 :显示效果如下图所示Update计时函数游戏界面初始设置界面:呼rE:hahaDebughaha
3、, eie游戏说明: 飞行控制:A向左D向右 上发射钾Esc:开始游戏游戏时间为1喷钟本游贷由王期坐改编双击回车键直凝进入游戏:.2算法实现2.1 需要了解的知识点:Main函数和menu函数编写比较顺利,在bmp函数中遇到如何显示窗口和调用图 片的问题,看了一些例子和网上的资料,逐渐掌握了一下知识点:O 设备上下文:设备,显示器,打印机,数码相机,扫描仪这些类似的设备上下文,就是上面设备的相关信息,比如屏幕分辨率等HANDLE通用句柄,实际上是一个指向指针的指针,在Windows操作系统中, 内存操作器经常移动对象,来满足各种程序的内存需要,为了解决寻找对象问题, 内存管理器开辟出一块专门的
4、内存储存空间, 把移动后的地址存储在该空间,这 样就可以通过该地址间接寻找到对象。(3 HDC设备描述句柄,实现对窗口操作区域的 GDI (图形设备接口,负责系统与绘图程序之间的信息交换,处理所有Window纲序的图形输出)操作,如画线、 写文本、绘画制图等。(4 BITMAP用于处理有像素数据定义的图像的对象(5 GetDC(0)检索特定的客户区域或整个屏幕的宣示设备上下文环境的句 柄,以后可以使用该句柄在设备上下文环境中绘图。 Loadimage 装载图标、光标或位图。HANDLELoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,i
5、nt cxDesired,int CyDesired,UINT fuLoad), hinst处理包含被撞在图像模块的实例,装载oem图像时参数设为0;name f旨向装载图像资源的名称;type指定被装备图像类型cxdesired和cyDesired指定图标的宽度和高度,如果参数为0,则使用目前资源的高度。Fuload -LR_LOADFROMFILE据参数IpszName的值装载图像。若标记未被给定, IpszName的值为资源名称。CreateCompatibleDC该函数创建一个与指定设备兼容的内存设备上下文环境(D。通过GetDc()获取的HDCft接与相关设备沟通,而本函数创建的DC
6、 则是与内存中的一个表面相关联。C8 SelectObject计算机编程语言函数,该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。(9 GetObject函数功能:该函数得到指定图形对象的信息,根据图形对象, 函数把填满的或结构,或表项(用于逻辑调色板)数目放入一个指定的缓冲区。10 BitBlt该函数对指定的源设备环境区域中的像素进行位块( bit_block )转换,以传送到目标设备环境. ReleaseDC函数释放设备上下文环境(D。供其他应用程序使用。函数的效果与设备上下文环境类有关。它只释放公用的和设备上下文环境,对于类或私有的则无效。吟 DeleteDC
7、 :该函数删除指定的设备上下文环境.13 DeleteObject该函数删除一个逻辑笔、画笔、字体、位图、区域或者调色板,释放所有与该对象有关的系统资源,在对象被删除之后,指定的句柄也就失效了 system(mode con cols=48 lines=25)表示窗 口宽度和高度15 system( color OA )color后面的0是背景色代号,A是前景色代号。各颜色代码如下:04色1 =蓝色2=绿色3=湖蓝色4=红色5=紫色6=黄色7= 白色8=灰色9=淡蓝色A=淡绿色B淡浅绿色,淡红色D=淡紫色E=淡黄色F= 亮白色2.2代码讲解:/windows#include/#include/
8、#include/#include/#include常规库头文件控制台输入输出流头文件 系统函数头文件时间函数头文件函数库宏计时函数游戏控速函数 速度选择函数 界面输出函数 子弹移动函数子弹移动函数敌机移动函数 敌机移动函数模块位图调用模块 设置函数 主菜单函数#include /导入声音头文件#pragma comment(lib,winmm.lib )/导入声音头文件库#define N 50/void Update(void);/void Delay(void); / void InDelay(void);/void print(int N);/ void movebul(int N);
9、 /void movebul1(int N); /BOSSvoid movepla(int N); /void movepla1(int N); /void boss(int N);/bossvoid bmp(void);/void set(void); /void menu(void); / intscr23N=0,pl=20,bl=1,width=40,speed=4,density=30,score=0,death=7 ,k1=0,k2=7;/ 全局变量定义|int minute=0,second=0,p=0,k3=0;long int max=0;/时间结构体struct clocki
10、nt minute;int second;typedef struct clock CLOCK;/计时模块void Update(void) Ip+;if(p=7)_p=0;second+;)if(second=60)(second=0;minute+;)k3=minute;if(minute=15) |minute=0;)/游戏控速模块void Delay(void)long t;for(t=0;t=max;t+) )/速度选择函数void InDelay(void) Iint sw=0;system(cls);do Eprintf( 请游戏的速度:0-10n);switch (getch(
11、)case0:max=0;break;case1:max=1000;break;case2:max=10000;break;case3:max=100000;break;case4: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(输入错误,请重新选择)
12、;sw=1;)while(sw);) 1,/界面输出模块void print(int aN)(int i,j;system(cls);for(i=0;i23;i+)(for(j=-1;jwidth;j+)(ai+1width-1=4;/ai-1=4;a0j-1=5;a22j=6;if(aij=0)printf( );/清空if(aij=1)printf(%C%c%C”,17,87,16);/角色if(aij=2)printf(%c,43);/子弹if(aij=3)printf(%c,3);/敌机 1if(aij=7)printf(%c,15);/敌机 2if(aij=8)printf(%c,1
13、4);/BOSSif(aij=9)printf(%c,31);/BOSS/if(aij=4)printf(|);/if(aij=5)printf(%c,20);/if(aij=6)printf(-);/攻击垂直边界 上水平边界下水平边界if(i=1&j=width-1)printf( if(i=3&j=width-1)printf( if(i=5&j=width-1)printf( if(i=7&j=width-1)printf( if(i=9&j=width-1)printf( if(i=12&j=width-1)printf( if(i=13&j=width-1)printf( if(i=
14、14&j=width-1)printf( if(i=15&j=width-1)printf( if(i=16&j=width-1)printf(得分:%d,score);生命:d,death);设置:S键)速度:V键)时间:2d:%2d,minute,second) 控制:);W);A D);5);1 3);printf(n);/BOSS攻击模块/子弹攻击模块void movebul(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&aij=7)aij=0;if(aij
15、=7)aij=0,ai+1j=7;if(a21pl=1&a20pl=7) death -=3; k=death; I/横向奖励模块void boss(int aN)int i,j;for(i=0;i=0;j-)(if(i=21&aij=8)aij=0;if(aij=8)aij=0,aij+1=8; |/位图调用模块void bmp(void)int argc, char* argv(HANDLE h;HDC dc1,dc2;BITMAP bmp;dc1=GetDC(0);/ 得到屏幕 DC h=LoadImage(NULL,E:hahamusic1.bmp,IMAGE BITMAP,0,0,L
16、R LOADFRO MFILE);dc2=CreateCompatibleDC(dc1);SelectObject(dc2,h);GetObject(h,sizeof(bmp),&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 Esw=0;printf(请游戏界面的
17、大小:1.小2.大nn);switch (getch() case1:width=200;pl=200;break;case2:width=20;pl=40;break;default:printf(输入错误,请重新选择);sw=1;10while(sw);do(sw=0;printf(请选择敌机密度:1.大2.中3.小nn);switch (getch() |case1:density=10;break;case2:density=20;break;case3:density=30;break;default:printf(错,请重新选择);sw=1;while(sw);dosw=0;pri
18、ntf(敌机的飞彳T速度: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;menu();system(mode con cols=54 lines=25); /屏幕大小控制syst
19、em(color 0A);/屏幕颜色更改scr21pl=1;scr00=3;/关卡一背景音乐PlaySound(E:hahamusicgame_music.mp3, NULL, SND_ASYNC | SND_LOOP | SND_FILENAME); /方式一,不能同时播放两首歌曲mciSendString(open E:hahamusicgame music.mp3 alias MySong,NULL,0,NULL);mciSendString(play MySong,NULL,0,NULL);/方式二,课同时播放两首歌/关卡一/while(1) 12 int second=0,minut
20、e=0;if(kbhit()/判断键盘当前是否有输入,有则返回该值,无则返回0switch(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);PlaySound(E:hahamusic1761.mp3, NULL, SND_FILENAME | SND_ASYNC);printf( 恭喜你闯过第1关:按任意键继续);getch();getch();break; if(k2=0) p
21、rintf(对不起,游戏结束:按任意键结束);getch();getch();break; if(k3=10) printf(对不起,游戏结束:按任意键结束);getch();getch();break;/关卡二/if(k1=100)/全局变量初始化k1=0;score=0;death=7;minute=0;second=0;width=40;density=20;speed=3;/关卡二背景音乐mciSendString(open E:hahamusicgame music.mp3 alias MySong,NULL,0,NULL);mciSendString(play MySong,NUL
22、L,0,NULL);while(1) if(kbhit()/判断键盘当前是否有输入,有则返回该值,无则返回0switch(getch() Icasea:case 49:if(pl0)scr21pl=0,scr21-pl=1;break;cased:case 51:if(pl=500) mciSendString(close MySong,NULL,0,NULL);PlaySound(C:gameresourcesounds9.wav”, NULL, SND_FILENAME | SND_ASYNC);printf( );getch();getch();break;if(k2=0) printf
23、( );getch();getch();break;if(k3=10) printf( );getch();getch();break;恭喜你闯过第2关:按任意键继续对不起,游戏结束:接任意键结束对不起,游戏结束:接任意键结束/关卡三/ / if(k1=500)15/全局变量初始化k1=0;score=0;death=7; k1=0;minute=0;second=0;width=20;speed=2;/关卡三背景音乐mciSendString(open C:gameresourcesounds1.mp3 aliasMySong,NULL,0,NULL);mciSendString(play MySong,NULL,0,NULL);while(1)if(kbhit()/判断键盘当前是否有输入,有则返回该值,无则返回0switch(getch()casea:case 49:if(pl0)scr21pl=0,scr21-pl=1;break;cased:case 51:if(pl=1000) mciSendString(close MySong,NULL,0,NULL);PlaySound(E:hahamusic1761.wav
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一年级道德与法治下册 第二单元 春天到了 第5课《探索春天的奥秘》教学设计 冀教版
- 小学一年级语文考试启示性试题及答案
- 质量目标制定分解管理制度
- 九年级化学下册 第7单元 常见的酸和碱 第2节 碱及其性质 第2课时 碱的化学性质教学设计 (新版)鲁教版
- 四年级体育上册 第七册 第十七课 队列练习 广播操 武术操教学设计
- 员工奖励申报审批管理制度
- 古代文学史考试的关键试题及答案
- 美容师考试考生的心理健康管理试题及答案
- 汽车美容师考核标准及技巧试题及答案
- 乘上大船游世界(教学设计)-2023-2024学年人教版(2012)美术一年级下册
- (一模)青岛市2025年高三年级第一次适应性检测地理试卷(含标准答案)
- 2025年铁岭卫生职业学院单招职业技能测试题库学生专用
- 2025年公务员遴选考试公共基础知识必考题库170题及答案(九)
- 广告投放预算分配情况统计表(按预算项目)
- 2025年高考预测猜题 化学 信息必刷卷01(新高考 通 用)(解析版)
- 压疮的六个分期及护理措施
- 沪教版(五四学制)(2024)六年级数学下册 第六章 圆和扇形 单元测试题(含解析)
- 2025年开封大学单招职业技能测试题库完整
- 30-提前介入在建高铁的实践与思考5则范文
- 职业教育培训需求分析课件
- 2025版矿山安全生产责任承包协议范本3篇
评论
0/150
提交评论