游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx

上传人:b****4 文档编号:7899545 上传时间:2023-05-09 格式:DOCX 页数:15 大小:976.58KB
下载 相关 举报
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第1页
第1页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第2页
第2页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第3页
第3页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第4页
第4页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第5页
第5页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第6页
第6页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第7页
第7页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第8页
第8页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第9页
第9页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第10页
第10页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第11页
第11页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第12页
第12页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第13页
第13页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第14页
第14页 / 共15页
游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx

《游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx》由会员分享,可在线阅读,更多相关《游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx(15页珍藏版)》请在冰点文库上搜索。

游戏编程课程设计软件工程飞机打怪兽小游戏Word文档格式.docx

飞机撞到怪兽,飞机与怪兽同时消失,游戏结束。

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:

标准系统包含文件的包含文件,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2