当前位置:文档之家› 飞机大战

飞机大战

飞机大战
飞机大战

实训报告

飞机大战游戏设计与开发

专业名称:软件工程

班级:

学号:

信息科学与工程学院

二零一三年十一月

目录

1. 概述 (03)

1.1 实训项目简介 (03)

1.2 实训功能说明 (03)

1.2.1 基本功能 (03)

2. 相关技术 (03)

2.1 基类的使用 (03)

2.2 Windows定时器技术 (03)

2.3获取矩形区域 (03)

2.4内存释放 (04)

3. 总体设计与详细设计 (04)

3.1 系统模块划分 (04)

3.2 主要功能模块 (05)

4. 编码实现 (31)

5. 实训中遇到的主要问题及解决方法 (32)

6. 实训体会 (32)

1. 概述

1.1 实训项目简介

本次实训项目是做一个飞机大战的游戏,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。该飞机大战项目运用的主要技术即是MFC编程中的一些函数、链表思想以及贴图技术。

1.2 实训功能说明

1.2.1 基本功能

(1)设置一个战机具有一定的速度,通过键盘,鼠标,方向键可控制战机的位置,空格键发射子弹。

(2)界面中敌机出现的位置为随机的。

(3)对于随机产生的敌机和敌机炸弹,若超过矩形区域,则释放该对象。

(4)添加爆炸效果,包括战机子弹打中敌机爆炸、敌机炸弹打中战机爆炸、战机与敌机相撞爆炸以及战机子弹与敌机炸弹相撞爆炸四种爆炸效果。且爆炸发生后敌机、子弹、炸弹均消失。

2. 相关技术

2.1基类的使用

在飞机大战的游戏中用到了很多基类,例如MyPlane、Bomb等等,这样使得游戏的实现更加规范,有效性。通过主函数的调用,实现了很多功能。

2.2 Windows定时器技术

Windows定时器是一种输入设备,它周期性地在每经过一个指定的时间间隔后就通知应用程序一次。程序将时间间隔告诉Windows,然后Windows给您的程序发送周期性发生的WM_TIMER消息以表示时间到了。本程序中使用多个定时器,分别控制不同的功能。在MFC的API函数中使用SetTimer()函数设置定时器,设置系统间隔时间,在OnTimer()函数中实现响应定时器的程序。

2.3获取矩形区域

首先,使用CRect定义一个对象,然后使用GetClientRect(&对象名)函数,获取界面的矩形区域rect.Width() 为矩形区域的宽度,rect.Height()为矩形区域的高度。

使用IntersectRect(&,&))函数来判断两个源矩形是否有重合的部分。如果有不为空,则返回非零值;否则,返回0。

2.4内存释放

在VC/MFC用CDC绘图时,频繁的刷新,屏幕会出现闪烁的现象,CPU时间占用率相当高,绘图效率极低,很容易出现程序崩溃。及时的释放程序所占用的内存资源是非常重要的。

在程序中使用到的刷子等占用内存资源的对象都要及时的删除。Delete Brush等。

3. 总体设计与详细设计

3.1 系统模块划分

飞机大战游戏主要模块可以说是有几个重要的类组成的。首先是老师给出的CGameObject类,以及在其派生下的BOMB,BALL,ENEMY,MYPLANE等等。

如图:

3.2 主要功能模块

主要功能是在飞机大战View类中,OnTimer函数中实现,将各个类调用,随机产生敌机,子弹的输出,爆炸的实现等等。它的实现图可以如下实现:

游戏进入模块

4. 编码实现

4.1飞机大战view.cpp

#include"stdafx.h"

#include"PlaneGame.h"

#include"PlaneGameDoc.h"

#include"PlaneGameView.h"

#include

#pragma comment(lib, "WINMM.LIB")

#include

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

IMPLEMENT_DYNCREATE(CPlaneGameView, CView)//使CObject的派生类的对象能够在运行时被动态创建。

框架利用这种能力来动态地创建新对象

BEGIN_MESSAGE_MAP(CPlaneGameView, CView)

// 标准打印命令

ON_WM_CREATE()

ON_WM_TIMER()

ON_WM_UPDATEUISTATE()

ON_WM_ERASEBKGND()

ON_COMMAND(ID_restart, &CPlaneGameView::Onrestart)

ON_COMMAND(ID_pause, &CPlaneGameView::Onpause)

ON_WM_MOUSEMOVE()

ON_WM_LBUTTONDOWN()

//ON_COMMAND_RANGE(ID_ONE,ID_THREE, OnDoSomething)

ON_COMMAND(ID_SETUP, &CPlaneGameView::OnSetup)

END_MESSAGE_MAP()

// CPlaneGameView 构造/析构

CPlaneGameView::CPlaneGameView():

life(10),score(0),count_Life(1),Num(1),is_Pass(0),is_Pause(0)

{//战机生命值、战机得分、战机增加生命值数、关卡、是否过关、是否暂停

// TODO: 在此处添加构造代码

//默认战机飞行速度

speed = 30;

//加载游戏对象图片

CMyPlane::LoadImageW();

CEnemy::LoadImageW();

CBall::LoadImageW();

CBomb::LoadImageUp();

CBomb::LoadImageDown();

CExplosion::LoadImageW();

CBoss::LoadImageW();

}

CPlaneGameView::~CPlaneGameView()

{

}

BOOL CPlaneGameView::PreCreateWindow(CREATESTRUCT& cs)

{

// TODO: 在此处通过修改

// CREATESTRUCT cs 来修改窗口类或样式

return CView::PreCreateWindow(cs);

}

// CPlaneGameView 绘制

void CPlaneGameView::OnDraw(CDC* pDC)//CDC类定义的是设备上下文对象的类。

{

CPlaneGameDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);//ASSERT_VALID什么也不做。在调试版本中,它检验一个指针是否为NULL,并且调用对象自己的AssertValid成员函数

if (!pDoc)//

return;

// TODO: 在此处为本机数据添加绘制代码

}

// CPlaneGameView 打印

BOOL CPlaneGameView::OnPreparePrinting(CPrintInfo* pInfo)

{

// 默认准备

return DoPreparePrinting(pInfo);

}

void CPlaneGameView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

{

// TODO: 添加额外的打印前进行的初始化过程

}

void CPlaneGameView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

{

// TODO: 添加打印后进行的清理过程

}

// CPlaneGameView 诊断

#ifdef _DEBUG

void CPlaneGameView::AssertValid() const

{

CView::AssertValid();//是ASSERT_VALID的成员函数用来检查指针是否为空

}

void CPlaneGameView::Dump(CDumpContext& dc) const

{

CView::Dump(dc);

}

CPlaneGameDoc* CPlaneGameView::GetDocument() const// 非调试版本是内联的????

{

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPlaneGameDoc)));//当m_pDocument不是一个CPlaneGameDoc指针时才结束程序

return (CPlaneGameDoc*)m_pDocument;

}

#endif//_DEBUG

// CPlaneGameView 消息处理程序

int CPlaneGameView::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CView::OnCreate(lpCreateStruct) == -1)

return -1;

// TODO: 在此添加您专用的创建代码

myplane = new CMyPlane;

if(AfxMessageBox(L"查看游戏说明请点击“是”,若直接进入游戏请点击“否”!

",MB_YESNO)==6)

{

AfxMessageBox(L"方向键控制战机方向,空格键射击,鼠标均可控制。初始生命值为,消灭一个敌机加分,如果分数达到要求即可进入下一关。随着关卡增多,敌机速度和数量均增加,通过3关即可赢得胜利!");

Sleep(1000);

}

SetTimer(1,30,NULL);

SetTimer(2,300,NULL);

SetTimer(3,500,NULL);

return 0;

}

int flag=1;//标志那幅图片

int is_flag=1;//设置游戏难度

void CPlaneGameView::OnTimer(UINT_PTR nIDEvent)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

CDC *pDC=GetDC();

CRect rect;

GetClientRect(&rect);

//设备环境对象类----CDC类。

CDC cdc;

//内存中承载临时图像的位图

CBitmap bitmap1;

//该函数创建一个与指定设备兼容的内存设备上下文环境(DC)

cdc.CreateCompatibleDC(pDC);

//该函数创建与指定的设备环境相关的设备兼容的位图。

bitmap1.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());

