程序设计综合实践报告_第1页
程序设计综合实践报告_第2页
程序设计综合实践报告_第3页
程序设计综合实践报告_第4页
程序设计综合实践报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.程序设计综合实践报告姓名梁琨学号201301050817班级信息13-1项目名称飞机大战游戏设计与实现实习地点科技园实习时间2015-10-26至2015-11-6实习成绩指导教师签字数学与系统科学学院 2015年 11月6日 ;目 录1. 概述12. 相关技术12.1 数据链表12.2 双缓冲13. 总体设计与详细设计23.1 系统模块划分23.2 主要功能模块24. 编码实现125. 实训中遇到的主要问题及解决方法206. 实训体会201. 概述项目:飞机大战主要功能:本款基于MFC平台所制作的游戏,具有极大的休闲娱乐功能。玩家通过操纵我机,通过发射子弹机会敌机来积分,分数越高说明了玩家

2、坚持的越长。游戏开始界面向玩家进行了游戏按键的功能说明,游戏中设置暂停按键,可以方便玩家继续游戏。游戏还自带无敌模式,以及我机大招,极大地提高了游戏的可玩性。2. 相关技术本程序主要运用了链表和双缓冲的技术。链表的应用方便了对数据成员的访问和处理,简化了代码,支持插入和移除表中任意位置上的节点;双缓冲主要用于图像的处理,在内存中重新绘图后复制到前台,同时禁止背景刷新,避免因图像刷新过于频繁导致画面出现闪烁现象。2.1 数据链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。使用链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。由于

3、常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换,因此链表最大的优点是允许插入和移除表上任意位置上的节点。在程序运行过程中,根据游戏对象的种类划分不同的链表,每个链表单一的存储一类数据,在进行处理、绘图时,通过对链表的遍历,实现对数据的访问,再根据所要实现的功能,对不同的对象做出不同的处理,对数据成员的插入和移除也变得轻松了许多。2.2 双缓冲在图形图象处理编程过程中,双缓冲是一种基本的技术。窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新会引起闪烁现象。解决这一问题的有效方法就是双缓冲技术。因

4、为窗体在刷新时,总要有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PAINT的响应很频繁的时候,这种反差也就越发明显。于是我们就看到了闪烁现象。双缓冲我们会很自然的想到,避免背景色的填充是最直接的办法。但是那样的话,窗体上会变的一团糟。因为每次绘制图象的时候都没有将原来的图象清除,造成了图象的残留,于是窗体重绘时,画面往往会变的乱七八糟。所以单纯的禁止背景重绘是不够的。我们还要进行重新绘图,但要求速度很快,于是我们想到了使用 BitBlt函数。它可以支持图形块的复制,速度很快。我们可以先在

5、内存中作图,然后用此函数将做好的图复制到前台,同时禁止背景刷新,这样就消除了闪烁。以上也就是双缓冲绘图的基本的思路。3. 总体设计与详细设计3.1 系统模块划分游戏规则子系统模块名称功能简述人工智能人机对战规则的实现游戏子系统模块名称功能简述应用程序对象游戏程序的加载、游戏对象的绘制、游戏规则的调用、玩家的键盘事件获取游戏对象各个游戏对象的抽象父类战机对象战机类敌机对象敌机类、大敌机类炸弹对象炸弹1类、炸弹2类爆炸对象爆炸类文字对象文字类3.2 主要功能模块模块名称人工智能功能描述人机对战规则规则接口与属性void AI( void );数据结构与算法(注:红色加粗部分为新加代码!)void

6、CPlaneGameView:AI()if(m_pMe=NULL)return;/检测四个方向键,移动战机for(int i=0;i<4;i+)int nMeMotion=0;m_pMe->SetVerMotion(0);m_pMe->SetHorMotion(0);/初始化nMeMotion = GetKey(VK_UP);if(nMeMotion=1)m_pMe->SetVerMotion(1);nMeMotion = GetKey(VK_DOWN);if(nMeMotion=1)m_pMe->SetVerMotion(-1);nMeMotion = GetK

