1、为了让游戏场景更加逼真,游戏节奏更加合理,可以通过让背景滚动来提高游戏的场景效应,实现这一技术时,可以将一张背景图片复制为2张,从上到下连续的拼接在一起,使其不会出现图片的卡顿和瞬移现象。2.5内存释放技术这个程序中有大量的地方需要使用内存,如果不及时删除会出现闪图等情况,容易导致程序崩溃,要及时释放内存资源。3. 总体设计与详细设计3.1 系统模块划分3.2 主要功能模块类关系图:4. 编码实现/ PlaneGameView.cpp : CPlaneGameView 类的实现void CPlaneGameView:UpdateFrame(CDC* pMemDC) /绘制天空 if(level
2、=0) CPaintDC dc(this); CBitmap bmpBackground; /位图对象 bmpBackground.LoadBitmap(IDB_BITMAP1); CDC dcMem; /定义一个工具箱(设备上下文) dcMem.CreateCompatibleDC(&dc); BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); /建立绑定关系 CBitmap *back = dcMem.SelectObject(&bmpBackground); /保存原有CDC对象,并选入新CDC对象入DC static int curr =
3、1; if (curr BitBlt(0, 0, GAME_WIDTH, GAME_HEIGHT - curr, &dcMem, 0, curr, SRCCOPY);BitBlt(0, GAME_HEIGHT - curr, GAME_WIDTH, curr, &dcMem, 0, 0, SRCCOPY); if(level=1&l=0&boss=0)FillSolidRect(0, 0, GAME_WIDTH, GAME_HEIGHT, RGB(0, 0, 0); l+;z=1; if(level=1&l!=0&boss!=0) CPaintDC dc(this); CBitmap bmpB
4、ackground; bmpBackground.LoadBitmap(IDB_BITMAP1); CDC dcMem; dcMem.CreateCompatibleDC(& BITMAP bitmap; bmpBackground.GetBitmap(& CBitmap *back = dcMem.SelectObject(& static int curr = 1; if (curr if (level = 2 & l != 0 & boss != 0) bmpBackground.LoadBitmap(IDB_MAP2); if(level=3 & bmpBackground.LoadB
5、itmap(IDB_MAP3); if(level=4 & bmpBackground.LoadBitmap(IDB_MAP4);/兼容 if(level=5 & bmpBackground.LoadBitmap(IDB_MAP5);5 & bmpBackground.LoadBitmap(IDB_MAP6);SetBkMode(TRANSPARENT);SetTextAlign(TA_CENTER);SetTextColor(RGB(255, 255, 255); wchar_t S81000; wsprintf(S8, L单击鼠标进入游戏);TextOutW(GAME_WIDTH / 2,
6、 GAME_HEIGHT / 2, CString(S8);z! wchar_t S91000; wsprintf(S9, L点击进入下一关TextOutW(GAME_WIDTH / 2, GAME_HEIGHT / 2, CString(S9);z=0) wchar_t S11000; wchar_t S21000; wsprintf(S1, L得分:%d, number); wsprintf(S2, L关卡:, level);TextOutW(35, 0, CString(S1);TextOutW(200, 0, CString(S2); wchar_t S31000; wsprintf(
7、S3 , L按下“F1”开启无敌模式TextOutW(390, 0, CString(S3); wchar_t S41000; wsprintf(S4, L按下“F2”关闭无敌模式TextOutW(390, 20, CString(S4); wchar_t S51000; if(wu=0) wsprintf(S5, L大招数量:,dazhao );TextOutW(430, 40, CString(S5); if(wu=1) wsprintf(S5, L无限 wchar_t S61000; wsprintf(S6, L按下空格发射子弹TextOutW(60, 50, CString(S6);
8、wchar_t S71000; wsprintf(S7, L按下“Z”大招TextOutW(56, 70, CString(S7); /绘制我方战机 if (m_pMe != NULL) m_pMe-Draw(m_pMemDC, FALSE); else /Game Over CString str = _T(Game Over!TextOut(GAME_WIDTH / 2, GAME_HEIGHT / 2, str); /绘制血条 CString z1; z1.Format(L战机HP(%d), shengming);TextOut(47, 30, z1); pMemDC-FillSolid
9、Rect(90, 33, shengming * 10, 10, RGB(255, 0, 0); if (bxt = 1) CString z2; z2.Format(LBoss HP (%d),boss);TextOut(35, 100, z2);FillSolidRect(80, 108, boss * 2, 10, RGB(0, 255, 0); /绘制 导弹、爆炸、敌机、子弹、boss、boss子弹 for (int i = 0;i Draw(pMemDC, FALSE) m_ObjListi.RemoveAt(pos2); delete pObj; /复制内存DC到设备DC m_pD
10、C-BitBlt(0, 0, GAME_WIDTH, GAME_HEIGHT, m_pMemDC, 0, 0, SRCCOPY);AI() static int nCreator = rand() % 5+20 ; /随机产生敌机 if (nCreator =25&count5&count%200=0&bn=0) if (m_pMe = NULL) return; /检测四个方向键,移动战机iSetVerMotion(1); nMeMotion = GetKey(VK_DOWN);SetVerMotion(-1); nMeMotion = GetKey(VK_RIGHT);SetHorMoti
11、on(1); nMeMotion = GetKey(VK_LEFT);SetHorMotion(-1); /产生战机导弹 if (GetKey(VK_SPACE) = 1)/按下了空格键 if (m_pMe != NULL & m_pMe-Fired() CPoint pt = m_pMe-GetPoint(); if (level = 1 & wu = 0) m_ObjListenBomb.AddTail(new CBomb(pt.x + 20, pt.y + 10); if (level = 2 & m_ObjListenBomb.AddTail(new CBomb(pt.x + 10,
12、pt.y + 30); m_ObjListenBomb.AddTail(new CBomb(pt.x + 30, pt.y + 30); if (level = 3 & m_ObjListenBomb.AddTail(new CBomb(pt.x + 10, pt.y + 30); m_ObjListenBomb.AddTail(new CBomb(pt.x + 30, pt.y + 30); m_ObjListenBomb.AddTail(new CBomb(pt.x + 20, pt.y + 30); if (level = 4 & m_ObjListenBomb.AddTail(new CBomb(pt.x + 20, pt.y + 30); m_ObjListe
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1