//该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。

CBitmap *pOldBit=cdc.SelectObject(&bitmap1);

//用固定的固体色填充文本矩形框

cdc.FillSolidRect(rect,RGB(51,255,255));

//添加背景图片

CBitmap bitmap_BackGround;

if(flag==1)

{

bitmap_BackGround.LoadBitmap(IDB_BACKGROUND);

}

else if(flag==2)

{

bitmap_BackGround.LoadBitmap(IDB_BACKGROUND2);

}

else if(flag==3)

{

bitmap_BackGround.LoadBitmap(IDB_BACKGROUND3);

}

BITMAP bimap2;

bitmap_BackGround.GetBitmap(&bimap2);

CDC cdc_BackGround;//定义一个兼容的DC

cdc_BackGround.CreateCompatibleDC(&cdc);//创建DC

CBitmap*Old=cdc_BackGround.SelectObject(&bitmap_BackGround);

cdc.StretchBlt(0,0,rect.Width(),rect.Height(),&cdc_BackGround,0,0,bimap2.bmWidth,bimap2 .bmHeight,SRCCOPY);

if(myplane!= NULL)

{

myplane->Draw(&cdc,TRUE);

}

//获得键盘消息

if((GetKeyState(VK_UP) <0 || GetKeyState('W') < 0) && is_Pause== 0)//上方向键

{

if(myplane->GetPoint().y>rect.top)

myplane->SetPoint( myplane->GetPoint().x,myplane->GetPoint().y-speed);

else

myplane->SetPoint(myplane->GetPoint().x,rect.top);

}

if((GetKeyState(VK_DOWN) <0|| GetKeyState('S') < 0)&& is_Pause== 0)//下方向键

{

if( myplane->GetPoint().y+60<=rect.bottom)

myplane->SetPoint( myplane->GetPoint().x,myplane->GetPoint().y+speed);

else

myplane->SetPoint( myplane->GetPoint().x,rect.bottom-55);

}

if((GetKeyState(VK_LEFT) <0|| GetKeyState('A') < 0)&& is_Pause== 0)//左方向键

{

if( myplane->GetPoint().x <=rect.left &&rect.right>0)

myplane->SetPoint(0, myplane->GetPoint().y);

else

myplane->SetPoint(( myplane->GetPoint().x - speed) , myplane->GetPoint().y);

}

if((GetKeyState(VK_RIGHT) <0|| GetKeyState('D') < 0)&& is_Pause== 0)//右方向键

{

if( myplane->GetPoint().x +50>= rect.right)

myplane->SetPoint(rect.right-50, myplane->GetPoint().y);

else

myplane->SetPoint(myplane->GetPoint().x+speed , myplane->GetPoint().y);

}

if((GetKeyState(VK_SPACE)<0)&& is_Pause== 0)

{

//向子弹链表中添加子弹对象

CBomb *BombOne=new CBomb( myplane->GetPoint().x, myplane->GetPoint().y,1);

ListBomb.AddTail(BombOne);

CBomb *BombTwo=new CBomb( myplane->GetPoint().x+35, myplane->GetPoint().y,1);

ListBomb.AddTail(BombTwo);

PlaySound((LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC);

}

if(GetKeyState('P')<0)

{

is_Pause += 1;

if(is_Pause != 1)

is_Pause=0;

}

//=====随机添加敌机,敌机随机发射炸弹,此时敌机速度与数量和关卡有关//////////==== i

//判断产生的敌机是否出界,若已经出界,则删除该敌机

POSITION posEn=NULL,posEn_t=NULL;

posEn=ListEnemy.GetHeadPosition();

int motion = 1;

while(posEn!=NULL)

{

posEn_t=posEn;

CEnemy *enemy= (CEnemy *)ListEnemy.GetNext(posEn);

//判断敌机是否出界

if(enemy->GetPoint().xGetPoint().x>rect.right

||enemy->GetPoint().yGetPoint().y>rect.bottom)

{

ListEnemy.RemoveAt(posEn_t);

delete enemy;

}//if

else

{

enemy->Draw(&cdc,TRUE);

switch(nIDEvent)

{

case 3://设置定时器产生敌机炸弹

{

CBall * ball=new

CBall(enemy->GetPoint().x+17,enemy->GetPoint().y+30,enemy->GetMotion());

ListBall.AddTail(ball);

}

break;

}

}

}

//判断产生的//Boss敌机是否出界,若已经出界,则删除该boss敌机

POSITION bposEn=NULL,bposEn_t=NULL;

bposEn=ListBoss.GetHeadPosition();

while(bposEn!=NULL)

{

bposEn_t=bposEn;

CBoss *boss= (CBoss *)ListBoss.GetNext(bposEn);

//判断boss敌机是否出界

if(boss->GetPoint().xGetPoint().x>rect.right

||boss->GetPoint().yGetPoint().y>rect.bottom)

{

ListBoss.RemoveAt(bposEn_t);

delete boss;

}//if

else

{

boss->Draw(&cdc,TRUE);

switch(nIDEvent)

{

case 2://设置定时器产生敌机炸弹

{

CBall * ball=new

CBall(boss->GetPoint().x+17,boss->GetPoint().y+30,boss->GetMotion());

ListBall.AddTail(ball);

CBall * ball1=new

CBall(boss->GetPoint().x+77,boss->GetPoint().y+30,boss->GetMotion());

ListBall.AddTail(ball1);

}

break;

}

}

}

//判断产生的敌机炸弹是否出界,若已经出界,则删除该敌机炸弹

POSITION posball=NULL,posball_t=NULL;

posball= ListBall.GetHeadPosition();

while(posball!=NULL)

{

posball_t=posball;

ball= (CBall *) ListBall.GetNext(posball);

if( ball->GetPoint().xGetPoint().x>rect.right

|| ball->GetPoint().yGetPoint().y>rect.bottom) {

ListBall.RemoveAt(posball_t);

delete ball;

}

else

{

ball->Draw(&cdc,1);

}

}

}

//战机发射子弹

if( myplane!=NULL&& is_Pause== 0)

{

//声明战机子弹位置

POSITION posBomb=NULL,bombTemp=NULL;

posBomb= ListBomb.GetHeadPosition();

while(posBomb!=NULL)

{

bombTemp=posBomb;

bomb=(CBomb *) ListBomb.GetNext(posBomb);

if( bomb->GetPoint().xGetPoint().x>rect.right

|| bomb->GetPoint().yGetPoint().y>rect.bottom) {

//删除越界的子弹

ListBomb.RemoveAt(bombTemp);

delete bomb;

}

else

bomb->Draw(&cdc,TRUE);

}

}

//添加爆炸效果,战机子弹打中敌机

if( myplane!=NULL&& is_Pause== 0)

