收藏 分销(赏)

c语言游戏设计.doc

上传人:精**** 文档编号:2480216 上传时间:2024-05-30 格式:DOC 页数:24 大小:1.11MB
下载 相关 举报
c语言游戏设计.doc_第1页
第1页 / 共24页
c语言游戏设计.doc_第2页
第2页 / 共24页
c语言游戏设计.doc_第3页
第3页 / 共24页
c语言游戏设计.doc_第4页
第4页 / 共24页
c语言游戏设计.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

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

2、 /系统函数头文件 include /时间函数头文件 include /windows函数库 include /导入声音头文件 pragma comment(lib,winmm.lib )/导入声音头文件库1.4: 游戏过程模拟:启动游戏 用户个性化设置恭喜进入下一关Game over判断飞机生命 记录飞机飞行时间和生命判断输入指令Menu菜单函数Mpovepal1敌弹Movepal敌机函数Boss函数Bmp位图调用Set设置函数Update计时函数Delay游控函数Indelay速控函数Print界面输出Movebul子弹速度飞机的移动,子弹的发射,音乐的播放,信息的记录1.5: 显示效果如

3、下图所示:初始设置界面: 游戏界面 2 算法实现 2.1 需要了解的知识点:Main函数和menu函数编写比较顺利,在bmp函数中遇到如何显示窗口和调用图片的问题,看了一些例子和网上的资料,逐渐掌握了一下知识点: 设备上下文:设备,显示器,打印机,数码相机,扫描仪这些类似的设备 ,上下文,就是上面设备的相关信息,比如屏幕分辨率等 HANDLE 通用句柄,实际上是一个指向指针的指针,在Windows操作系统中,内存操作器经常移动对象,来满足各种程序的内存需要,为了解决寻找对象问题,内存管理器开辟出一块专门的内存储存空间,把移动后的地址存储在该空间,这样就可以通过该地址间接寻找到对象。 HDC设备

4、描述句柄,实现对窗口操作区域的GDI(图形设备接口, 负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出)操作,如画线、写文本、绘画制图等。 BITMAP 用于处理有像素数据定义的图像的对象。 GetDC(0) 检索特定的客户区域或整个屏幕的宣示设备上下文环境的句柄,以后可以使用该句柄在设备上下文环境中绘图。 LoadImage 装载图标、光标或位图。HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int CyDesired,UINT fuLoad), hinst 处理包含

5、被撞在图像模块的实例,装载oem图像时参数设为0;name指向装载图像资源的名称;type 指定被装备图像类型cxdesired 和cyDesired指定图标的宽度和高度,如果参数为0,则使用目前资源的高度。Fuload -LR_LOADFROMFILE:根据参数lpszName的值装载图像。若标记未被给定,lpszName的值为资源名称。 CreateCompatibleDC 该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。通过GetDc()获取的HDC直接与相关设备沟通,而本函数创建的DC,则是与内存中的一个表面相关联。 SelectObject 计算机编程语言函数,该函数选择一

6、对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。 GetObject 函数功能:该函数得到指定图形对象的信息,根据图形对象,函数把填满的或结构,或表项(用于逻辑调色板)数目放入一个指定的缓冲区。 BitBlt 该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境. ReleaseDC 函数释放设备上下文环境(DC)供其他应用程序使用。函数的效果与设备上下文环境类有关。它只释放公用的和设备上下文环境,对于类或私有的则无效。 DeleteDC :该函数删除指定的设备上下文环境. DeleteObject 该函数删除一个逻辑笔、画笔、字体、位图

7、、区域或者调色板,释放所有与该对象有关的系统资源,在对象被删除之后,指定的句柄也就失效了 system(mode con cols=48 lines=25) 表示窗口宽度和高度 system(“color OA”) color后面的0是背景色代号,A是前景色代号。各颜色代码如下:0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A=淡绿色 B=淡浅绿色 ,淡红色 D=淡紫色 E=淡黄色 F=亮白色2.2 代码讲解:#include /常规库头文件#include /控制台输入输出流头文件#include /系统函数头文件#include /

