📄 fjmain.cpp
字号:
slug[i].y=-1000;
shot_down++;if(shot_down==pm){power=true;missile=true;pm+=pm2;}
wav_obj.PlaySound(FALSE, 2);
}
if(!m_l[i].die&&abs(m_l[i].x-ep[e].x-28)<30&&abs(m_l[i].y-ep[e].y-35)<30)
{
ep[e].die=TRUE;
m_l[i].die=true;
d_fire[e].init(ep[e].x,ep[e].y);
shot_down++;if(shot_down==pm){power=true;missile=true;pm+=pm2;}
wav_obj.PlaySound(FALSE, 2);
}
if(!m_r[i].die&&abs(m_r[i].x-ep[e].x-28)<30&&abs(m_r[i].y-ep[e].y-35)<30)
{
ep[e].die=TRUE;
m_r[i].die=true;
d_fire[e].init(ep[e].x,ep[e].y);
shot_down++;if(shot_down==pm){power=true;missile=true;pm+=pm2;}
wav_obj.PlaySound(FALSE, 2);
}
break;
}
}
}
//碰撞检测1结束
//碰撞检测2:自机和敌机及子弹的碰撞检测
for(e=0;e<MAXENEMY;e++)
{
if(ep[e].die==TRUE)continue;
if(!super&&!play_dead&&abs(play.x+23-e_slug[e].sx)<8&&abs(play.y+16-e_slug[e].sy)<15)
{
e_slug[e].flag=false;
e_slug[e].sy=-1000;
play_dead=TRUE;
}
switch(ep[e].type)
{
case 0://A10
if(!super&&!play_dead&&abs(play.x-ep[e].x)<30&&abs(play.y-ep[e].y)<50)
{
ep[e].die=TRUE;
d_fire[e].init(ep[e].x,ep[e].y);
slug[i].y=-1000;
shot_down++;
wav_obj.PlaySound(FALSE, 2);
play_dead=TRUE;
}
break;
case 1://small plane
if(!super&&!play_dead&&abs(play.x-ep[e].x)<25&&abs(play.y-ep[e].y)<50)
{
ep[e].die=TRUE;
d_fire[e].init(ep[e].x-5,ep[e].y-5);
slug[i].y=-1000;
shot_down++;
wav_obj.PlaySound(FALSE, 2);
play_dead=TRUE;
}
break;
case 2://red big
if(!super&&!play_dead&&abs(play.x-ep[e].x)<30&&abs(play.y-ep[e].y)<40)
{
ep[e].die=TRUE;
d_fire[e].init(ep[e].x+5,ep[e].y+5);
slug[i].y=-1000;
shot_down++;
wav_obj.PlaySound(FALSE, 2);
play_dead=TRUE;
}
break;
case 3://blue big
if(!super&&!play_dead&&abs(play.x-ep[e].x)<30&&abs(play.y-ep[e].y)<40)
{
ep[e].die=TRUE;
d_fire[e].init(ep[e].x+5,ep[e].y+5);
slug[i].y=-1000;
shot_down++;
wav_obj.PlaySound(FALSE, 2);
play_dead=TRUE;
}
break;
}
}
//碰撞检测2结束
//击落敌机数量的判定,出现POWER等
//if(shot_down==pm){power=true;missile=true;pm+=pm2;}
if(power)
{
if(!play_dead&&abs(play.x+21-power_x-6)<15&&abs(play.y+42-power_y)<20)
{
slug_delay-=30;
power=false;
power_x=100;
power_y=0;
}
draw_power();
}
if(missile)
{
if(!play_dead&&abs(play.x+21-m_x-6)<15&&abs(play.y+42-m_y)<20)
{
missile_num++;
if(missile_num>MAXSLUG)missile_num=MAXSLUG;
missile=false;
m_x=600;
m_y=0;
}
draw_missile();
}
if(shot_down>DOWN_MAX)
{
shot_down=0;
//game_over=TRUE;
p_speed=2;
enemy_over=true;
}
}
else
//**************BOSS function***************
{
if(!boss_music)
{
midi.Stop();
midi.ChangePlay("eva.mid");
boss_music=true;
}
boss.draw();
//BOSS和自机的碰撞检测
if(!boss.die&&!super&&!play_dead&&abs(play.x+23-boss.x-65)<70&&abs(play.y+42-boss.y-32)<30)
{
play_dead=true;
wav_obj.PlaySound(FALSE, 2);
}
//BOSS和自机的碰撞检测OVER
int e=0;
//*********************************
//Boss fire function
//*********************************
if(boss.fire&&!boss.die)//如果BOSS可以开火
{ //3组子弹的画出判定
if(b_l_slug[e].die&&b_m_slug[e].die&&b_r_slug[e].die)
{
b_l_slug[e].init(boss.x+30,boss.y+62);
b_m_slug[e].init(boss.x+56,boss.y+64);
b_r_slug[e].init(boss.x+83,boss.y+64);
}
if(b_l_slug[e+1].die&&b_m_slug[e+1].die&&b_r_slug[e+1].die&&(b_m_slug[e].y-boss.y)>100)
{
b_l_slug[e+1].init(boss.x+30,boss.y+62);
b_m_slug[e+1].init(boss.x+56,boss.y+64);
b_r_slug[e+1].init(boss.x+83,boss.y+64);
}
if(b_l_slug[e+2].die&&b_m_slug[e+2].die&&b_r_slug[e+2].die&&(b_m_slug[e].y-boss.y)>150)
{
b_l_slug[e+2].init(boss.x+30,boss.y+62);
b_m_slug[e+2].init(boss.x+56,boss.y+64);
b_r_slug[e+2].init(boss.x+83,boss.y+64);
}
//画出子弹并进行和自机的碰撞检测
for(e=0;e<3;e++)
{
b_l_slug[e].draw(0);
b_m_slug[e].draw(1);
b_r_slug[e].draw(2);
if(!super&&!play_dead&&abs(play.x+23-b_l_slug[e].x)<10&&abs(play.y+42-b_l_slug[e].y)<20)
{
b_l_slug[e].die=true;
play_dead=true;
wav_obj.PlaySound(FALSE, 2);
}
if(!super&&!play_dead&&abs(play.x+23-b_m_slug[e].x)<10&&abs(play.y+42-b_m_slug[e].y)<20)
{
b_m_slug[e].die=true;
play_dead=true;
wav_obj.PlaySound(FALSE, 2);
}
if(!super&&!play_dead&&abs(play.x+23-b_r_slug[e].x)<10&&abs(play.y+42-b_r_slug[e].y)<20)
{
b_r_slug[e].die=true;
play_dead=true;
wav_obj.PlaySound(FALSE, 2);
}
}
//BOSS 子弹和自机的碰撞检测OVER
}
//*************************************
//Boss fire function over..............
//*************************************
//自机发射的子弹和BOSS的碰撞检测
if(!boss.die)
{
for(int i=0;i<MAXSLUG;i++)
{
if(boss_hit_flame[i].die&&abs(slug[i].x-boss.x-50)<50&&(slug[i].y-boss.y-10)<30&&(slug[i].y>boss.y))
{
boss_hit_flame[i].init(slug[i].x,slug[i].y);
slug[i].y=-1000;
boss_hp--;
wav_obj.PlaySound(FALSE, 4);
}
boss_hit_flame[i].draw();
if(!m_l[i].die&&abs(m_l[i].x-boss.x-50)<50&&abs(m_l[i].y-boss.y-10)<30&&(m_l[i].y>boss.y))
{
m_l[i].die=true;
ml_fire[i].init(m_l[i].x,m_l[i].y);
boss_hp--;
wav_obj.PlaySound(FALSE, 2);
}
if(!m_r[i].die&&abs(m_r[i].x-boss.x-50)<50&&abs(m_r[i].y-boss.y-10)<30&&(m_r[i].y>boss.y))
{
m_r[i].die=true;
mr_fire[i].init(m_r[i].x,m_r[i].y);
boss_hp--;
wav_obj.PlaySound(FALSE, 2);
}
if(boss_hp<0)
{ boss_hp=0;
boss.die=true;
boss_dead_f[0].init(boss.x,boss.y);
boss_dead_f[1].init(boss.x+50,boss.y+5);
boss_dead_f[2].init(boss.x+80,boss.y);
boss_dead_f[3].init(boss.x+70,boss.y+30);
boss_dead_f[4].init(boss.x+30,boss.y+50);
}
ml_fire[i].draw_fire();
mr_fire[i].draw_fire();
}
}
else//绘制BOSS死时的火焰
{
for(int i=0;i<5;i++)
boss_dead_f[i].draw();
}
//自机发射的子弹和BOSS的碰撞检测OVER
}
//***************BOSS Function over********************
for(int i=0;i<MAXSLUG;i++)
{
m_l[i].draw();
m_r[i].draw();
}
//自机的出现及各项判定
if(play_dead)
{
slug_delay=SLUG_DELAY;
draw_play_dead(play.x,play.y);
if(play_num<0){game_over=TRUE;play_num=0;}
}
else
{
if(play_start)
{
play.x=344;play.y=364;
wav_obj.PlaySound(false,3);
draw_play_start();
}
else
{
if(super)
{
super_num++;
if (super_num>SUPER_TIME)
{
super=false;
}
}
draw_play(play.x,play.y,move_flag);
}
draw_slug();
draw_missile_num(missile_num);
}
//自机的出现及各项判定结束
//将BACK放入DX的BUF中。
GetRect(&rc1,50,50,640,480);
g_pDDSBack->BltFast(0,0,back,&rc1,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
//game loop over.
}
//****************************
// 画子弹
//****************************
void draw_slug()
{
for(int i=0;i<MAXSLUG;i++)
{
RECT rc;
GetRect(&rc,573,484,27,27);
back->BltFast(slug[i].x,slug[i].y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
slug[i].y-=20;
}
}
//****************************
//更新屏幕
void UpdateFrame(void )
{
HRESULT hRet;
HDC hdc;
char temp[256];
game_loop();
SetBkMode(hdc,TRANSPARENT);
SetTextColor(hdc,RGB(16,212,64));
g_pDDSBack->GetDC(&hdc);
sprintf(temp,"fps=%d",fps);
TextOut(hdc,0,0,temp,strlen(temp));
sprintf(temp,"delay=%d",speed);
TextOut(hdc,550,0,temp,strlen(temp));
sprintf(temp,"NUM=%d",play_num);
TextOut(hdc,0,40,temp,strlen(temp));
sprintf(temp,"boss hp=%d",boss_hp);
TextOut(hdc,0,80,temp,strlen(temp));
if(game_over)sprintf(temp,"shot down=MAX");
else sprintf(temp,"shot down=%d",shot_down);
TextOut(hdc,100,0,temp,strlen(temp));
if(game_over)
{
sprintf(temp,"GAME OVER");
TextOut(hdc,280,200,temp,strlen(temp));
sprintf(temp,"THANK YOU FOR PLAYING!");
TextOut(hdc,240,230,temp,strlen(temp));
sprintf(temp,"superdai@263.net");
TextOut(hdc,500,460,temp,strlen(temp));
}
if(wav_error)
{
sprintf(temp,"wav files open error!");
TextOut(hdc,300,0,temp,strlen(temp));
}
g_pDDSBack->ReleaseDC(hdc);
while (TRUE)
{
hRet = g_pDDSPrimary->Flip(NULL, DDFLIP_WAIT);
if(g_lpKey) g_lpKey->Acquire(); //Dinput Acquire
if (hRet == DD_OK)
break;
if (hRet == DDERR_SURFACELOST)
{
hRet = RestoreAll();
if (hRet != DD_OK)
break;
}
if (hRet != DDERR_WASSTILLDRAWING)
break;
}
}
bool d_time(int tt)
{
static newtime,oldtime=0;
newtime=GetTickCount();
if(newtime-oldtime>tt)
{
oldtime=newtime;
return TRUE;
}
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -