⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enemy.cpp

📁 经典飞机游戏的源代码 dx实现
💻 CPP
字号:
#include "fj.h"
#include "enemy.h"
#include <ddraw.h>
#include <time.h>

#define  ON    0
#define  OFF   1

extern LPDIRECTDRAWSURFACE4     g_pDDSBack; 
extern LPDIRECTDRAWSURFACE4     back;
extern LPDIRECTDRAWSURFACE4     Map;
extern void GetRect(RECT* rect, long left, long top, long width, long height);
extern bool game_over;

//将敌机的参数在INIT中写入
 void enemy::init(int e_x,int e_y,int e_speed,char t)
{
	 x=e_x;
     y=e_y;
    move_speed=e_speed;
    type=t;
	move_long=0;
	die=FALSE;
	if(x>370)move_way=LEFT;
	else
       move_way=RIGHT;
}

 //敌机随机移动
  void enemy::move()
  {  
	  int ran;
     srand((unsigned)time(NULL));//初始化随机数
     if(move_long==0)
	 {
	 ran=rand()%3;
     move_long=0;
	 }
	 y+=move_speed;//向下
	 if(y>530)die=TRUE;
     if(move_way==LEFT)//向左移动
	 { 
	  x+=move_long;
	  if(x>690)die=TRUE;
	 }
		 else//向右移动
		 {
       x-=move_long;
	  if(x<0)die=TRUE;
		 }
    
 }

 //画出敌机,不同的形象通过TYPE分辩。

void enemy::draw_plane()
{
  RECT rc;
  if(die==TRUE)return;
    switch(type)
  {
  case 0://green A10
	  GetRect(&rc,503,69,50,60);
	  back->BltFast(x,y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  
  break;
  case 1://small plane
      GetRect(&rc,511,147,35,35);
	  back->BltFast(x,y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  
	  break;
  case 2://red big plane
      GetRect(&rc,432,143,54,70);
	  back->BltFast(x,y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  
	  break;
  case 3://blue big plane
	  GetRect(&rc,432,289,54,70);
	  back->BltFast(x,y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  
	  break;
  }

}

void D_fire::init(int i_x,int i_y)
{
   x=i_x;
   y=i_y;
   flame=0;
   f_flag=TRUE;
}

void D_fire::draw_fire()
{
	RECT rc;
	if(f_flag==false)return;
    if(flame<7)GetRect(&rc,flame*48,573,49,49);
	else
    GetRect(&rc,(flame-7)*48,621,49,49);
	flame++;
	if(flame>13){flame=0;f_flag=false;}
   	back->BltFast(x,y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  
}

  void enemy_slug::init(int x,int y,int p_x,int p_y)
{
   sx=x;
   sy=y;
   px=p_x;
   py=p_y;
   flag=true;
   if(sy<p_y&&sx<px)
   {
	   flag=TRUE;
	   c=rand()%3;
   }
   if(sy<p_y&&sx>px)
   {
	   flag=TRUE;
	   c=-rand()%3;
   }
}
 
 void enemy_slug::draw()
{
    RECT rc;
	if(!flag){return;}
	GetRect(&rc,557,486,8,8);
	sx=sx+c;
	sy+=6;
	if(sy>530){flag=false;sy=0;return;}
    back->BltFast(sx,sy,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  
}

 void BOSS::init()
 {
	 x=275;
	 y=30;
	 f=0;
	 die=false;
	 fire=false;
	 ll=0;
 }
 
 void BOSS::draw()
 {
	 RECT rc,f1,f2;
	 if(y<180){y+=2;fire=true;}
	 GetRect(&rc,503,286,130,64);
	 f++;
	 if(f>2)f=0;
  
  if(!die)
  {
	 if(ll==0)
	{
		x+=3;
		if(x>580)ll=1;
	}
	else
	{
	   x-=3;
	   if(x<50)ll=0;
	}  
  
  }
else
{
   y+=2;
   if(y>550)game_over=true;
}
  
	 switch(f)
	 {
	 case 0:
		 GetRect(&f1,551,262,10,13);
	     GetRect(&f2,551,262,10,13);
  back->BltFast(x+46,y-8,Map,&f1,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	 
  back->BltFast(x+72,y-8,Map,&f2,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	 
		 break;
	 case 1:
		 GetRect(&f1,563,258,10,17);
	     GetRect(&f2,563,258,10,17);
  back->BltFast(x+46,y-12,Map,&f1,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	 
  back->BltFast(x+72,y-12,Map,&f2,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	 
		 break;
	 case 2:
		 GetRect(&f1,583,249,10,26);
	     GetRect(&f2,583,249,10,26);
  back->BltFast(x+46,y-21,Map,&f1,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	 
  back->BltFast(x+72,y-21,Map,&f2,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	 
		 break;
	 }
     
  back->BltFast(x,y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	 
    
 }

 void boss_slug::init(int cx,int cy)
 {
   x=cx;
   y=cy;
   die=false;
 }

 void boss_slug::draw(int t)
 {  
	 RECT rc;
     if(die)return;
	 switch(t)
	{
	case 0://left
		x-=6;
		y+=6;
		if(x<50){die=true;return;}
		GetRect(&rc,480,585,21,23);
back->BltFast(x,y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	 
		break;
	case 1://mid
		y+=6;
		if(y>530){die=true;return;}
		GetRect(&rc,507,586,12,23);
back->BltFast(x,y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	 
		break;
	case 2://right
		x+=6;
		y+=6;
		if(x>690){die=true;return;}
		GetRect(&rc,524,588,21,20);
back->BltFast(x,y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	 
		break;
	}
 }

 void BOSS_HIT_FLAME::init(int cx,int cy)
 {
  x=cx;
  y=cy;
  f=0;
  die=false;
 }
 
 void BOSS_HIT_FLAME::draw()
 {
    RECT rc;
	if(die)return;
	f++;
	if(f>4){die=true;f=0;return;}
    GetRect(&rc,342+f*25,587,26,26); 
    back->BltFast(x,y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	  
 }

 void BOSS_DEAD_FLAME::init(int cx,int cy)
 {
   x=cx;
   y=cy;
   f=0;
 }
 
 void BOSS_DEAD_FLAME::draw()
 {
	 RECT rc;
	 f++;
	 if(f>9)f=0;
     GetRect(&rc,f*54,523,54,50);
	 y+=2;
  back->BltFast(x,y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);  	  
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -