飞机大战游戏设计实验山科大Word格式文档下载.docx
- 文档编号:22031235
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:31
- 大小:95.18KB
飞机大战游戏设计实验山科大Word格式文档下载.docx
《飞机大战游戏设计实验山科大Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《飞机大战游戏设计实验山科大Word格式文档下载.docx(31页珍藏版)》请在冰豆网上搜索。
//定义指针
for(pos1=m_ObjList[i].GetHeadPosition();
(pos2=pos1)!
=NULL;
)//遍历链表
CGameObject*pObj=(CGameObject*)m_ObjList[i].GetNext(pos1);
2.2获取矩形区域函数
CRectbRect=pBomb->
GetRect();
//获得矩形区域
CRectGetRect()
{
returnCRect(m_ptPos,CPoint(m_ptPos.x+10,m_ptPos.y+BOMB_HEIGHT));
}
staticconstintBOMB_HEIGHT=20;
//图片定义
2.3添加爆炸效果函数
//用新位置绘制图像
m_Images.Draw(pDC,m_nProcess,m_ptPos,ILD_TRANSPARENT);
m_nProcess++;
returnTRUE;
//添加爆炸效果
m_ObjList[enExplosion].AddTail(newCExplosion(mRect.left,mRect.top));
2.4弹出对话框函数
//过关时弹出对话框
intt=MessageBox(TEXT("
敌人太过强大,少侠想重整旗鼓重新开始吗?
"
),TEXT("
GameOver!
),MB_YESNO);
if(t==IDYES){……}
if(t==IDNO)PostQuitMessage(0);
//退出
此函数主要是弹出对话框供用户进行选择,当用户点击确定相应按钮时执行此函数语句进行继续运行。
2.5字体的输出
pMemDC->
SetBkMode(TRANSPARENT);
//文字背景透明
wsprintf(lifeleft,L"
当前血量:
%d"
m_pMe->
HP);
SetTextColor(RGB(255,255,0));
//字体颜色
TextOutW(10,10,lifeleft,_tcslen(lifeleft));
//字体位置
2.7游戏隐形模式的实现
BOOLCEnemy:
:
LoadImage(intt)
{
if(t==0)
returnCGameObject:
LoadImage(m_Images,IDB_BITMAP1,RGB(0,0,0),53,41,1);
LoadImage(m_Images,IDB_BITMAP1,RGB(0,0,0),1,35,1);
}
CEnemy:
LoadImage(yyyy);
//载入图像
CEnemy1:
2.8设置定时器
定时器告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。
通常有两种方法来实现:
发送WM_TIMER消息和调用应用程序定义的回调函数。
SetTimer(1,30,NULL);
//设置每30毫秒刷新一次
2.9双缓冲技术
关于双缓冲技术主要就是利用缓存的原理进行将所有的东西都先存在一个缓冲得虚拟的区域,然后再一次性的将所有的虚拟缓存中的东西都放入实在的存储器中。
//建立设备DC
m_pDC=newCClientDC(this);
//建立内存DC
m_pMemDC=newCDC;
m_pMemDC->
CreateCompatibleDC(m_pDC);
//建立内存位图
m_pMemBitmap=newCBitmap;
m_pMemBitmap->
CreateCompatibleBitmap(m_pDC,GAME_WIDTH,GAME_HEIGHT);
//将位图选入内存DC
SelectObject(m_pMemBitmap);
2.10滚屏的实现
staticintimagelocation=0;
//背景图片截取位置初始位置
CDCmemDC;
memDC.CreateCompatibleDC(pMemDC);
CBitmapbmpDraw;
bmpDraw.LoadBitmapW(IDB_BITMAP12);
//创建位图
CBitmap*pbmpold=memDC.SelectObject(&
bmpDraw);
BitBlt(0,imagelocation,808,1213,&
memDC,0,0,SRCCOPY);
//设置动态背景
BitBlt(0,0,808,imagelocation,&
memDC,0,1213-imagelocation,SRCCOPY);
imagelocation++;
if(imagelocation==1213)
imagelocation=0;
3.总体设计与详细设计
3.1系统模块划分
主要功能模块主要就是那些类的功能模块,主要有:
模块名称
功能简述
应用程序对象
游戏程序的加载、游戏对象的绘制、游戏规则的调用、玩家的键盘事件获取
游戏对象
各个游戏对象的抽象父类
战机对象
战机类,继承于游戏对象父类
敌机1对象
敌机1类,继承于游戏对象父类
敌机2对象
敌机2类,继承于游戏对象父类
BOSS对象
BOSS类,继承于游戏对象父类
奖励对象
奖励类,继承于游戏对象父类
生命对象
生命类,继承于游戏对象父类
导弹对象
导弹类,继承于游戏对象父类
炸弹1对象
炸弹1类,继承于游戏对象父类
炸弹2对象
炸弹2类,继承于游戏对象父类
爆炸对象
爆炸类,继承于游戏对象父类
3.2主要功能模块
4.编码实现
//PlaneGameView.cpp:
CPlaneGameView类的实现
#include"
stdafx.h"
PlaneGame.h"
jiang.h"
BOSS.h"
PlaneGameDoc.h"
PlaneGameView.h"
MyPlane.h"
Enemy.h"
Enemy1.h"
Bomb.h"
boer.h"
Ball.h"
shengming.h"
Explosion.h"
#include<
atlimage.h>
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
boolok;
intxxxx=0;
intyyyy=0;
intnote=1;
inttttt=0;
intbosslife=200;
boolboss=false;
boolboss1=false;
intRR=1;
//CPlaneGameView
IMPLEMENT_DYNCREATE(CPlaneGameView,CView)
BEGIN_MESSAGE_MAP(CPlaneGameView,CView)
//标准打印命令
ON_COMMAND(ID_FILE_PRINT,&
CView:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT,&
ON_COMMAND(ID_FILE_PRINT_PREVIEW,&
OnFilePrintPreview)
ON_WM_TIMER()
ON_WM_DESTROY()
ON_WM_PAINT()
END_MESSAGE_MAP()
//CPlaneGameView构造/析构
CPlaneGameView:
CPlaneGameView():
m_pMe(NULL){}
~CPlaneGameView(){}
BOOLCPlaneGameView:
PreCreateWindow(CREATESTRUCT&
cs)
//TODO:
在此处通过修改
//CREATESTRUCTcs来修改窗口类或样式
returnCView:
PreCreateWindow(cs);
//CPlaneGameView绘制
voidCPlaneGameView:
OnDraw(CDC*pDC)
CPlaneGameDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!
pDoc)
return;
//CPlaneGameView打印
OnPreparePrinting(CPrintInfo*pInfo)
//默认准备
returnDoPreparePrinting(pInfo);
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
添加额外的打印前进行的初始化过程
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
添加打印后进行的清理过程
//CPlaneGameView诊断
AssertValid()const
CView:
AssertValid();
Dump(CDumpContext&
dc)const
Dump(dc);
CPlaneGameDoc*CPlaneGameView:
GetDocument()const//非调试版本是内联的
ASSERT(m_pDocument->
IsKindOf(RUNTIME_CLASS(CPlaneGameDoc)));
return(CPlaneGameDoc*)m_pDocument;
#endif//_DEBUG
//CPlaneGameView消息处理程序
OnInitialUpdate()
OnInitialUpdate();
在此添加专用代码和/或调用基类
//初始化游戏
InitGame();
StopGame()
deletem_pMe;
deletem_pMemDC;
deletem_pDC;
deletem_pMemBitmap;
InitGame()
CRectrc;
GetClientRect(rc);
MessageBox(TEXT("
一、键盘操作,上下左右键移动战机,按下空格键发射子弹,炸毁敌机得分,\n\n二、吃掉游戏中掉落物可以增加生命或者技能\n\n三、战机生命值初始为,血量初始值为\n\n四、游戏过程中,可是随时按下Esc键退出\n\n五、游戏支持同时按下Z与空格键,发射多个子弹(在掉落物中获得技能)\n\n六、游戏中按下X键,进入无敌模式,按下C键,退出无敌模式\n\n七、游戏中按下V键,进行清屏,清屏不进行分数累积(清屏不含BOSS)\n\n八、本游戏增加了隐形战争模式(敌机隐形,BOSS不隐形)欢迎体验"
),
TEXT("
飞机大战——游戏说明"
),MB_OK);
//开始时弹出对话框介绍游戏说明
intt=MessageBox(TEXT("
你想体验隐形模式吗?
\nYES进入隐形战争,NO进入正常模式"
O(∩_∩)O~"
if(t==IDYES)
yyyy=1;
//产生随机数种子
srand((unsigned)time(NULL));
//建立设备DC
CMyPlane:
LoadImage();
CEnemy:
CEnemy1:
CBomb:
CBall:
boer:
BOSS:
CExplosion:
jiang:
shengming:
//产生主角(战机)
m_pMe=newCMyPlane;
ok=true;
//启动游戏
SetTimer(1,30,NULL);
returnTRUE;
UpdateFrame(CDC*pMemDC)
wchar_tlifeleft[20];
wchar_tScore[20];
wchar_tLevel[20];
intn=0;
if(RR%3==1)
bmpDraw.LoadBitmapW(IDB_BITMAP3);
if(RR%3==2)
bmpDraw.LoadBitmapW(IDB_BITMAP13);
if(RR%3==0)
bmpDraw.LoadBitmapW(IDB_BITMAP12);
imagelocation=0;
//绘制我方战机
if(m_pMe!
=NULL)
m_pMe->
Draw(m_pMemDC,FALSE);
//绘制记录成
if(xxxx==1)
pMemDC->
pMemDC->
if(xxxx==1)
{
wsprintf(lifeleft,L"
无敌模式开启"
pMemDC->
TextOutW(10,105,lifeleft,_tcslen(lifeleft));
//字体位置
}
wsprintf(lifeleft,L"
剩余生命:
life);
TextOutW(10,35,lifeleft,_tcslen(lifeleft));
wsprintf(Score,L"
得分:
score);
SetTextColor(RGB(255,0,0));
TextOutW(10,60,Score,_tcslen(Score));
wsprintf(Level,L"
第%d关"
level);
SetTextColor(RGB(255,255,255));
TextOutW(10,85,Level,_tcslen(Level));
V清屏(不含BOSS)"
TextOutW(620,10,lifeleft,_tcslen(lifeleft));
X无敌C退出无敌"
TextOutW(620,35,lifeleft,_tcslen(lifeleft));
剩余多发子弹(z+空格):
tttt);
TextOutW(580,85,Level,_tcslen(Level));
if(boss1)
wsprintf(Score,L"
BOSS生命值:
bosslife);
TextOutW(620,60,Score,_tcslen(Score));
else
{//GameOver
if(note==1)
{
note=0;
intt=MessageBox(TEXT("
if(t==IDYES)
tttt=0;
if(boss1)
{
POSITIONePos1=NULL,ePos2=NULL;
//用于记录敌我两级位置
for(ePos1=m_ObjList[enBOSS].GetHeadPosition();
(ePos2=ePos1)!
=NULL;
)
{
BOSS*pBOSS=(BOSS*)m_ObjList[enBOSS].GetNext(ePos1);
CRectmRect=pBOSS->
//删除敌机
m_ObjList[enBOSS].RemoveAt(ePos2);
//从索引中删除
deletepBOSS;
boss1=false;
boss=false;
}
}
m_pMe=newCMyPlane;
ok=true;
note=1;
SetTimer(1,30,NULL);
if(t==IDNO)
PostQuitMessage(0);
}
//绘制导弹、爆炸、敌机/2、子弹,奖励、BOSS、生命
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 飞机 大战 游戏 设计 实验 山科大