7、ey(VK_RIGHT);if(nMeMotion=1)m_pMe->SetHorMotion(1);nMeMotion = GetKey(VK_LEFT);if(nMeMotion=1)m_pMe->SetHorMotion(-1);/随机产生小敌机static int nCreator = rand() % 5 + 10;if (nCreator <= 0)nCreator = rand() % 5 + 10;m_ObjListenEnemy.AddTail(new CEnemy);nCreator-;/ 产生大敌机if (m_pMe != NULL&&s

8、core >= 1000 && Booswait<=0)CGameObject* pObj;/PlaySound(LPCTSTR)IDR_WAVE5, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);m_ObjListenBOSS.AddTail(new BOSS);Booswait = rand() % 300+10 ;Booswait-;/产生战机导弹PlaneGameif(GetKey(VK_SPACE)=1)/按下了空格键if(m_pMe!=NULL && m_pMe->Fired()

9、/PlaySound(LPCTSTR)IDR_WAVE3, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);CPoint pt = m_pMe->GetPoint();m_ObjListenBomb.AddTail(new CBomb(pt.x , pt.y -10,3);m_ObjListenBomb.AddTail(new CBomb(pt.x+15,pt.y-10,3);m_ObjListenBomb.AddTail(new CBomb(pt.x + 22, pt.y -40,0);m_ObjListenBomb.AddTail(

10、new CBomb(pt.x + 37, pt.y - 40, 0);m_ObjListenBomb.AddTail(new CBomb(pt.x+45,pt.y-10,-3);m_ObjListenBomb.AddTail(new CBomb(pt.x + 60, pt.y -10,-3);/无敌模式if (GetKey('A') = 1)wd+;/小敌机发射子弹CPoint PlanePt = m_pMe->GetPoint();for(POSITION ePos=m_ObjListenEnemy.GetHeadPosition();ePos!=NULL;) CEne

11、my* pEnemy = (CEnemy*)m_ObjListenEnemy.GetNext(ePos); if(!pEnemy->Fired() continue; CPoint ePt = pEnemy->GetPoint(); BOOL by=FALSE; /敌机在战机前面 if(pEnemy->GetMontion()=1 && ePt.y<PlanePt.y) by= TRUE; /敌机在战机后面 if(pEnemy->GetMontion()=-1 && ePt.y>PlanePt.y) by= TRUE; if(

12、by && ePt.x >= PlanePt.x && ePt.x<PlanePt.x+CMyPlane:PLANE_WIDTH) m_ObjListenBall.AddTail(new CBall(ePt.x+10,ePt.y+10,pEnemy->GetMontion(); /小敌机子弹炸掉战机POSITION bPos1=NULL,bPos2=NULL;CRect mRect = m_pMe->GetRect();for(bPos1=m_ObjListenBall.GetHeadPosition();( bPos2 = bPos1

13、) != NULL;)CBall* pBall = (CBall*)m_ObjListenBall.GetNext(bPos1);CRect bRect = pBall->GetRect();CRect tmpRect;if(tmpRect.IntersectRect(&bRect,mRect)if (wd % 2 = 0)life -= 5;/删除子弹m_ObjListenBall.RemoveAt(bPos2);delete pBall;/添加爆炸效果m_ObjListenExplosion.AddTail(new CExplosion(mRect.left, mRect.t

14、op);if (life <= 0)/添加爆炸效果m_ObjListenExplosion.AddTail(new CExplosion(mRect.left, mRect.top);/删除战机delete m_pMe;m_pMe = NULL;break;/我机与小敌机相遇互相摧毁POSITION coPos1 = NULL, coPos2 = NULL;for (coPos1 = m_ObjListenEnemy.GetHeadPosition(); (coPos2 = coPos1) != NULL;)CEnemy* pEnemy = (CEnemy*)m_ObjListenEne

15、my.GetNext(coPos1);CRect eRect = pEnemy->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&eRect, mRect)if (wd % 2 = 0)life -= 10;energy += 5;/添加爆炸效果m_ObjListenExplosion.AddTail(new CExplosion(eRect.left, eRect.top);/删除敌机m_ObjListenEnemy.RemoveAt(coPos2);delete pEnemy;PlaySound(LPCTSTR)IDR_W

16、AVE2, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC );if (life <= 0)/添加爆炸效果m_ObjListenExplosion.AddTail(new CExplosion(mRect.left, mRect.top);/删除战机delete m_pMe;m_pMe = NULL;break;/我机导弹炸掉敌机POSITION mPos1=NULL,mPos2=NULL;for(mPos1=m_ObjListenBomb.GetHeadPosition();(mPos2=mPos1)!=NULL;)CBomb* pBo

17、mb = (CBomb*)m_ObjListenBomb.GetNext(mPos1);CRect bRect = pBomb->GetRect();POSITION ePos1=NULL,ePos2=NULL;for(ePos1=m_ObjListenEnemy.GetHeadPosition();(ePos2=ePos1)!=NULL;)CEnemy* pEnemy = (CEnemy*)m_ObjListenEnemy.GetNext(ePos1);CRect eRect = pEnemy->GetRect();CRect tmpRect;if(tmpRect.Interse

18、ctRect(&bRect,eRect)/添加爆炸效果m_ObjListenExplosion.AddTail(new CExplosion(eRect.left,eRect.top);pEnemy->Setlife(-pBomb->Gethurt();if (pEnemy->Getlife() <= 0)static int a = 0;a+;if (a % 10 = 0)life += 1;if (life>100)life = 100;/删除敌机m_ObjListenEnemy.RemoveAt(ePos2);score += 10;energy +

19、= 5;delete pEnemy;PlaySound(LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);/删除导弹m_ObjListenBomb.RemoveAt(mPos2);delete pBomb;break;/= = = = =添加爆炸效果,大敌机与战机相撞 = = = = = = =POSITION pPos1 = NULL,pPos2 = NULL;for (pPos1 = m_ObjListenBOSS.GetHeadPosition(); (pPos2 = pPos1) != NULL;)

20、BOSS* pBboss = (BOSS*)m_ObjListenBOSS.GetNext(pPos1);CRect bRect = pBboss->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&bRect, mRect)/添加爆炸效果m_ObjListenExplosion.AddTail(new CExplosion(mRect.left, mRect.top);if (wd % 2 = 0)life -;if (pBboss->get_life() != 0) pBboss->set_life(-1); /

21、删除 大Bossif (pBboss->get_life() = 0)m_ObjListenExplosion.AddTail(new CExplosion(mRect.left + 30, mRect.top + 30);m_ObjListenExplosion.AddTail(new CExplosion(mRect.left + 70, mRect.top + 30);m_ObjListenExplosion.AddTail(new CExplosion(mRect.left + 50, mRect.top + 50);m_ObjListenExplosion.AddTail(ne

22、w CExplosion(mRect.left + 30, mRect.top + 70);m_ObjListenExplosion.AddTail(new CExplosion(mRect.left + 70, mRect.top + 70);/PlaySound(LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);m_ObjListenBOSS.RemoveAt(pPos2);score += 100;energy += 10;delete pBboss;pBboss = NULL;break;if (l

23、ife <= 0)life = 1;/=添加爆炸效果,我机导弹打中大Boss=mPos1 = NULL;mPos2 = NULL;for (mPos1 = m_ObjListenBomb.GetHeadPosition(); (mPos2 = mPos1) != NULL;)CBomb* pBomb = (CBomb*)m_ObjListenBomb.GetNext(mPos1);CRect bRect = pBomb->GetRect();POSITION ePos1 = NULL, ePos2 = NULL;for (ePos1 = m_ObjListenBOSS.GetHea

24、dPosition(); (ePos2 = ePos1) != NULL;)BOSS* pEnemy = (BOSS*)m_ObjListenBOSS.GetNext(ePos1);CRect eRect = pEnemy->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&bRect, eRect)/添加爆炸效果m_ObjListenExplosion.AddTail(new CExplosion(eRect.left, eRect.top);if (pEnemy->get_life() != 0) pEnemy->

25、;set_life(-3); /删除 大Bossif (pEnemy->get_life() <= 0)m_ObjListenExplosion.AddTail(new CExplosion(eRect.left + 30, eRect.top + 30);m_ObjListenExplosion.AddTail(new CExplosion(eRect.left + 70, eRect.top + 30);m_ObjListenExplosion.AddTail(new CExplosion(eRect.left + 50, eRect.top + 50);m_ObjListen

26、Explosion.AddTail(new CExplosion(eRect.left + 30, eRect.top + 70);m_ObjListenExplosion.AddTail(new CExplosion(eRect.left + 70, eRect.top + 70);/PlaySound(LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);m_ObjListenBOSS.RemoveAt(ePos2);score += 100;energy += 10;delete pEnemy;pEnem

27、y = NULL;break;/删除导弹m_ObjListenBomb.RemoveAt(mPos2);delete pBomb;break;/= 大敌机发射子弹=for (POSITION bPos = m_ObjListenBOSS.GetHeadPosition(); bPos != NULL;)BOSS* pBboss = (BOSS*)m_ObjListenBOSS.GetNext(bPos);if (!pBboss->Fired()continue;CPoint BPt = pBboss->GetPoint();BOOL by = FALSE;/敌机在战机前面if (B

28、Pt.y<PlanePt.y)by = TRUE;if (by && BPt.x >= PlanePt.x && BPt.x<PlanePt.x + CMyPlane:PLANE_WIDTH)m_ObjListenBball.AddTail(new Bball(BPt.x + 40, BPt.y + 40, 1);/=大敌机子弹炸掉战机=POSITION BbPos1 = NULL, BbPos2 = NULL;for (BbPos1 = m_ObjListenBball.GetHeadPosition(); (BbPos2 = BbPos1)

29、 != NULL;)Bball* pBball = (Bball*)m_ObjListenBball.GetNext(BbPos1);CRect bRect = pBball->GetRect();CRect tmpRect;if (tmpRect.IntersectRect(&bRect, mRect)if (wd % 2 = 0)life -= 30;/删除子弹m_ObjListenBball.RemoveAt(BbPos2);delete pBball;/添加爆炸效果m_ObjListenExplosion.AddTail(new CExplosion(mRect.left

30、, mRect.top);if (life <= 0)/添加爆炸效果m_ObjListenExplosion.AddTail(new CExplosion(mRect.left, mRect.top);/删除战机delete m_pMe;m_pMe = NULL;break;if (energy > 100)energy = 100;/=游戏结束弹窗=if (m_pMe = NULL)KillTimer(1);CString str;str.Format(_T("游戏结束,您的得分为%d"), score);AfxMessageBox(str);if (AfxM

31、essageBox(L"游戏结束,是否重新开始", MB_YESNO) = 6)/清空敌机m_ObjListenEnemy.RemoveAll();/清空战机链表/m_ObjListenpMe.RemoveAll();/清空战机子弹链表m_ObjListenBall.RemoveAll();/清空敌机炸弹链表m_ObjListenBomb.RemoveAll();/清空爆炸链表m_ObjListenExplosion.RemoveAll();/清空大敌机链表m_ObjListenBOSS.RemoveAll();/清空大敌机子弹链表m_ObjListenBball.Remo

32、veAll();/添加新的战机对象m_pMe = new CMyPlane;CPen p1(PS_SOLID, 2, RGB(0, 0, 0);/定义一个画笔类对象p1m_pMemDC->SelectObject(&p1);/选定该对象CBrush b1(RGB(255, 0, 0);/选定一个画刷类对象b1m_pMemDC->SelectObject(&b1);/选定该对象m_pMemDC->Rectangle(300, 20, 300 + life * 40, 10);/画一个矩形life = 100;score = 0;energy = 100;SetT

33、imer(1, 30, NULL);SetTimer(2, 300, NULL);SetTimer(3, 500, NULL);/ifelseexit(1);补充说明4. 编码实现(注:红色加粗部分为新加代码)/ PlaneGameView.cpp : CPlaneGameView 类的实现#include "stdafx.h"#include "PlaneGame.h"#include "background.h"#include "BOSS.h"#include "PlaneGameDoc.h&quo

34、t;#include "PlaneGameView.h"#include "MyPlane.h"#include "Enemy.h"#include "Bomb.h"#include "Ball.h"#include "Bball.h"#include "Explosion.h"#include <atlimage.h>#include "GameObject.h"/ 加声音#include <mmsystem.h&g

35、t;#pragma comment(lib, "WINMM.LIB")#include <MMSYSTEM.H>#ifdef _DEBUG#define new DEBUG_NEW#endif#pragma oncestatic int score=0;static int life=100;static int energy = 100;static int p = 1;static int Booswait;static int wd=0;IMPLEMENT_DYNCREATE(CPlaneGameView, CView)BEGIN_MESSAGE_MAP(

36、CPlaneGameView, CView)/ 标准打印命令ON_COMMAND(ID_FILE_PRINT, &CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView:OnFilePrintPreview)ON_WM_TIMER()ON_WM_DESTROY()ON_WM_KEYDOWN()END_MESSAGE_MAP()/ CPlaneGameView 构造/析构CPlaneGameView:CPla

37、neGameView():m_pMe(NULL)/ TODO: 在此处添加构造代码CPlaneGameView:CPlaneGameView()BOOL CPlaneGameView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: 在此处通过修改/ CREATESTRUCT cs 来修改窗口类或样式return CView:PreCreateWindow(cs);/ CPlaneGameView 绘制void CPlaneGameView:OnDraw(CDC* pDC)CPlaneGameDoc* pDoc = GetDocument();ASSER

38、T_VALID(pDoc);if (!pDoc)return;/ TODO: 在此处为本机数据添加绘制代码BOOL CPlaneGameView:OnPreparePrinting(CPrintInfo* pInfo)/ 默认准备return DoPreparePrinting(pInfo);void CPlaneGameView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: 添加额外的打印前进行的初始化过程void CPlaneGameView:OnEndPrinting(CDC* /*pDC*/, CPrintInf

39、o* /*pInfo*/)/ TODO: 添加打印后进行的清理过程#ifdef _DEBUGvoid CPlaneGameView:AssertValid() constCView:AssertValid();void CPlaneGameView:Dump(CDumpContext& dc) constCView:Dump(dc);CPlaneGameDoc* CPlaneGameView:GetDocument() const / 非调试版本是内联的ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPlaneGameDoc);return

40、 (CPlaneGameDoc*)m_pDocument;#endif /_DEBUG/ CPlaneGameView 消息处理程序void CPlaneGameView:OnInitialUpdate()CView:OnInitialUpdate();/ TODO: 在此添加专用代码和/或调用基类/初始化游戏InitGame();void CPlaneGameView:StopGame()delete m_pMe;delete m_pMemDC;delete m_pDC;delete m_pMemBitmap;BOOL CPlaneGameView:InitGame()CRect rc;Ge

41、tClientRect(rc);/产生随机数种子srand( (unsigned)time( NULL ) );/建立设备DCm_pDC = new CClientDC(this);/建立内存DCm_pMemDC = new CDC;m_pMemDC->CreateCompatibleDC(m_pDC);/建立内存位图m_pMemBitmap = new CBitmap;m_pMemBitmap->CreateCompatibleBitmap(m_pDC,GAME_WIDTH,GAME_HEIGHT);/将位图选入内存DCm_pMemDC->SelectObject(m_pM

42、emBitmap);CMyPlane:LoadImage();CEnemy:LoadImage();CBomb:LoadImage();CBall:LoadImage();Bball:LoadImage();CExplosion:LoadImage();BOSS:LoadImage();/产生主角(战机)m_pMe = new CMyPlane;/启动游戏SetTimer(1,30,NULL); /添加背景音mciSendString(_T("Open resbgm1.mp3 alias bgm1"), NULL, 0, NULL);mciSendString(_T(&qu

43、ot;Play bgm1 repeat"), NULL, 0, NULL);return TRUE;void CPlaneGameView:UpdateFrame(CDC* pMemDC)CPlaneGameDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return; /=绘制=/绘制背景if (pDoc->bg0.y = -GAME_HEIGHT | pDoc->bg0.y = GAME_HEIGHT)pDoc->bg0.y = 0;pDoc->bg0.draw(pMemDC);pDoc->

44、;bg0.y += 1;pDoc->bg1.draw(pMemDC);pDoc->bg1.y += 1;if (pDoc->bg1.y > 0) pDoc->bg1.y += -GAME_HEIGHT; /绘制我方战机if(m_pMe!=NULL) m_pMe->Draw(m_pMemDC,FALSE); /无敌 if (wd % 2 != 0) m_pMemDC->TextOutW(20, 60, L"无敌模式:开启", 7); else m_pMemDC->TextOutW(20, 60, L"无敌模式:关闭&q

45、uot;, 7); /底色条 CBrush brush; brush.CreateSolidBrush(RGB(0, 0, 0); /pMemDC->SelectObject(&brush); / pMemDC->Rectangle(0, 640, 250, 670); brush.DeleteObject(); /绘制底色 brush.CreateSolidBrush(RGB(0, 0, 0);/设置画刷颜色:黑 pMemDC->SelectObject(&brush); pMemDC->Rectangle(GAME_WIDTH / 2 - 150,

46、20, GAME_WIDTH / 2 + 150, 30); brush.DeleteObject(); brush.CreateSolidBrush(RGB(255, 255, 255);/设置画刷颜色:白 pMemDC->SelectObject(&brush); pMemDC->Rectangle(GAME_WIDTH / 2 - 150, 40, GAME_WIDTH / 2 + 150, 50); brush.DeleteObject(); /分数 CString strs, strl, strb; strs.Format(_T("%d"),

47、score); strl.Format(_T("%d"), life); strb.Format(_T("%d"), energy); m_pMemDC->SetTextColor(RGB(255, 0, 0);/文字颜色 m_pMemDC->SetBkMode(TRANSPARENT); m_pMemDC->TextOutW(20, 380, L"得分:", 3); m_pMemDC->TextOutW(100, 380, strs); m_pMemDC->TextOutW(GAME_WIDTH / 2

48、 - 220, 16, L"生命值:", 4); m_pMemDC->TextOutW(GAME_WIDTH / 2 - 220, 35, L"能量值:", 4); /能量 m_pMemDC->SetTextColor(RGB(0, 0, 255);/颜色 m_pMemDC->TextOutW(GAME_WIDTH / 2 - 173, 35, strb); /血条 CBrush b1(RGB(255, 0, 0);/选定一个画刷类对象b1 m_pMemDC->SelectObject(&b1);/选定该对象 m_pMem

49、DC->Rectangle(GAME_WIDTH / 2 - 150, 20, GAME_WIDTH / 2 - 150 + life * 3, 30);/画一个矩形 brush.DeleteObject(); /能量 CBrush b2(RGB(0, 0, 255);/选定一个画刷类对象b1 m_pMemDC->SelectObject(&b2);/选定该对象 m_pMemDC->Rectangle(GAME_WIDTH / 2 - 150, 40, GAME_WIDTH / 2 - 150 + energy * 3, 50);/画一个矩形 m_pMemDC->

50、;SetTextColor(RGB(255, 0, 0);/颜色 if (life > 40) m_pMemDC->SetTextColor(RGB(0, 255, 0);/文字颜色 m_pMemDC->TextOutW(GAME_WIDTH / 2 - 170, 16, strl); m_pMemDC->TextOutW(GAME_WIDTH / 2 - 170, 16, strl);/=绘制 导弹、爆炸、敌机1,2、子弹1,2=for(int i=0;i<6;i+)POSITION pos1,pos2;for( pos1 = m_ObjListi.GetHeadP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论