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

📄 fjmain.cpp

📁 经典飞机游戏的源代码 dx实现
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		   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 + -