信息科学与工程学院软件实践实训报告
BOOL CMyPlane::Draw(CDC* pDC,BOOL bPause) {
m_ptPos.x=m_ptPos.x+m_nHorMotion*5; m_ptPos.y=m_ptPos.y+m_nVerMotion*5;
//使飞机在屏幕内 if(m_ptPos.x>=1000) m_ptPos.x=1000; if(m_ptPos.x<=0) m_ptPos.x=0; if(m_ptPos.y<=0) m_ptPos.y=0; if(m_ptPos.y>=600) m_ptPos.y=580; return m_Images.Draw(pDC,0,m_ptPos, ILD_TRANSPARENT); }
BOOL CMyPlane::LoadImage() {
return CGameObject::LoadImage(m_Images,IDB_Myplane,RGB(0,0,0),50,60,1); }
4.3 Enemy.cpp
#include \#include \#include \
CImageList CEnemy::m_Images; CEnemy::CEnemy(void) {srand(GetTickCount()); m_ptPos.x=rand()?0;//rand产生随机数,初始敌机位置 m_ptPos.y=0; m_V=rand()%5+1; m_nImgIndex=rand()%2; //上下飞机 if(m_nImgIndex==0)
16
信息科学与工程学院软件实践实训报告
{
m_nMotion=1; m_ptPos.y=0; } if(m_nImgIndex==1) {
m_nMotion=-1; m_ptPos.y=700; } }
CEnemy::~CEnemy(void) { }
BOOL CEnemy::Draw(CDC *pDC, BOOL bPause) { if(m_ptPos.y>=700) m_ptPos.y=0; if(m_ptPos.y<=-15) m_ptPos.y=700; m_ptPos.y=m_ptPos.y+m_nMotion*m_V; return m_Images.Draw(pDC,m_nImgIndex,m_ptPos,ILD_TRANSPARENT); }
BOOL CEnemy::LoadImage() {
return CGameObject::LoadImage(m_Images,IDB_Enemy,RGB(0,0,0),35,35,2); }
4.4Bomb.cpp
#include \#include \#include \
CImageList CBomb::m_Images; CBomb::CBomb(int x,int y) { m_ptPos.x=x; m_ptPos.y=y;
17
信息科学与工程学院软件实践实训报告
}
CBomb::~CBomb(void) { }
BOOL CBomb::Draw(CDC *pDC, BOOL bPause) { m_ptPos.y=m_ptPos.y-1*8; return m_Images.Draw(pDC,0,m_ptPos, ILD_TRANSPARENT); /**********使导弹在屏幕内*****************/ if(m_ptPos.x>=1000) return FALSE; if(m_ptPos.y>=800) return FALSE; }
BOOL CBomb::LoadImageW() { return CGameObject::LoadImageW(m_Images,IDB_Bomb,RGB(0,0,0),10,20,1); }
4.5Ball.cpp
#include \#include \#include \
CImageList CBall::m_Images;
CBall::CBall(int x,int y,int nMotion) { m_ptPos.x=x; m_ptPos.y=y; m_nMotion=nMotion; }
CBall::~CBall(void) { }
BOOL CBall::Draw(CDC* pDC,BOOL bPause) {
18
信息科学与工程学院软件实践实训报告
m_ptPos.y= m_ptPos.y+m_nMotion*6;//固定子弹速度为10 return m_Images.Draw(pDC,0,m_ptPos,ILD_TRANSPARENT); //使子弹在屏幕内 if(m_ptPos.x>=1000) return FALSE; if(m_ptPos.y>=700) return FALSE;; }
BOOL CBall::LoadImage() {
return CGameObject::LoadImage(m_Images,IDB_Ball,RGB(0,0,0),8,8,1); }
4.6Explosion.cpp
#include \#include \#include \
CImageList CExplosion::m_Images; CExplosion::CExplosion(int x,int y) { m_ptPos.x=x; m_ptPos.y=y; m_nProcess=0; }
CExplosion::~CExplosion(void) { }
BOOL CExplosion::Draw(CDC* pDC,BOOL bPause) { m_Images.Draw(pDC,m_nProcess,m_ptPos,ILD_TRANSPARENT); m_nProcess++; if (m_nProcess==8) return FALSE; else return TRUE; }
BOOL CExplosion::LoadImage() {
19
信息科学与工程学院软件实践实训报告
return CGameObject::LoadImage(m_Images,IDB_Explosion,RGB(0,0,0),66,66,8); }
4.7GameObject.cpp
#include \
#include \
// CGameObject
CGameObject::CGameObject(int x,int y):m_ptPos(x,y) { }
CGameObject::~CGameObject() { }
BOOL CGameObject::LoadImage(CImageList& imgList,UINT bmpID,COLORREF crMask,int cx,int cy,int nInitial) { CBitmap bmp; if(!bmp.LoadBitmap(bmpID)) return FALSE; if(!imgList.Create(cx, cy, ILC_COLOR24|ILC_MASK, nInitial, 0)) return FALSE; imgList.Add(&bmp, crMask); return TRUE; }
5. 实训中遇到的主要问题及解决方法
5.1(问题一)
当实现一架敌机运动时,怎样实现多架敌机的随机运动,通过老师的提示及询问同学解决了此问题。
5.2(问题二)
每当战机击落一架敌机,程序或者中断,或者反应迟钝,在其后加了个break,问题就解决啦。
20
信息科学与工程学院软件实践实训报告
5.3(问题三)
在战机击落十架敌机时,战机会加一条命,但实现时就会生命循环加,原因是限制的条件没有考虑到零,零除以一百取余还是零。
6. 实训体会
飞机大战的游戏是基于c++基础上在visual studio2008上实现的,所以通过这次实习,把以前忘掉的,不会的,不熟的知识点复习了一遍,每当遇到问题,自己可以查课本,或者上网,询问老师和同学,增强了自己的自学能力,为以后的学习和工作,打下啦坚定的基础。 在实现飞机大战的过程中,确实感觉到自己知识的薄弱,很多知识不会,例如visual studio2008中的很多功能的作用,这次实习使我对编程有了新的认识和定义,其实程序的编程不是枯燥和乏味的,而是包含着轻松和愉悦,每当自己解决了一个刺手的问题后,自己都有一种成功感。
21