3.2 主要功能模块
主要功能是在飞机大战View类中,OnTimer函数中实现,将各个类调用,随机产生敌机,子弹的输出,爆炸的实现等等。它的实现图可以如下实现:
启动程序初始化游戏对象游戏初始化初始化绘图环境游戏是否结束绘制游戏对象碰撞运算积分判断
本程序所包含的功能和类模块:
游戏子系统 模块名称 应用程序对象 游戏对象 战机对象 敌机对象 功能简述 游戏程序的加载、游戏对象的绘制、玩家的键盘事件获取 各个游戏对象的抽象父类(CGameObject) 战机类(MyPlane) 敌机类(Enemy, LittleBoss,Boss) 3
导弹对象 炸弹对象 爆炸对象 道具对象
导弹类(Bomb,Bomb2) 炸弹类(Ball,BossBall) 爆炸类(Explosion) 道具类(AddBlood,AddBomb) 4. 编码实现
4.1 初始准备
模块名称 功能描述 数据结构 与算法 应用程序对象 游戏程序的加载、游戏对象的绘制、玩家的键盘事件获取 CflyfightView::CflyfightView() { } CflyfightView::~CflyfightView() { } BOOL CflyfightView::PreCreateWindow(CREATESTRUCT& cs) { } // CflyfightView 绘制 void CflyfightView::OnDraw(CDC* pDC) { } // CflyfightView 打印 BOOL CflyfightView::OnPreparePrinting(CPrintInfo* pInfo) { } void CflyfightView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) // 默认准备 return DoPreparePrinting(pInfo); CflyfightDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加代码 // TODO: 在此处通过修改 // CREATESTRUCT cs 来修改窗口类或样式 return CView::PreCreateWindow(cs); // TODO: 在此处添加构造代码 flag=0; flag2=0; level=1; bossblood=100; 4
{ } void CflyfightView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { } // CflyfightView 诊断 #ifdef _DEBUG void CflyfightView::AssertValid() const { } void CflyfightView::Dump(CDumpContext& dc) const { } CflyfightDoc* CflyfightView::GetDocument() const // 非调试版本是内联的 { } #endif //_DEBUG // CflyfightView 消息处理程序 int CflyfightView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加专用代码和/或调用基类 PlaySound((LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(), SND_RESOURCE | SetTimer(1, 30, 0); CMyPlane::LoadImage(); CEnemy::LoadImage(); CExplosion::LoadImage(); CBomb::LoadImage(); CBall::LoadImage(); CAddBlood::LoadImage(); CAddBomb::LoadImage(); CBomb2::LoadImage(); CLittleBoss::LoadImage(); CBoss::LoadImage(); ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CflyfightDoc))); return (CflyfightDoc*)m_pDocument; CView::Dump(dc); CView::AssertValid(); // TODO: 添加打印后进行的清理过程 // TODO: 添加额外的打印前进行的初始化过程 SND_ASYNC|SND_LOOP); 5
} CBossBall::LoadImage(); return 0; void CflyfightView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) { } 补充说明 CView::OnKeyUp(nChar, nRepCnt, nFlags); // TODO: 在此添加消息处理程序代码和/或调用默认值 if(nChar==VK_DOWN||VK_UP) myPlane.SetVerMotion(0); myPlane.SetHorMotion(0); if(nChar==VK_RIGHT||VK_LEFT) 4.2 战机对象
模块名称 功能描述 数据结构 与算法 战机对象 战机移动、战机导弹的发射 short key=GetKeyState(VK_RIGHT); short key1=GetKeyState(VK_LEFT); short key2=GetKeyState(VK_UP); short key3=GetKeyState(VK_DOWN); { } void CflyfightView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if(nChar==VK_SPACE) { if(myPlane.Fired()) 6
// TODO: 在此添加消息处理程序代码和/或调用默认值 if(nChar==VK_DOWN||VK_UP) myPlane.SetVerMotion(0); myPlane.SetHorMotion(0); if(nChar==VK_RIGHT||VK_LEFT) if ((key&0x80)!=0) myPlane.SetHorMotion(1); myPlane.SetHorMotion(-1); myPlane.SetVerMotion(-1); myPlane.SetVerMotion(1); else if ((key1&0x80)!=0) else if ((key2&0x80)!=0) else if ((key3&0x80)!=0) void CflyfightView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) CView::OnKeyUp(nChar, nRepCnt, nFlags);
} if(flag==0&&(level==1||level==2)) { listBomb.AddTail(new CBomb(myPlane.GetPoint().x+10,myPlane.GetPoint().y+20,0,12)); listBomb.AddTail(new } else if(flag==0&&(level==3||level==4)) { listBomb.AddTail(new CBomb(myPlane.GetPoint().x+30,myPlane.GetPoint().y+20,0,12)); CBomb(myPlane.GetPoint().x+10,myPlane.GetPoint().y+20,5,12)); listBomb.AddTail(new listBomb.AddTail(new } { listBomb2.AddTail(new listBomb2.AddTail(new listBomb2.AddTail(new listBomb2.AddTail(new CBomb(myPlane.GetPoint().x+30,myPlane.GetPoint().y+20,0,12)); CBomb(myPlane.GetPoint().x+30,myPlane.GetPoint().y+20,-5,12)); if(flag2!=0) CBomb2(myPlane.GetPoint().x+10,myPlane.GetPoint().y+20,10,10)); CBomb2(myPlane.GetPoint().x+40,myPlane.GetPoint().y+20,5,10)); CBomb2(myPlane.GetPoint().x+20,myPlane.GetPoint().y+20,0,10)); CBomb2(myPlane.GetPoint().x+40,myPlane.GetPoint().y+20,-5,10)); listBomb2.AddTail(new flag2--; if(flag2<1) } flag=0; CBomb2(myPlane.GetPoint().x+40,myPlane.GetPoint().y+20,-10,10)); 补充说明 4.3 敌机对象
模块名称 功能描述 敌机对象 敌机、大小boss随机产生,随机方向发射子弹,大boss随机发射子弹,大小boss的血条显示 //敌机的随机产生 if(level==1) {if(rand()0==10) listEnemy.AddTail(new CEnemy());} if(level==2||level==3) 7
数据结构 与算法