{

POSITION explosionPos;

explosionPos = ListExplosion.GetHeadPosition();

//检索爆炸链表,非空时在所在位置显示

while(explosionPos!=NULL)

{

explosion = (CExplosion *) ListExplosion.GetNext(explosionPos);

explosion->Draw(&cdc,TRUE);

}//while

//声明战机子弹位置,敌机位置

POSITION bombPos,bombTemp,enemyPos,enemyTemp;

for(bombPos= ListBomb.GetHeadPosition();(bombTemp=bombPos)!=NULL;)

{

bomb = (CBomb *) ListBomb.GetNext(bombPos);

//获得战机子弹的矩形区域

CRect bombRect = bomb->GetRect();

for(enemyPos= ListEnemy.GetHeadPosition();(enemyTemp=enemyPos)!=NULL;)

{

enemy = (CEnemy *) ListEnemy.GetNext(enemyPos);

//获得敌机的矩形区域

CRect enemyRect = enemy->GetRect();

//判断两个矩形区域是否有交接

CRect tempRect;

if(tempRect.IntersectRect(&bombRect,enemyRect))

{

//将爆炸对象添加到爆炸链表中

CExplosion *explosion=new

CExplosion(( enemy->GetPoint().x+17),( enemy->GetPoint().y+17));

ListExplosion.AddTail(explosion);

PlaySound((LPCTSTR)IDR_WAVE, AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC);

//爆炸后删除子弹

ListBomb.RemoveAt(bombTemp);

delete bomb;

//删除敌机

ListEnemy.RemoveAt(enemyTemp);

delete enemy;

score+=1;

break;

}

}

}

}

int s=2;

//战机打中boss敌机

if( myplane!=NULL&& is_Pause== 0)

{

POSITION explosionPos;

explosionPos = ListExplosion.GetHeadPosition();

//检索爆炸链表,非空时在所在位置显示

while(explosionPos!=NULL)

{

explosion = (CExplosion *) ListExplosion.GetNext(explosionPos);

explosion->Draw(&cdc,TRUE);

}//while

//声明战机子弹位置,敌机位置

POSITION bombPos,bombTemp,bossPos,bossTemp;

for(bombPos= ListBomb.GetHeadPosition();(bombTemp=bombPos)!=NULL;)

{

bomb = (CBomb *) ListBomb.GetNext(bombPos);

//获得战机子弹的矩形区域

CRect bombRect = bomb->GetRect();

for(bossPos= ListBoss.GetHeadPosition();(bossTemp=bossPos)!=NULL;)

{

Boss = (CBoss *) ListBoss.GetNext(bossPos);

//获得敌机的矩形区域

CRect bossRect = Boss->GetRect();

//判断两个矩形区域是否有交接

CRect tempRect;

if(tempRect.IntersectRect(&bombRect,bossRect))

{

//将爆炸对象添加到爆炸链表中

CExplosion *explosion=new

CExplosion(( Boss->GetPoint().x+17),( Boss->GetPoint().y+17));

//爆炸后删除子弹

ListBomb.RemoveAt(bombTemp);

delete bomb;

//删除敌机

s--;

if(s==0)

{

ListExplosion.AddTail(explosion);

PlaySound((LPCTSTR)IDR_WAVE, AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC);

ListBoss.RemoveAt(bossTemp);

delete Boss;

score+=10;

}

}

}

}

}

///==添加爆炸效果,敌机炸弹打中战机//

if( myplane != NULL&& is_Pause== 0)

{

//声明敌机炸弹位置坐标,战机位置myPlanePos

POSITION ballPos,ballTemp;

for(ballPos= ListBall.GetHeadPosition();(ballTemp=ballPos)!=NULL;)

{

ball = (CBall *) ListBall.GetNext(ballPos);

//获得敌机炸弹的矩形区域

CRect ballRect = ball->GetRect();

//获得战机的矩形区域

CRect myPlaneRect = myplane->GetRect();

//判断两个矩形区域是否有交接

CRect tempRect;

//如果敌机炸弹打中战机,则使战机爆炸

if(tempRect.IntersectRect(&ballRect,myPlaneRect))

{

//将爆炸对象加入爆炸链表中

CExplosion *explosion = new CExplosion(( myplane->GetPoint().x + 25) , ( myplane->GetPoint().y + 30));

PlaySound((LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(), SND_RESOURCE

|SND_ASYNC);

ListExplosion.AddTail(explosion);

//战机生命值减

life--;

ListBall.RemoveAt(ballTemp);

delete ball;

if(life == 0)

{

//删除战机对象

delete myplane;

myplane=NULL;

}//if

break;

}//if

}//for

}//if

///敌机与战机相撞/////////

if(myplane != NULL&& is_Pause== 0)

{

POSITION enemyPos,enemyTemp;

for(enemyPos= ListEnemy.GetHeadPosition();(enemyTemp=enemyPos)!=NULL;)

{

enemy =(CEnemy *) ListEnemy.GetNext(enemyPos);

//获得敌机的矩形区域

CRect enemyRect = enemy->GetRect();

//获得战机的矩形区域

CRect myPlaneRect = myplane->GetRect();

//判断两个矩形区域是否有交接

CRect tempRect;

if(tempRect.IntersectRect(&enemyRect,myPlaneRect))

{

CExplosion *explosion = new CExplosion( enemy->GetPoint().x+18 , enemy->GetPoint().y + 18);

PlaySound((LPCTSTR)IDR_WAVE, AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC);

ListExplosion.AddTail(explosion);

//战机生命值减一

life--;

//删除敌机

ListEnemy.RemoveAt(enemyTemp);

delete enemy;

if(life == 0)

{

//删除战机对象

delete myplane;

myplane=NULL;

}//if

break;

}//if

}//for

}//if

//boss和敌机相撞

if(myplane != NULL&& is_Pause== 0)

{

POSITION bossPos,bossTemp;

for(bossPos= ListBoss.GetHeadPosition();(bossTemp=bossPos)!=NULL;)

{

Boss =(CBoss *) ListBoss.GetNext(bossPos);

//获得敌机的矩形区域

CRect bossRect = Boss->GetRect();

//获得战机的矩形区域

CRect myPlaneRect = myplane->GetRect();

//判断两个矩形区域是否有交接

CRect tempRect;

if(tempRect.IntersectRect(&bossRect,myPlaneRect))

{

CExplosion *explosion = new CExplosion( Boss->GetPoint().x+18 , Boss->GetPoint().y + 18);

PlaySound((LPCTSTR)IDR_WAVE, AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC);

ListExplosion.AddTail(explosion);

//战机生命值减一

life--;

//删除敌机

ListBoss.RemoveAt(bossTemp);

delete Boss;

life=life-4;

if(life <=0)

{

//删除战机对象

delete myplane;

myplane=NULL;

}//if

break;

}//if

}//for

}//if

////==()添加爆炸效果,战机子弹打中敌机炸弹////////=

if(myplane != NULL&& is_Pause== 0)

{

//声明战机子弹位置,敌机位置

POSITION bombPos,bombTemp,ballPos,ballTemp;

for(bombPos= ListBomb.GetHeadPosition();(bombTemp=bombPos)!=NULL;)

{

bomb = (CBomb *) ListBomb.GetNext(bombPos);

//获得战机子弹的矩形区域

CRect bombRect = bomb->GetRect();

for(ballPos= ListBall.GetHeadPosition();(ballTemp=ballPos)!=NULL;)

{

ball = (CBall *) ListBall.GetNext(ballPos);

//获得敌机炸弹的矩形区域

CRect ballRect = ball->GetRect();

//判断两个矩形区域是否有交接

CRect tempRect;

if(tempRect.IntersectRect(&bombRect,ballRect))

{

//将爆炸对象添加到爆炸链表中

CExplosion *explosion=new

CExplosion(( ball->GetPoint().x+17),( ball->GetPoint().y+17));

ListExplosion.AddTail(explosion);

PlaySound((LPCTSTR)IDR_WAVE, AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC);

//爆炸后删除战机子弹

ListBomb.RemoveAt(bombTemp);

delete bomb;

//删除敌机炸弹

ListBall.RemoveAt(ballTemp);

delete ball;

score++;

break;

}//if

}//for

}//for

}//if

/////游戏界面输出该游戏当前信息/////////

if(myplane != NULL)

{

HFONT font;

CRect rect;

GetClientRect(&rect);

font=CreateFont(20,10,0,0,0,0,0,0,0,0,0,0,0,0);

cdc.SelectObject(font);

CString str;

cdc.SetTextColor(RGB(255,0,0));

str.Format(_T("关卡:%d"),Num);

cdc.TextOutW(rect.left,0,str);

str.Format(_T("得分:%d"),score);

cdc.TextOutW(rect.left+40,40,str);

str.Format(_T("生命:%d"),life);

cdc.TextOutW(rect.left+40,20,str);

}//if

if(myplane !=NULL && life >0)

{

if(score > 10*count_Life*Num)

{

life++;//生命值加

count_Life++;//已增加生命值加

}

}

//////==进入下一关界面///////=====

/*void OnDoSomething( UINT nID )

{

switch(nID)

{

case ID_ONE:

is_Pass=1;

break;

case ID_TWO:

is_Pass=2;

break;

case ID_THREE:

is_Pass=3;

break;`

}

}*/

if(myplane!=NULL && score >= 80 * Num&& is_Pause== 0) {

//过关的标志变量

myplane=NULL;

delete myplane;

is_Pass = 1;

}

if(is_Pass == 1)

{

if(Num==3)

{

KillTimer(1);

KillTimer(2);

KillTimer(3);

if(AfxMessageBox(L"哇,恭喜你已通关!是否重新开始?",MB_YESNO)==6)

{

//清空敌机链表

ListEnemy.RemoveAll();

//清空战机链表

ListMe.RemoveAll();

//清空战机子弹链表

ListBomb.RemoveAll();

//清空敌机炸弹链表

ListBall.RemoveAll();

//清空爆炸链表

ListExplosion.RemoveAll();

//添加新的战机对象

ListBoss.RemoveAll();

myplane = new CMyPlane;

score=0;

count_Life = 1;

life = 10;

Num = 1;

is_Pass = 0;

SetTimer(1,30,NULL);

SetTimer(2,300,NULL);

SetTimer(3,500,NULL);

}//if

else

exit(1);

}//if

else

{

KillTimer(1);

KillTimer(2);

KillTimer(3);

if(AfxMessageBox(L"恭喜你成功过关!是否进入下一关?",MB_YESNO)==6)

{

//清空敌机链表

ListEnemy.RemoveAll();

//清空战机链表

ListMe.RemoveAll();

//清空战机子弹链表

ListBomb.RemoveAll();

//清空敌机炸弹链表

ListBall.RemoveAll();

//清空爆炸链表

ListExplosion.RemoveAll();

//添加新的战机对象

ListBoss.RemoveAll();

myplane = new CMyPlane;

score=0;

life = 10;

Num++;

count_Life = 1;

is_Pass = 0;

SetTimer(1,30,NULL);

SetTimer(2,300,NULL);

SetTimer(3,500,NULL);

}//if

else

exit(1);

}//else

}//if

/////==结束游戏界面/////////

if(myplane==NULL && is_Pass == 0&& is_Pause== 0)

{

KillTimer(1);

KillTimer(2);

KillTimer(3);

if(AfxMessageBox(L"GAME OVER!COME ON !重新开始?",MB_YESNO)==6)

{

//清空敌机链表

ListEnemy.RemoveAll();

//清空战机链表

ListMe.RemoveAll();

//清空战机子弹链表

ListBomb.RemoveAll();

//清空敌机炸弹链表

ListBall.RemoveAll();

//清空爆炸链表

飞机大战策划案

飞机大战策划案 目录 飞机大战策划案 (1) 一、概述 (2) 二、UI界面 (2) 2.1、开始界面 (2) 2.2、游戏关卡界面 (3) 2.3、游戏正式界面 (3) 2.4、排行界面 (4) 三、游戏正式开始规则 (5) 三、操作规则 (5) 四、飞机属性 (6) 五、敌机属性 (7) 5.1、敌机分类 (7) 5.2、敌机攻击模式 (7) 5.3、敌机出现及移动轨迹 (7) 六、积分获取规则 (8) 七、死亡复活规则 (8) 八、游戏正式开始规则 ..................................................................... 错误!未定义书签。 九、进入、暂停及结算界面 (9) 9.1、飞机进入场景模式: (9) 9.2、游戏暂停模式: (9) 8.2、结算界面 (9) 十、关卡详细设计 (10) 第一关设计: (11)

一、概述 飞机大战为一款竖版战机游戏,本游戏同时可支持多名玩家进行双人协作的飞机游戏,两名玩家结成一组共同开启一个副本场景进行游戏。最多支持100个副本。游戏开始后界面始终向下卷动。 二、UI界面 2.1、开始界面 说明: 1)该界面有一张底图 2)界面上方为游戏宣传图片 3)界面下方有三个按钮,分别为“开始游戏”、“排行榜”和“离开游戏”,注意每个按钮都有“普通”、“高亮”和、“点击”三种状态。 4)点击排行榜后,会出现排行界面。界面中按照分数高度的顺序排列所

