游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx
《游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx》由会员分享,可在线阅读,更多相关《游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
![游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/9cebd9c0-adee-40fe-925f-73a1204dcb25/9cebd9c0-adee-40fe-925f-73a1204dcb251.gif)
飞机撞到怪兽,飞机与怪兽同时消失,游戏结束。
3.主界面设计思路
创建一个窗口后,贴一个空白的位图,然后分别将背景图、飞机图、子弹图和怪物图重叠贴在空白的位图之上,形成视觉上的主界面。
·
二、相关原理知识介绍
a.游戏中子弹数目和怪兽数量分别用两个数组:
来进行表示,同一时刻屏幕中子弹和怪兽数目最大为30;
b.函数:
MyRegisterClass()目的:
注册窗口类
函数:
InitInstance(HINSTANCE,int)目的:
保存实例句柄并创建主窗口
注释:
在此函数中,我们在全局变量中保存实例句柄并创建和显示主程序窗口
WndProc(HWND,UINT,WPARAM,LPARAM)目的:
处理主窗口的消息
WM_COMMAND-处理应用程序菜单
WM_PAINT-绘制主窗口
WM_DESTROY-发送退出消息并返回
消息处理函数:
1.处理WM_LBUTTONDOWM消息发射子弹
2.处理WM_RBUTTONDOWM消息生成怪兽
3.处理WM_MOUSEMOVE消息设定飞机贴图坐标
4.在窗口结束时恢复鼠标移动区域
C.主消息循环与游戏循环
//主消息循环:
/*
while(GetMessage(&
msg,NULL,0,0))
{
if(!
TranslateAccelerator(msg.hwnd,hAccelTable,&
msg))
{
TranslateMessage(&
msg);
DispatchMessage(&
}
}
*/
//游戏循环
msg.message=WM_NULL;
while(msg.message!
=WM_QUIT)
if(PeekMessage(&
msg,NULL,0,0,PM_REMOVE))
else
tNow=GetTickCount();
if(tNow-tPre>
=40)
MyPaint(hdc);
return(int)msg.wParam;
}
d.函数列表截图:
三、设计步骤说明
1.开发环境配置
采用MicrosoftVisualStudio2013开发,使用VC++语言,可在Win7、Win8、Win10上运行,兼容WinXP;
头文件如下图所示:
路径配置如下图所示:
其余配置均为默认环境。
2.全局以及局部的各种变量说明
//全局变量:
HINSTANCEhInst;
//当前实例
TCHARszTitle[MAX_LOADSTRING];
//标题栏文本
TCHARszWindowClass[MAX_LOADSTRING];
//主窗口类名
//+++++++++++++++++++++++++++
HBITMAPbg,ship,bullet,klbird,bmp;
//背景、飞机、子弹位图
HDChdc,mdc,bufdc;
HWNDhWnd;
DWORDtPre,tNow;
intx,y,nowX,nowY;
//x,y是鼠标光标位置,nowX,nowY是飞机的贴图坐标
intw=0,bcount,klcount;
//w滚动背景需要剪裁的区域宽度,bcount飞机当前的子弹数
BULLETb[30];
//声明一个bullet数组用于存放飞机发出的子弹
KLBIRDk[30];
//声明一个klbird数组用于存放怪兽数量
//pt鼠标光标位置,lt、rb用于限制鼠标光标移动区域为窗口内部
//(取得窗口内部区域并进行屏幕坐标转换)
POINTpt,lt,rb;
RECTrect;
//此代码模块中包含的函数的前向声明:
ATOMMyRegisterClass(HINSTANCEhInstance);
BOOLInitInstance(HINSTANCE,int);
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
INT_PTRCALLBACKAbout(HWND,UINT,WPARAM,LPARAM);
//自定义绘制函数
voidMyPaint(HDChdc);
3.自定义类及其成员函数的说明
一、自定义绘图函数MyPaint(HDChdc)用于:
设定飞机坐标并进行贴图;
设定所有子弹坐标并进行贴图;
设定随机生成怪兽的坐标并进行贴图;
显示真正的鼠标光标所在位置;
2、自定义子弹数组和怪兽数组,用于:
设定子弹和怪兽的坐标以及判断子弹和怪兽是否存在,设定子弹和怪兽数组最大值为30,当存在且数值小于30时计数加一,当存在且坐标越过游戏界面窗口边界时计数减一,同时存在的布尔型变为false。
//定义子弹结构体,x,y代表坐标,exist代表子弹是否存在
structBULLET
{
intx,y;
boolexist;
};
//定义怪物结构体,x,y代表坐标,exist代表怪物是否存在
structKLBIRD
4.实现功能的关键代码及代码含义
代码A
对飞机、子弹、怪兽的坐标进行设定与贴图;
判断子弹是否打中怪兽、飞机是否撞到怪兽(分别通过对两者的坐标范围的判断而实现效果,代码详见下面)
//****自定义绘图函数********************************
//1.设定飞机坐标并进行贴图
//2.设定所有子弹坐标并进行贴图
//3.设定随机生成怪兽的坐标并进行贴图
//4.显示真正的鼠标光标所在位置
voidMyPaint(HDChdc)
TCHARstr[20]=L"
"
;
inti;
//贴上背景图
SelectObject(bufdc,bg);
BitBlt(mdc,0,0,w,480,bufdc,640-w,0,SRCCOPY);
BitBlt(mdc,w,0,640-w,480,bufdc,0,0,SRCCOPY);
//计算飞机的贴图坐标,每次贴图,飞机会以10个单位向当前鼠标位置靠近,直到位置相同
if(nowX<
x)
nowX+=10;
if(nowX>
nowX=x;
else
nowX-=10;
if(nowX<
if(nowY<
y)
nowY+=10;
if(nowY>
nowY=y;
nowY-=10;
if(nowY<
//贴上飞机图
SelectObject(bufdc,ship);
BitBlt(mdc,nowX,nowY,100,74,bufdc,0,74,SRCAND);
BitBlt(mdc,nowX,nowY,100,74,bufdc,0,0,SRCPAINT);
//如果子弹打中怪物,则怪物与子弹消失
for(inti=0;
i<
30;
i++)
for(intu=0;
u<
u++)
{
if(b[i].x>
=k[u].x&
&
b[i].x<
=k[u].x+60&
b[i].y>
=k[u].y&
b[i].y<
=k[u].y+60)
{
b[i].exist=false;
k[u].exist=false;
}
//如果怪物碰到飞机,则游戏结束,弹出窗口
for(intu=0;
u++)
if(k[u].x>
=nowX&
k[u].x<
=nowX+45&
k[u].y>
=nowY&
k[u].y<
=nowY+45)
MessageBox(NULL,TEXT("
游戏结束"
),TEXT("
GameOver"
),NULL);
//弹出窗口“GameOver”,提示游戏结束
k[u].exist=false;
PostQuitMessage(0);
//响应确定按钮后退出游戏
//贴上怪物图
SelectObject(bufdc,klbird);
if(klcount!
=0)
u<
30;
if(k[u].exist)
BitBlt(mdc,k[u].x,k[u].y,40,40,bufdc,0,0,SRCCOPY);
//设定下次怪物的坐标,出现后向右移动,所以x方向递增
k[u].x+=5;
//怪物超出区域则视为不存在,计数减一
if(k[u].x>
530)
{
klcount--;
k[u].exist=false;
}
//子弹贴图,先判断子弹数是否为0,不为0则对子弹数组中各个还存在的子弹按其坐标(b[i].x,b[i].y)循环贴图操作
SelectObject(bufdc,bullet);
if(bcount!
for(i=0;
i<
if(b[i].exist)
//贴上子弹图
BitBlt(mdc,b[i].x,b[i].y,10,10,bufdc,0,10,SRCAND);
BitBlt(mdc,b[i].x,b[i].y,10,10,bufdc,0,0,SRCPAINT);
//设定下次子弹的坐标,向左发射,所以x方向递减
b[i].x-=10;
//子弹超出区域及视为不存在,计数减一
if(b[i].x<
0)
bcount--;
b[i].exist=false;
//显示当前鼠标坐标,即飞机移动的目的地
wsprintf(str,L"
X坐标%d"
x);
TextOut(mdc,0,0,str,wcslen(str));
Y坐标%d"
y);
TextOut(mdc,0,20,str,wcslen(str));
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
tPre=GetTickCount();
w+=10;
if(w==640)
w=0;
代码B
设置背景音乐,游戏开始播放,播放完毕循环播放,直至游戏退出停止播放
首先在stdafx.h头文件中添加如下代码以定义PlaySound
//stdafx.h:
标准系统包含文件的包含文件,