📄 enemy.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 + -