有参加游戏的玩家。 5)点击离开游戏则关闭游戏。 6)点击开始游戏后进入游戏关卡界面。 2.2、游戏关卡界面 该界面出现时,关闭“开始界面”,界面由一张底图和11个按钮组成。 1-10个按钮为关卡选择按钮,第11个按钮为返回按钮,点击返回按钮后,返回开始界面。返回按钮有“普通”、“高亮”和、“点击”三种状态。 关卡按钮有“普通”、“高亮”、“点击”和“置灰”四种状态。初始状态为第一关按钮为普通可点击状态、其余关卡置灰不可点击。当第一关通关后,第二关按钮为普通可点击状态,以此类推。 点击“可点击的关卡按钮”后,进入游戏正式界面。 2.3、游戏正式界面 游戏界面大小为:600*800,界面背景不断向下卷动。

飞机大战游戏设计与实现

程序设计综合实践报告 信息科学与工程学院 2015年12月20日

目录 1. 概述 (1) 1.1 关卡设置 (1) 1.2 敌机设置 (1) 1.3 战机设置 (1) 1.4 游戏设置 (1) 2. 相关技术 (2) 2.1 Windows定时器技术 (2) 2.2 双缓冲技术 (2) 2.3 获取矩形区域 (2) 3. 总体设计与详细设计 (2) 3.1 系统模块划分 (2) 3.2 主要功能模块 (3) 4. 编码实现 (4) 4.1 初始准备 (4) 4.2 战机对象 (6) 4.3 敌机对象 (7) 4.4 道具对象 (9) 4.5 主要内容 (10) 4.6 窗口显示信息 (17) 5. 实训中遇到的主要问题及解决方法 (20) 5.1 产生中断及解决方案 (20)

5.2 图片闪烁问题及解决方案 (20) 6. 实训体会 (20)

1. 概述 项目:飞机大战 主要功能有以下几点: 1.1 关卡设置 本次飞机大战游戏中共设置了四个关卡,第一关的难度设置较低,仅有敌机对其进行攻击;第二关在原有的基础上增加一些补血的小道具,当积分达到一定的时候便会出现该道具,并且敌机出现的频率也比第一关高;第三关在第二关的基础上新出现了小boss,并增加了其他的道具;第四关在第三关的基础上再新出现大boss,当积分达到要求以及大boss被消灭后通关成功。 1.2 敌机设置 小敌机随机出现,炮弹也随机发射,当小敌机与战机相撞或被战机的子弹击中时,小敌机消失。当达到一定积分时,小boss出现并随机发射出与小敌机一样的炮弹,但是炮弹分三个方向发射出。当小boss被战机的子弹击中或与战机相撞时失去5滴血。当到达四关并且积分足够多时出现大boss,同小boss一样,当大boss与战机相撞或被战机子弹击中时失去1滴血。除此之外,小boss和大boss上方都有血条显示,当血条消失时意味着生命消失,大boss和小boss消失。小boss会在屏幕上随机出现和走动出了屏幕后会在屏幕的任意地方再随机出现,直至血量为0消失。大boss则在屏幕中随机走动不出屏幕,直至血量为0消失。 1.3 战机设置 战机初始有五条生命,每条命的血量为50,所获得的积分以及其生命值、血条都在窗口的左上角显示。在第一、二关时,按空格键战机会出现两个向上发射的炮弹,到第三、四关的时候,按空格键战机会发射三个不同方向的炮弹。战机吃到药瓶道具时血量会增加20,但不可以超过50;吃到闪电道具时,便可放大招,放大招的次数为15。当战机被敌方的炮弹击中或与敌方相撞时,血量减少,减少为0时生命值减1,直至生命值为0。 1.4 游戏设置 进入游戏时,会有背景音乐,窗口左上角显示战机所得积分及其生命值。根据积分情况进入不同的关卡。游戏通关时屏幕清空,并显示通关成功,按Y可重新开始游戏。当战机的血量以及生命值为0时,游戏失败,屏幕清空并显示游戏结束,按Y即可重新开始游戏。