8、时间函数头文件#include /windows函数库#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); /子弹移动函数void movebul1(int N); /BOSS子弹移动函数void movepla(int N); /敌机移动函数void movep

9、la1(int N); /敌机移动函数void boss(int N); /boss模块void bmp(void); /位图调用模块void set(void); /设置函数void menu(void); /主菜单函数int scr23N=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 clockint minute;int second;typedef struct clo

10、ck CLOCK;/计时模块void Update(void) p+; 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) int sw=0; system(cls); do printf(请游戏的速度:0-10n); switch (getch() case0:max=0;break; case1:max=1000;

11、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(输入错误,请重新选择); sw=1; while(sw);/界面输出模块void pri

12、nt(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);/敌机1 if(aij=7)printf(%c,15);/敌机2 if(aij=8)printf(%c,14);/BOSS if(aij=9)printf(%c,3

13、1);/BOSS攻击 /if(aij=4)printf(|);/垂直边界 /if(aij=5)printf(%c,20);/上水平边界 /if(aij=6)printf(-);/下水平边界 if(i=1&j=width-1)printf(得分:%d,score); if(i=3&j=width-1)printf(生命:%d,death); if(i=5&j=width-1)printf(设置:S键); if(i=7&j=width-1)printf(速度:V键); if(i=9&j=width-1)printf(时间:%2d:%2d,minute,second); if(i=12&j=widt

14、h-1)printf(控制:); if(i=13&j=width-1)printf( W); if(i=14&j=width-1)printf( A D); if(i=15&j=width-1)printf( 5); if(i=16&j=width-1)printf( 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=7)aij=

15、0,ai+1j=7; if(a21pl=1&a20pl=7) death -=3; k=death; /横向奖励模块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,LR_

16、LOADFROMFILE); 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 sw=0; prin

17、tf(请游戏界面的大小: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:density=10;break; case2:density=20;break; case3:density=30;break; default:printf(错,请重新选择); sw

18、=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();/主函数void main() /全局变量初始化 long int i=0,j=0; menu(); system(mo

19、de con cols=54 lines=25); /屏幕大小控制 system(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); /方

20、式二,课同时播放两首歌 /关卡一/ while(1) int second=0,minute=0; 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); PlaySound(E:hahamusic1761.mp3, NULL, SND_FILENAME | SND_ASYNC); printf(恭

21、喜你闯过第1关:按任意键继续);getch();getch();break; if(k2=0) printf(对不起,游戏结束:按任意键结束);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_musi

22、c.mp3 alias MySong,NULL,0,NULL); mciSendString(play MySong,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) mciSendString(close MySong,NULL,0,NULL); PlaySound(C:gameresourcesounds9.wav, NULL, SND_FILEN

23、AME | SND_ASYNC); printf(恭喜你闯过第2关:按任意键继续);getch();getch();break; if(k2=0) printf(对不起,游戏结束:按任意键结束);getch();getch();break; if(k3=10) printf(对不起,游戏结束:按任意键结束);getch();getch();break; /关卡三/if(k1=500) /全局变量初始化 k1=0; score=0; death=7; k1=0; minute=0; second=0; width=20; density=10; speed=2; /关卡三背景音乐 mciSend

24、String(open C:gameresourcesounds1.mp3 alias MySong,NULL,0,NULL); mciSendString(play MySong,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=1000) mciSendString(close MySong,NULL,0,NULL); PlaySound(E:hahamusic1761.wav, NULL, SND_FILENAME | SND_ASYNC); printf(恭喜你闯过第3关:按任意键继续);getch();getch();break; if(k2=0) printf(对不起,游戏结束:按任意键结束);getch();getch();break; if(k3=10) printf(对不起,

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服