www.gusucode.com > VC++游戏雷霆战机源代码-源码程序 > VC++游戏雷霆战机源代码-源码程序\code\EnemyPlane.cpp
// EnemyPlane.cpp: implementation of the CEnemyPlane class. // Download by http://www.NewXing.com ////////////////////////////////////////////////////////////////////// #include "EnemyPlane.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CEnemyPlane::CEnemyPlane(CDirectWnd *win, CObList *ObList, int px, int py, int xspd, int yspd, int etype, int elife):CPlane(win,ObList) { id = 2; posx = px; posy = py; xspeed = xspd; yspeed = yspd; enemyType = etype; life = elife; firetime = timeGetTime(); firetime1 = timeGetTime(); firetime2 = timeGetTime(); bulletNum = 0; dead = 0; getInform(); } CEnemyPlane::~CEnemyPlane() { } void CEnemyPlane::LoadPic() { EnemyPic = m_win->lpBKGObject[7]; } void CEnemyPlane::Action() { RECT rtSrc,rtDest; m_win->GetRect(&rtDest,posx,posy,width,height); switch(enemyType) { case 0: m_win->GetRect(&rtSrc,0,0,50,62); break; case 1: m_win->GetRect(&rtSrc,0,62,50,64); break; case 2: m_win->GetRect(&rtSrc,162,0,66,76); break; case 3: m_win->GetRect(&rtSrc,50,0,114,125); break; } m_win->BltObject(EnemyPic,&rtSrc,&rtDest); if( posx < 0 || posx > SrcWidth - width || posy < 0 ||posy > SrcHeight - height) { setExist(0); } if( life < 0 ) { dead = 1; setExist(0); new CExplode(m_win, m_ObList, posx, posy, 1); m_win->m_snd->PlaySound(0,0); if( 1 == rand()%5 ) { if ( 1 == rand()%4 ) { new CBonus(m_win, m_ObList, posx, posy, 0, 1, 4); } else { new CBonus(m_win, m_ObList, posx, posy, 0, 1, rand()%4); } } } if(getExist() != 0) { Move(); Fire(); } } void CEnemyPlane::getInform() { switch(enemyType) { case 0: width = 50; height = 62; score = 100; break; case 1: width = 50; height = 64; score = 200; break; case 2: width = 66; height = 76; score = 300; break; case 3: width = 114; height = 125; score = 2000; break; } } void CEnemyPlane::Move() { switch(enemyType) { case 0: posx += xspeed; posy += yspeed; break; case 1: posx += xspeed; posy += yspeed; break; case 2: posx += xspeed; posy += yspeed; if(posx < 0 || posx > SrcWidth - width) { xspeed = -xspeed;posx += xspeed; } if(posy < 0 || posy > SrcHeight - height ) { yspeed = -yspeed;posy += yspeed; } break; case 3: posx += xspeed; posy += yspeed; if(posx < 0 || posx > SrcWidth - width) { xspeed = -xspeed;posx += xspeed; } if(posy < 0 || posy > SrcHeight - height ) { yspeed = -yspeed;posy += yspeed; } break; } } void CEnemyPlane::Fire() { if (timeGetTime() - firetime > 100) { firetime = timeGetTime(); switch(enemyType) { case 0: if (bulletNum <= 4) { new CEnemyBullet(m_win, m_ObList, posx+8, posy+60, 0, 5, 1); new CEnemyBullet(m_win, m_ObList, posx+26, posy+60, 0, 5, 1); bulletNum++; } else { if(timeGetTime() - firetime1 > 3000) { firetime1 = timeGetTime(); bulletNum = 0; } } break; case 1: if(timeGetTime() - firetime1 > 100) { int spdx,spdy; do { spdx = rand()%9 - 4;} while( 0 == spdx ); do { spdy = rand()%9 - 4;} while( 0 == spdy ); firetime1 = timeGetTime(); new CEnemyBullet(m_win, m_ObList, posx+17, posy+60, spdx, spdy, 1); } break; case 2: if(timeGetTime() - firetime1 > 2000) { firetime1 = timeGetTime(); new CEnemyBullet(m_win, m_ObList, posx, posy, -2, -2, 4); new CEnemyBullet(m_win, m_ObList, posx+66, posy, 2, -2, 4); new CEnemyBullet(m_win, m_ObList, posx+33, posy, 0, -3, 4); new CEnemyBullet(m_win, m_ObList, posx, posy+38, -3, 0, 4); new CEnemyBullet(m_win, m_ObList, posx+66, posy+38, 3, 0, 4); new CEnemyBullet(m_win, m_ObList, posx, posy+76, -2, 2, 4); new CEnemyBullet(m_win, m_ObList, posx+33, posy+76, 0, 3, 4); new CEnemyBullet(m_win, m_ObList, posx+66, posy+76, 2, 2, 4); } break; case 3: if (bulletNum <= 10) { new CEnemyBullet(m_win, m_ObList, posx+52, posy+120, 0, 8, 0); bulletNum++; } else { if(timeGetTime() - firetime1 > 3000) { firetime1 = timeGetTime(); bulletNum = 0; } } if (timeGetTime() - firetime2 > 1000) { firetime2 = timeGetTime(); new CEnemyBullet(m_win, m_ObList, posx+52, posy+120, -3, 3, 4); new CEnemyBullet(m_win, m_ObList, posx+52, posy+120, -4, 0, 4); new CEnemyBullet(m_win, m_ObList, posx+52, posy+120, 0, 4, 4); new CEnemyBullet(m_win, m_ObList, posx+52, posy+120, 3, 3, 4); new CEnemyBullet(m_win, m_ObList, posx+52, posy+120, 4, 0, 4); } break; } } }