飞机大战实训报告

目录 1. 概述.................................................. 1. 概述 这次实训,目的以VS 为环境,利用MFC,使用C++语言编写一个简单的飞机大战游戏。

实现的主要功能: 1.有开始游戏界面,上下左右键控制飞机自由移动,空格键发射炮弹。 2.设有关卡,每打完一个boss就会过关,每过一关战机炮弹会升级,敌机随机发射子 弹数量增加。 3.战机起始十条命,可以通过过关和吃到道具增加血量。 4.战机子弹打中敌机,敌机就会爆炸,boss血量随关卡升高而增多,打败敌机或者boss 会有分数加成。 5.设有无敌模式和普通模式,无敌模式大招无限,生命无限,战机导弹直接升至最高 等级。 2. 相关技术 碰撞检测 用CRect类的GetRect()函数可以获得当前对象的矩形区域, IntersectRect()并用此函数判断二者是否碰撞。 CObList链表 这个程序使用CObList链表来存储各效果。CobList类似于一个双向链表,POSITION 类型的变量为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。我们可以通过获得某元素的POSITION来访问它。 本程序中主要用到的函数有:

GetHeadPosition():获取链表首元素的POSITION; AddTail():将新的元素添加到链表最后; GetNext( POSITION& rPosition ):使rPosition指向下一个元素。 设置定时器 SetTimer()函数来设置定时器。 背景滚动 为了让游戏场景更加逼真,游戏节奏更加合理,可以通过让背景滚动来提高游戏的场景效应,实现这一技术时,可以将一张背景图片复制为2张,从上到下连续的拼接在一起,使其不会出现图片的卡顿和瞬移现象。 内存释放技术 这个程序中有大量的地方需要使用内存,如果不及时删除会出现闪图等情况,容易导致程序崩溃,要及时释放内存资源。 3. 总体设计与详细设计 系统模块划分

飞机大战游戏修改后文档

飞机大战 制作者:王迪锋、陶晶楠、杨可鑫、佟春月 制作时间:2016/3

目录: 1、游戏概况------------------------3 2、游戏安装说明--------------------4 3、游戏玩法的基本介绍--------------5 4、游戏设计的基本框架--------------8 5、游戏设计中关键难点的解决-------11 6、关于学习程序设计的心得---------12

一、游戏概况 1、编写目的 编写此需求说明书的目的,是为了能让组中的成员更好的了解现实市场需求,从而开发出更加符合用户体验的软件。此说明书对Android飞机大战的总体及用户界面及运行环境等做出了详细的说明。它作为对该系统概要设计的依据,帮助开发人员了解本系统的框架思想及实现功能,并验证核实该产品能否满足用户要求的标准,便于技术文档和需求变化的管理。同时也是用户与开发人员双方对软件需求取得共同理解的基础。 软件开发小组的每一位成员都应详细阅读此说明书,明确开发目的,按要求完成软件的开发,经使用方认可的需求说明将作为产品特征评价、仲裁的重要考。 2、项目背景 ★软件名称:飞机大战 ★软件创意:开发出一款娱乐的安卓游戏应用程序 ★面向用户:所有喜欢娱乐的用户 ★项目组成员:王狄峰,佟春月,杨可鑫,陶晶楠 3、目标 为了开发出一款娱乐游戏软件。本款软件的目标定位是所有喜爱娱乐的用户。

4、开发环境 ★硬件环境 CPU:1.2GHz以上 内存:512MB以上 硬盘:40G以上 网络:10M/100M网卡,保证通畅的网络连接 其他:显示器、键盘、鼠标 ★运行平台: 手机/模拟器:android4.03以上 二、游戏安装说明 安装飞机大战.apk 本软件设计完成后经过测试没有发现问题,生成的应用程序名称为plane.apk,将此文件按照手机安装其他软件的步骤安装到是android操作系统的手机上,运行该软件即可

优质实用文档精选——飞机大战需求分析报告

飞机大战 需求分析报告 开发小组:STARS 组长: 组员: 2016.05.24

目录 一、概述 (2) 1.1 项目内容 (2) 1.2 项目开发 (2) 1.3 项目组员 (2) 1.4 组员分工 (3) 1.5 项目进度计划表 (3) 1.6 验收标准 (3) 1.7 项目关键问题 (3) 二、项目产品 (4) 2.1 产品中的角色: (4) 2.2 产品功能需求: (4) 2.2.1 游戏具体功能需求 (4) 2.2.2 用户功能需求 (4) 2.2.3 美工音效需求 (5) 2.2.4 游戏性能需求 (5) 三、游戏流程 (5) 3.0 游戏操作 (6) 3.1 游戏流程 (5) 3.2 游戏流程图 (6)

一、概述 1.1 项目内容 本项目产品名称为“飞机大战”,以Java语言开发,界面简洁流畅,游戏方式简单,玩家易于上手。 1.2 项目开发 以java语言进行项目的编程实现,项目开发环境如下: 开发工具:Eclipse 开发语言:Java 1.3 项目组员

1.4 组员分工 1.5 项目进度计划表 1.6 验收标准 1)游戏可正常运行; 2)实现项目需求说明书的大部分需求; 3)游戏界面友好,易于交互; 4)项目具有较高的安全性和稳定性; 1.7 项目关键问题 1)角色之间的碰撞探测要比较准确; 2)游戏要拥有一定难度,不可过于简单,但又能够吸引用户,不可过于太难;3)游戏界面设计要有自己的风格,以达到吸引用户的效果; 4)游戏的交互性要足够好,使得玩家易于上手; 5)测试的次数要充足,保证游戏的正常运行和安全性。

飞机大战游戏设计与实现

程序设计综合实践报告 姓名学号 班级项目名称 飞机大战游戏设计与实现 实习地点计算机实验室 实习时间 2015-12-9至2015-12 -19 实习成绩指导教师签字 信息科学与工程学院 2015年12月20日

目录 1. 概述?错误!未定义书签。 1.1 关卡设置?错误!未定义书签。 1.2 敌机设置.......................... 错误!未定义书签。 1.3 战机设置......................... 错误!未定义书签。 1.4 游戏设置.......................... 错误!未定义书签。2. 相关技术............................ 错误!未定义书签。 2.1 Windows定时器技术 (2) 2.2 双缓冲技术?错误!未定义书签。 2.3 获取矩形区域?2 3. 总体设计与详细设计?错误!未定义书签。 3.1 系统模块划分..................... 错误!未定义书签。 3.2 主要功能模块...................... 错误!未定义书签。 4. 编码实现?4 4.1 初始准备?4 4.2 战机对象?6 4.3敌机对象......................... 错误!未定义书签。 4.4 道具对象 (9) 4.5 主要内容?01 4.6 窗口显示信息...................... 错误!未定义书签。 5. 实训中遇到的主要问题及解决方法?20 5.1 产生中断及解决方案?02

5.2 图片闪烁问题及解决方案?20 6. 实训体会............................. 错误!未定义书签。

飞机大战游戏 产品需求规格说明书

[键入文字] 飞机大战游戏 产品需求规格说明书 1

目录 0. 文档介绍 (1) 0.1文档目的 (1) 0.2文档范围 (1) 0.3读者对象 (1) 0.4参考文档 (1) 0.5术语与缩写解释 (1) 1. 产品介绍 (2) 2. 产品面向的用户群体 (2) 3. 产品应当遵循的标准或规范 (2) 4. 产品范围 (2) 5. 产品中的角色 (2) 6. 产品的功能性需求 (2) 6.0功能性需求分类 (2) 6.1游戏基本规则 (3) 6.1.1 飞机对战规则 (3) 6.2游戏特效 (3) 6.2.1 界面背景特效 (3) 6.2.2游戏对象特效 (4) 6.2.3 声音特效 (4) 6.2.4 文字提示 (4) 7. 产品的非功能性需求 (4) 7.1用户界面需求 (4) 7.2软硬件环境需求 (5) 7.3产品质量需求 (5) 附录B:需求确认 (6)

0. 文档介绍 0.1 文档目的 让系统设计人员了解飞机大战游戏的开发要求。 0.2 文档范围 本文主要包含飞机大战游戏的需求。包括游戏规则及界面特效的要求。 0.3 读者对象 系统设计人员 0.4 参考文档 《Windows游戏编程大师技巧》 0.5 术语与缩写解释

1. 产品介绍 飞机大战游戏作为PC中一款桌面游戏,界面简洁流畅、游戏方式简单,玩起来易于上手。 2. 产品面向的用户群体 面向休闲游戏的玩家,例如家庭、办公室人员等,使用人群广泛。 3. 产品应当遵循的标准或规范 本产品遵循Microsoft编程规范。 4. 产品范围 仅针对使用Microsoft Windows XP及以上版本操作系统,不必考虑低级版本的兼任性。 5. 产品中的角色 6. 产品的功能性需求 6.0 功能性需求分类

《飞机大战游戏》需求说明书

系统设计概要说明书V 1.0飞机大战游戏

1.1背景 拟开发一款激战游戏系统,该系统要实现的功能包括。 玩家管理:绘制玩家 敌机管理:绘制敌机、敌机移动 按键管理:操作控制 地图管理:绘制地图、地图移动 子弹管理:绘制子弹、子弹移动 道具管理:绘制道具、道具功能处理、道具移动 爆炸管理:绘制爆炸、移除爆炸 BOSS管理:绘制BOSS、BOSS移动 业务逻辑处理:产生多个敌机、多个子弹、碰撞、 1.2数据分析 分析上面的需求,我们可以得出,系统中应该有如下数据表。 地图信息(BackGround)字段及说明如表5-1。 表5-1 BackGround的字段及说明 玩家信息表(Plane)字段及说明表5-2。 表5-2 Plane的字段及说明 敌人信息表(EnPlane)字段及说明5-3。 表5-3 EnPlane的字段及说明

子弹信息表(Bullet)字段及说明表5-4。 表5-4 Bullet的字段及说明 爆炸信息表(Explode)字段及说明表5-5。 表5-5 Explode的字段及说明 道具信息表(Tools)字段及说明表5-6。 表5-6 Tools的字段及说明 BOSS信息表(BOSS)字段及说明表5-7。 表5-7 BOSS的字段及说明 1.3需求描述 在上面我们分析出了激战游戏所需要的字段,以及模拟的系统中的相关功能。在本次项目开发中我们将会为其实现一个具有一定功能和友好用户界面的飞机大战游戏系统。该

系统使用流程如下。 游戏名:飞机大战游戏。 开始游戏:按Enter键进入游戏。 基本业务:实现玩家移动、发射子弹、敌机移动、敌机发射子弹、碰撞爆炸、获取道具、获取道具奖励、通过玩家击落敌机计算积分,击杀BOSS结束游戏。 玩家击落敌机每次增加10分,积分达到100分,出现Boss。 1.4功能分析 1.4.1背景业务 1、绘制背景 通过GDI+绘制背景,背景可随机产生,每次玩家进入游戏,都可随机产生背景 2、背景移动 背景从上往下移动,当背景的上边框超过游戏界面下边框时应自动补图。 1.4.2玩家实现 1、玩家移动 玩家通过键盘wasd移动,j发射子弹 提示:玩家飞行不可超出游戏界面 1.4.3敌机实现 1、创建敌机 通过确定敌机ep_x坐标随机产生敌机 2、敌机移动 改变敌机ep_y坐标从上往下飞行,注意:当飞机飞出游戏边界需要移除敌机

飞机大战文档

毕业实训报告 课题名称: Unity 游戏开发 专业:移动开发 班级: Rz 移动 152 学号: 201560310213 学生姓名:张博 指导教师:段菲菲 年月日

中原工学院 毕业实训任务书

摘要 摘要游戏,目前已经是最大众化的娱乐之一,而其中的3D游戏也是技术含量较高的项目之一。Unity3D是一个3D/2D游戏开发工具和游戏引擎套件,其中包括了图形、音频、物理、网络等多方面的引擎支持,并且有一个非常强大的编辑器来整合这一切,非常适合于游戏开发。 本文主要是以Unity5.3.8为开发环境,设计并开发一款单机版的三维游戏——直升机大战,旨在介绍直升机战斗游戏的实现方法,并逐步介绍使用Unity3D开发3D游戏的方法和技巧。通过这次游戏制作,使我体会到了,制作一个游戏所需要做的工作,包括前期的游戏策划,素材的制作,到后期的游戏的设计,代码实现等,最终形成一个完整的3D游戏,并通过Unity3D选择平台生成可执行文件。但本次设计的直升机战斗游戏所做工作还不够完善,开始场景中菜单比较简单,游戏中武器只有一种,关卡也只有一个,这些都需要以后进一步设计.

第1章项目分析 1.1 Unity 及其组成的介绍 本书主要讲解的是,如何使用 Unity 开发 2D 游戏。但在开始讲解之前,最好先熟悉一下Unity 这个工具。本章会首先介绍 Unity 的下载和安装,然后会介绍 Unity 界面的各组成部分,这些知识会在本书后面的章节频繁使用,所以不要掉以轻心。 1.2 Unity 概述 Unity 现如今已是非常的流行,因此在开始学习 2D 游戏开发之前,本节就来简要说明下Unity,及其下载和安装方法。 1.Unity 简介 Unity 是一款跨平台的专业游戏引擎,可以使用它轻松的开发各种 2D 和 3D 游戏,然后部署到各种游戏平台上。当然也包括这些主流游戏平台: Windows、 iOS、 Android、 Xbox 360、 PS3。

飞机大战--毕业论文--初稿

毕业设计(论文) 题目:基于安卓平台的飞机大战游戏 学院:计算机科学学院 专业班级:计算机科学与技术10级2班指导教师:黄国兵职称:高级工程师学生:兵 学号:41009010216

摘要 自从第一台计算机研发以来,计算机行业得到了迅速的发展,成就了很多优秀的企业,例如国外的IBM,微软,GOOGLE,ARM,苹果等,国的腾讯,阿里巴巴,百度等,而引领计算机行业的主要因素除了硬件的支撑外,就数操作系统了,而操作系统从Dos,UNIX,LINUX Windows等PC端正在逐渐向移动端转变如:从Linux 到Android;从Unix到IOS;从Windows到Windows phone,主要还是因为移动端的便携性,轻巧性深受人们的喜爱,就在这样的移动互联网浪潮中,Android系统更是高达移动端操作系统80%的占有率,真可谓前景无限,而在Android平台的应用中游戏业务又占着最大的比例,所以本次选题为基于Android的飞机大战游戏,其主要目的研究移动互联网的发展趋势,对其未来的发展有深刻清晰的认识。 本论文主要阐述以面向对象的程序开发语言Java及Eclipse为开发工具,而基于智能手机Android系统之上的飞机大战游戏。首先简要介绍课题的研究背景、目的及意义,Android的发展历程、当前国外的发展现状。然后介绍了Android 平台开发环境及环境搭建,最后讲述了基于Android飞机大战游戏功能的实现。其功能模块如下:提供敌机的类模块,提供子弹的类模块,主界面模块,天空背景模块,检测子弹与敌机碰撞模块,检测,敌机与我拥有的战机碰撞木块等,除此以外还为用户提供更加人性化的设计和方便人员的操作流程。由于Android 逐渐成为智能手机技术的主导,相信其基于Android的飞机大战游戏将会受到更大的欢迎。 关键字:安卓,游戏,飞行射击,飞机

05-12《克隆飞机大战》教学设计

第12课克隆飞机大战 【教材分析】 本节课是Scratch模块的第12课内容,是学习Scratch基础部分的延续,认识和理解“克隆”控件,为后面独立设计程序打下基础。 【学情分析】 在本节课之前,学生已经掌握了使用条件语句、循环语句,侦测、外观、动作等模块,还未涉及“克隆”控件,更不知如何使用。 【教学目标与要求】 1.认识与理解“克隆”控件。 2.掌握利用“克隆”控件控制角色变化方法。 3.通过使用“克隆”控件,掌握多个角色相同动作的实现方法。 4.通过使用“克隆”控件,感受编程的乐趣。 【教学重点与难点】 重点:认识与理解“克隆”控件。 难点:利用“克隆”控件控制角色变化。 【教学方法与手段】 任务驱动法。 【课时安排】 安排1课时。 【教学准备】 多媒体网络教室、《飞机大战》课件及学件。 【教学过程】

任务一:绘制飞机角色 师:在这个游戏中共2个角色,分别是“火炮” 和“飞机”。下面我们就根据教材提示绘制游戏角色。 1.绘制飞机角色 (1)单击,打开“绘图编辑器”,使用椭圆工具画出飞机造型。 师:除了使用椭圆工具,也可通过画笔、直线、矩形 等工具画出飞机造型。 (2)单击“绘制新造型”,画出飞机爆炸后的 2.绘制火炮角色 (1)画出火炮,将中心点设置在火炮下方。 新知传授 造型 师:巴=吒可以放大或还原图像,便于观察或修改 细节部分。

中心点是角色旋转的位置,角色将以此点为中心进行旋转。 (2)复制造型1,调整火力位置,模拟开火的样式,注意中心点不移动。 师:通过快速点击造型1、造型2看到造型切换的效果。 任务二:编写程序 师:角色制作完毕后,我们该如何设计角色的程序呢先来回忆一下,两个角色都是如何运转的 生(预设):火炮间断发射,用鼠标左右键控制炮管方向。飞机从顶部随机位置往下飞,被炮击中爆炸并消失或飞到舞台底部消失 1.火炮开火 (1)模拟火炮开火。

飞机大战总结

江西理工大学应用科学学院 个人实习总结 实习类型教学实习 _ 实习单位智游教育 _ 实习题目飞机大战 _ 指导教师看看 _ 所在院系信息工程系 _ 班级电子信息122班 _ 姓名看看 _ 学号 12345678988 _

一、实习时间和地点 时间:2015.06.25-2014.07.05 地点:1栋1503 二、实习的内容 1、介绍 本次实习制作的飞机大战游戏是在VMware Workstation 10软件的虚拟机ios环境下制作的一款桌面游戏,界面简洁流畅、游戏方式简单。 2、流程图

3、功能概述 ①实现闪屏。游戏运行前先显示一张图片,图片显示一段时间然后消失,接着游戏开始启动。 ②实现游戏背景。游戏运行时背景不断下落。 ③实现敌机。敌机随机产生,数量不定,以随机的速度从主屏幕上方下落,当子弹击中敌机,敌机爆炸消失。 ④实现主机。主机只有一架,由鼠标控制移动,移动过程中鼠标击中点始终主机的中心点重合。 ⑤实现子弹。子弹由主机发出,数量不定,连续产生,若子弹飞出主屏幕则自动消失,若子弹击中敌机子弹消失。 4、变量声明 ①背景变量:bgImgv 和bgImgv1 UIImageView * bgImgv ; UIImageView * bgImgv1 ; bgImgv 和bgImgv1是两张背景图片,利用两张图片的交替变化实现背景图片不断下落。 ②敌机变量:djArray 、dj 、count 、vx 、vy NSMutableArray * djArray ; DjImageView * dj = [[DjImageView alloc] init] ; Static int count; Float vx ; float vy ; djArray是储存敌机的数组;dj是敌机这个对象;count是计数变量用来生成敌机;vx是敌机的横向速度,vy是敌机的纵向速度。 ③主机变量:fj FXQImageView * fj ; fj是主机这个对象。 ④子弹变量:zdArray 、count 、zd 、 NSMutableArray * zdArray ;

飞机大战 java 源代码,DOC

packagecom; import import import feijiImage= .getResourceAsStream("images/feiji.png")); }catch(IOExceptione){ e.printStackTrace(); }

} publicvoiddraw(Graphicsg){ // 画飞机图片 g.drawImage(feijiImage,x,y,null); // 飞机移动 publicvoidmove(){ if(isUP&&!isDown&&!isLeft&&!isRight){ // 上 y=y-5; }elseif(!isUP&&isDown&&!isLeft&&!isRight){

// 下 y=y+5; }elseif(!isUP&&!isDown&&isLeft&&!isRight){ // 左 x=x-5; // 右上 x=x+5; y=y-5; }elseif(!isUP&&isDown&&!isLeft&&isRight){ // 右下

x=x+5; y=y+5; } } booleanisUP=false; nt.VK_A){ isLeft=true; }elseif(keyCode==KeyEvent.VK_UP||keyCode==KeyEvent .VK_W){

isUP=true; }elseif(keyCode==KeyEvent.VK_DOWN||keyCode==KeyE vent.VK_S){ isDown=true; isLeft=false; }elseif(keyCode==KeyEvent.VK_UP||keyCode==KeyEvent .VK_W){ isUP=false;

飞机大战实训报告

实训报告 飞机大战游戏设计与开发 姓名 专业名称:信息与计算科学 班级:信息一班 学号:201101051504 信息科学与工程学院 二零一三年十二月

目录 1. 概述 (3) 2. 相关技术 (3) 2.1关于碰撞检测的相关函数 (3) 2.2 CObList链表 (3) 2.3 设置定时器、销毁定时器 (3) 3. 总体设计与详细设计 (3) 3.1 系统模块划分 (3) 3.2 主要功能模块 (4) 3.2.1规则子系统 (4) 3.2.2 游戏对象子系统 (5) 4. 编码实现 (6) 5. 实训中遇到的主要问题及解决方法 (16) 6. 实训体会 (16)

1. 概述 飞机大战游戏是在Microsoft Visual Studio编程软件的MFC环境下制作的一款桌面游戏,界面简洁流畅、游戏方式简单。 游戏主要实现的功能和规则如下: (1)利用键盘中的上下左右键控制我方战机,空格键发射子弹。战机初始有2条生命,每条生命100血。 (2)屏幕上方随机产生敌机,战机产生的数量和当前玩家的等级有关,等级越高,产生的敌机越多,游戏难度越大。而且敌机产生的位置和速度是不确定的。只有当我机位于敌机下方时,敌机才会产生子弹,默认情况下是不发射任何子弹的。 (3)战机子弹打中敌机,敌机就会爆炸,同时玩家分数会增加10分,每得1000分过一关,共有10关。 2. 相关技术 在设计该游戏时,用到许多技术,这里介绍几个相对重要的技术。 2.1关于碰撞检测的相关函数 用CRect类的GetRect()函数可以获得当前对象的矩形区域,IntersectRect()并用此函数判断战机与敌机,子弹与战机,我方导弹与敌机,战机与物品是否相撞。 2.2CObList链表 在本程序中使用了CObList链表来分别存储敌机,炸弹,导弹,爆炸效果。CobList类似于一个双向链表,POSITION类型的变量为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。我们可以通过获得某元素的POSITION来访问它。 本程序中主要用到的函数有: GetHeadPosition()——获取链表首元素的POSITION; AddTail()——向链表尾部添加新的元素; GetNext( POSITION& rPosition )——返回当前rPosition指向的元素,并使rPosition指向下一个元素。 2.3 设置定时器、销毁定时器 SetTimer()函数来设置定时器,控制每隔多少毫秒执行一次什么任务。用KillTime()函数来销毁定时器。 3. 总体设计与详细设计 3.1 系统模块划分 有两个主要的部分组成,分别是规则子系统、游戏对象子系统。 系统的总体结构图如下:

飞机大战游戏开发文档(Android版)

飞机大战游戏开发文档(Android版)

飞机大战游戏 开发文档 (Android版) 课程名称:飞机大战游戏 课程类型:Android游戏编程 姓名:苏均灿 学号:1313420132 2016年1月3日 目录 1引言 (4) 1.1介绍 (4) 1.2术语及缩略词 (4) 1.3参考资料 (5) 1.4编写目的 (5) 1.5背景 (5) 2总体设计 (5) 2.1总体技术框架 (5) 2.2需求与设计对应表 (5) 3功能设计 (5) 3.1欢迎界面 (5)

3.2开始界面 (6) 4接口设计 (6) 5部署与组件设计 (6) 5.1部署模型 (6) 5.2欢迎界面 (7) 5.3主界面 (7) 6 编码、单元测试 (7) 7 综合测试 (7) 8 软件使用培训以及后期维护 (7) 9 使用说明 (7) 需求分析 一、问题定义 本软件是为了用户智能手机android而开发的一套星空飞机大战游戏软件。具有敌人出现,放子弹,boss等功能 二、可行性研究 社会可行性分析:Android飞速发展,为了满足人们对生活娱乐的追求,Android飞行游戏层出不穷,然而市面上大多是飞行游戏软件都太难操作,或者内容枯燥无味,不能给用户以更好体验。故提出开放一套更加人性化的手机飞行游戏。 技术可行性分析:以现阶段android技术发展水平,技术人员的技术

配备,以及现有资源文档的配备来说,实现本软件是可能的。 经济可行性分析:本软件无须过多的资金投入,适合开发。 其他可行性分析:符合Android游戏课程以及软件工程三项目要求。 三、需求分析 随着智能手机和3G网络的普及进一步深化,移动互联网迎来爆发式增长。业界普遍认为,移动互联网是一个比互联网大数倍的亿万级产业,手机等智能移动终端不仅将成为人类线上生活娱乐的最主要载体,也将是传统飞行游戏在未来发展的更广阔舞台。 Android1飞行游戏正是为这一形式而发展起来,本人提出一种多功能手机Android飞行游戏的应用,主要为了满足不同人群的娱乐需要,并且提高优质的游戏服务,于是提出Android飞行游戏的主要功能。 需求功能如下: 欢迎界面 主界面 生命值 发射子弹 四、总体设计

飞机大战案例分析

简单的微信飞机大战 编写成员:张宏万熊波缪伟 专业:11软件工程 姓名:张宏 学号:2011103368 姓名:万熊波 学号:2011103365 姓名:缪伟 学号:2011103388

摘要 相信Android(安卓)已经为人们熟知,经过2011年的洗礼,Android智能 手机火速上位,甚至说现在手机系统由IOS和Android平分也不为过。随着Android智能手机在中国内地的风靡,基于Android平台的应用开发也逐渐成为 IT开发的一大热门。游戏是智能机不可或缺的应用之一,“水果忍者”、“愤 怒的小鸟”等Android游戏应用的成功,让人看到手机游戏在Android平台上的 巨大发展空间。基于此,采用Eclipse和Android ADT作为集成开发平台,开 发本Android游戏APP。 本应用为Android飞机大战游戏,主要有6个操作界面分别为开始界面,游 戏界面,设置界面,得分界面,Win界面,Lose界面。玩家可以选择自己进入设 置界面对游戏进行设置,或进入的分界面查看自己本次操作是否在前六名等操作。作为游戏背景音乐的存在是不可或缺的,本应用在不同的操作界面演奏不同 的背景音乐,玩家还可以在设置界面设置背景音乐的大小。由于Android控件Activity的生命周期的特点,本应用会在被点击“EXIT”按钮的Activity中发 送一个EXIT的广播,所有的本应用的Activity收到广播后会自动结束,使得本 应用能够完全的退出系统。本应用采用Android的SurfaceView绘制游戏界面, 游戏的主界面美观,赏心悦目,以提高玩家对游戏的兴趣。游戏的控制模块应该 做到易懂、易操作,以给玩家一个很好的游戏环境。 目录 第1章绪论 (3) 1.1系统开发背景 (3) 1.2系统研究目的和意义 (3) 1.3可行性分析 (4) 第2章系统需求分析 (4) 2.1用户功能需求分析 (4) 2.2系统性能要求 (4) 2.3业务流程分析 (4) 第3章系统总体设计 (5) 3.1系统功能模块分析 (5) 3.1.1系统管理 (5) 3.1.2 APP应用设置 (5)

SDL的飞机大战游戏的制作介绍

qwertyuiopasdfghjklzxcvbnmqwertyu iopasdfghjklzxcvbnmqwertyuiopasdfg hjklzxcvbnmqwertyuiopasdfghjklzxcv bnmqwertyuiopasdfghjklzxcvbnmqw ertyuiopasdfghjklzxcvbnmqwertyuiop asdfghjklzxcvbnmqwertyuiopasdfghjk lzxcvbnmqwertyuiopasdfghjklzxcvbn mqwertyuiopasdfghjklzxcvbnmqwert yuiopasdfghjklzxcvbnmqwertyuiopas dfghjklzxcvbnmqwertyuiopasdfghjklz xcvbnmqwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnmqwertyu iopasdfghjklzxcvbnmqwertyuiopasdfg hjklzxcvbnmqwertyuiopasdfghjklzxcv bnmrtyuiopasdfghjklzxcvbnmqwertyu iopasdfghjklzxcvbnmqwertyuiopasdfg hjklzxcvbnmqwertyuiopasdfghjklzxcv 基于SDL 的飞机大战游戏制作介绍 2014/6/7 GDUT 陈彩华

●游戏玩法基本的介绍 ●游戏的设计的基本框架 ●游戏的设计中关键难点的解决

关于学习程序设计的心得 程序下载的网站:https://www.doczj.com/doc/142212034.html,/s/1hq9nYj6 一.游戏玩法基本的介绍 打开plane_war.exe 文件,就可以开始游戏,WSAD控制上下左右,目前仅有“1”这一个全屏秒的道具可以使用。 游戏过程中会随机掉落道具,所有的敌机中有一种可以追踪我方飞机的自杀式飞机,比较危险。当坚持120秒,就有BOSS出现,嘿嘿,BOSS 的子弹是凶残了点,但是仔细观察BOSS的运动轨迹和喷弹的规律,就会发现很简单的办法打掉它。 当顺利杀死BOSS,会进入第二关,鉴于时间有限,第二关及第二关以后的敌机和BOSS都和第一关一样。 打落的敌机越多,那么分数就越高。

相关主题
文本预览
相关文档 最新文档