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

📄 gameobject.h

📁 一个类似于街机的小游戏
💻 H
📖 第 1 页 / 共 5 页
字号:
    return 1;
}
//////////////////////////////////////////////////////////////
//////////移动卫星/////////////////////////////////////////////////////
int Move_Weixing()
{
	for(int i=0;i<MAX_NUM_WEIXING;i++)
	{
		if(Weixing_state[i]==ALIVE)
		{		 
			    
				if(Weixing[i].y > 0)        //当卫星路出来的时候就开始随机运动了
				{			
	             	
             	 if(Weixing[i].x < 160 || Weixing[i].x > 550)  Weixing[i].xv=-Weixing[i].xv;
		    	 if(Weixing[i].y > 180)  Weixing[i].yv=-Weixing[i].yv;

	             Weixing[i].counter_1=1;
				}

				if(Weixing[i].counter_1)
				{
                  if(Weixing[i].y < 0 ) Weixing[i].yv=-Weixing[i].yv;
				}
				

		       Weixing[i].x+=Weixing[i].xv;  //改变位置
			   Weixing[i].y+=Weixing[i].yv;

			
           //////////////////////////////////////////////是否越过边界
		
			if(rand()% 80 ==8 || Weixing[i].x==Player.x)    //每秒 1/2的机会发射子弹 还有当它的坐标和玩家相同时
			{
				Start_Enemyzidan_Weixing(Weixing[i].x,Weixing[i].y);
			}
		    //这里要和子弹进行碰撞测试
			for(int k=0; k<MAX_NUM_MYZIDAN; k++)
			{
				if(Myzidan_state[k]==ALIVE)
				{
					if(Collision_Test(Weixing[i].x+18,Weixing[i].y+18,56,50,Myzidan[k].x,Myzidan[k].y,15,13))
					{
						Set_Animation_BOB(&Myzidan[k],7);

						Weixing[i].varsI[0]-=Myzidan_dam;

						if(Weixing[i].varsI[0] <= 0)
						{
							Set_Animation_BOB(&Weixing[i],1);
						}
					}
				}
			}
            //和导弹
			for(int j=0;j<MAX_NUM_DAODAN; j++)
			{
				if(Daodan_state[j]==ALIVE)
				{
					if(Collision_Test(Weixing[i].x+18,Weixing[i].y+18,56,50,Daodan[j].x,Daodan[j].y,19,23))
					{
						Set_Animation_BOB(&Daodan[j],16);

						Weixing[i].varsI[0]-=Daodan_dam;

						if(Weixing[i].varsI[0]<=0)
						{							
							Set_Animation_BOB(&Weixing[i],1);

						}
					}
				}
			}
			Weixing_pos[i].x=Weixing[i].x;
			Weixing_pos[i].y=Weixing[i].y;
		}
	}
	return 1;
}

/////////////////////////////////////////////////////////////////////////////////////////

int Start_Weixing(int x,int y,int vx,int vy)  //这里的x,y就是我们自己要把他放哪 随自己高兴撒 还有速度
{
    //只找一个吧??
	for(int i=0; i<MAX_NUM_WEIXING;i++)
	{
		if(Weixing_state[i]==DEAD)
		{
			Weixing_state[i]=ALIVE;                   //状态设为活的
            
			Weixing[i].varsI[1]=0;                    //爆炸持续时间

			Weixing[i].varsI[0]=Blood_Weixing;                   //血设为满的。

			Weixing[i].counter_1=0;                   //反蛋标志

			Set_Pos_BOB(&Weixing[i],x,y);             //设置出现位置

			Set_Animation_BOB(&Weixing[i],0);         //动画模式为旋转
			
			Weixing[i].xv=vx;                   //X方向速度

			Weixing[i].yv=vy;                   //Y方向速度
 
			Show_BOB(&Weixing[i]);                    //设置为可见 在渲染Draw的时候做检测用

		   break;
		}
	}
	return 1;
}

int Check_Weixing()                     //检测是否已经爆炸。。
{
   for(int i=0;i<MAX_NUM_WEIXING;i++)
   { 
	  if(Weixing_state[i]==ALIVE)
	  {
	     if(Weixing[i].curr_animation==1)      //爆炸了。。。
		 {
		   if(++Weixing[i].varsI[1] > 6)
		   {
			   if(rand()%2)
			   {
				 Start_Baowu(Weixing[i].x+45,Weixing[i].y+40);
			   }
			   Hide_BOB(&Weixing[i]);   //设为不可见

			   Weixing_state[i]=DEAD;           //状态设为死的

			   Player_sorce+=Sorce_from_weixing;

             //////////////////////////////////////////////////////////////////////////
		   }
		 }
	  }
   }
   return 1;
}
//////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
///渲染卫星。。。。
int Draw_Weixing()
{
   for(int i=0;i<MAX_NUM_WEIXING;i++)
   {
	 Draw_BOB(&Weixing[i],lpddsback);  //可见就渲染

	 Animate_BOB(&Weixing[i]);         //寻找下一帧
   }
   return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
///////////Delete函数没有错。。//////////////////////////////////////////////////////////////////////
int Delete_Weixing()
{
	for(int i=0;i<MAX_NUM_WEIXING;i++)
	{
		Destroy_BOB(&Weixing[i]);
	}
	return 1;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////玩家子弹
int Init_Myzidan()
{
	static int myzidan_anim_mode0[1]={0},myzidan_anim_mode1[1]={1},myzidan_anim_mode2[1]={2},myzidan_anim_mode3[1]={3};
	static int myzidan_anim_mode4[1]={4},myzidan_anim_mode5[1]={5},myzidan_anim_mode6[1]={6},myzidan_anim_mode7[1]={7};
	//第8个是爆炸模式。。
	Create_BOB(&Myzidan[0],0,0,15,13,8,BOB_ATTR_MULTI_ANIM ,DDSCAPS_VIDEOMEMORY,255,8);

	Load_Bitmap_File(&bitmap8bit,"myzidan.bmp");

	for(int i=0;i<8;i++)
	{
		Load_Frame_BOB(&Myzidan[0],&bitmap8bit,i,i,0,BITMAP_EXTRACT_MODE_CELL);
	}
	Load_Animation_BOB(&Myzidan[0],0,1,myzidan_anim_mode0);
	Load_Animation_BOB(&Myzidan[0],1,1,myzidan_anim_mode1);
	Load_Animation_BOB(&Myzidan[0],2,1,myzidan_anim_mode2);
	Load_Animation_BOB(&Myzidan[0],3,1,myzidan_anim_mode3);
	Load_Animation_BOB(&Myzidan[0],4,1,myzidan_anim_mode4);
	Load_Animation_BOB(&Myzidan[0],5,1,myzidan_anim_mode5);
	Load_Animation_BOB(&Myzidan[0],6,1,myzidan_anim_mode6);
	Load_Animation_BOB(&Myzidan[0],7,1,myzidan_anim_mode7);

	for(int k=0;k<MAX_NUM_MYZIDAN;k++)
	{
	 Myzidan_state[k]=DEAD;
	}
	
	Myzidan[0].varsI[1]=0;         //爆炸持续时间

	for(int j=1;j<MAX_NUM_MYZIDAN;j++)
	{
	  Clone_BOB(&Myzidan[0],&Myzidan[j]);
	}
  return 1;
}////////end Init_Myzidan

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
inline int Start_Myzidan(int x,int y,int z)   
{
	for(int i=0;i<MAX_NUM_MYZIDAN ;i++)
	{
		if(Myzidan_state[i]==DEAD)
		{
			Myzidan_state[i]=ALIVE;            //状态为活的

			Myzidan[i].varsI[1]=0;             //子弹爆炸持续时间

			Set_Animation_BOB(&Myzidan[i],1);
			
			Show_BOB(&Myzidan[i]);

			Set_Pos_BOB(&Myzidan[i],x,y);

				if(z==0)
						{
							Set_Vel_BOB(&Myzidan[i],-6,Myzidan_speed_y);
							
							Set_Animation_BOB(&Myzidan[i],z);
						}
						else if(z==1)
						{
							Set_Vel_BOB(&Myzidan[i],-4,Myzidan_speed_y);
			
						    Set_Animation_BOB(&Myzidan[i],z);
						}
						else if(z==2)
						{
							Set_Vel_BOB(&Myzidan[i],-2,Myzidan_speed_y);
			
						    Set_Animation_BOB(&Myzidan[i],z);
						}
						else if(z==3)
						{
							Set_Vel_BOB(&Myzidan[i],0,Myzidan_speed_y);
			
						    Set_Animation_BOB(&Myzidan[i],z);
						}
						else if(z==4)
						{
							Set_Vel_BOB(&Myzidan[i],2,Myzidan_speed_y);
			
							  Set_Animation_BOB(&Myzidan[i],z);
						}
						else if(z==5)
						{
							Set_Vel_BOB(&Myzidan[i],4,Myzidan_speed_y);
			
						    Set_Animation_BOB(&Myzidan[i],z);
						}
						else if(z==6)
						{
							Set_Vel_BOB(&Myzidan[i],6,Myzidan_speed_y);
			
						    Set_Animation_BOB(&Myzidan[i],z);
						}
                       break;
		}
	}
	return 1;
}//end Start_Myzidan
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////
int Move_Myzidan()
{
	for(int i=0; i<MAX_NUM_MYZIDAN; i++)
	{
		if(Myzidan_state[i]==ALIVE)
		{
		     Myzidan[i].x+=Myzidan[i].xv;

			 Myzidan[i].y+=Myzidan[i].yv;
		}
	}
	return 1;
}//end Move_Myzidan
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////检测子弹是否爆炸。。
int Check_Myzidan()
{
	for(int i=0;i<MAX_NUM_MYZIDAN; i++)
	{
		if(Myzidan_state[i]==ALIVE)
		{
			if(Myzidan[i].curr_animation==7)
			{
				if(++Myzidan[i].varsI[1] > 1)
				{
                     Hide_BOB(&Myzidan[i]);

					 Myzidan_state[i]=DEAD;
				}
			}
	   	    if(Myzidan[i].x < 160 || Myzidan[i].x > 640 || Myzidan[i].y < 0)
			{
			  Hide_BOB(&Myzidan[i]);

			  Myzidan_state[i]=DEAD;
			}
		}
	}
	return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///应该没有错吧??
int Draw_Myzidan()
{
	for(int i=0; i<MAX_NUM_MYZIDAN; i++)
	{
		if(Myzidan_state[i]==ALIVE)
		{
			Draw_BOB(&Myzidan[i],lpddsback);    //渲染当前帧的子弹

			Animate_BOB(&Myzidan[i]);            //寻找下一帧
		}
	}
	return 1;
}///end Draw_Myzidan
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///应该没有错吧??
int Delete_Myzidan()
{
	for(int i=0; i<MAX_NUM_MYZIDAN; i++)
	{
		Destroy_BOB(&Myzidan[i]);
	}
	return 1;
}//end delete

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////导弹
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////导弹
int Init_Daodan()
{
	static int daodan_anim_mode0[1]={0},daodan_anim_mode1[1]={1},daodan_anim_mode2[1]={2},daodan_anim_mode3[1]={3};
	static int daodan_anim_mode4[1]={4},daodan_anim_mode5[1]={5},daodan_anim_mode6[1]={6},daodan_anim_mode7[1]={7};
	static int daodan_anim_mode8[1]={8},daodan_anim_mode9[1]={9},daodan_anim_mode10[1]={10},daodan_anim_mode11[1]={11};
	static int daodan_anim_mode12[1]={12},daodan_anim_mode13[1]={13},daodan_anim_mode14[1]={14},daodan_anim_mode15[1]={15};
	static int daodan_anim_mode16[1]={16};

	Create_BOB(&Daodan[0],0,0,23,19,17,BOB_ATTR_MULTI_ANIM,DDSCAPS_VIDEOMEMORY,255,8);  //类型是单帧的

	Load_Bitmap_File(&bitmap8bit,"daodan.bmp");
	/////////////////载入位图。。。
	for(int i=0;i<17; i++)
	{
	    Load_Frame_BOB(&Daodan[0],&bitmap8bit,i,i,0,BITMAP_EXTRACT_MODE_CELL);
	}
	//加载指令  有17个  最后一个是爆炸的。。
	Load_Animation_BOB(&Daodan[0],0,1,daodan_anim_mode0);
	Load_Animation_BOB(&Daodan[0],1,1,daodan_anim_mode1);
    Load_Animation_BOB(&Daodan[0],2,1,daodan_anim_mode2);
	Load_Animation_BOB(&Daodan[0],3,1,daodan_anim_mode3);
	Load_Animation_BOB(&Daodan[0],4,1,daodan_anim_mode4);
	Load_Animation_BOB(&Daodan[0],5,1,daodan_anim_mode5);
	Load_Animation_BOB(&Daodan[0],6,1,daodan_anim_mode6);
	Load_Animation_BOB(&Daodan[0],7,1,daodan_anim_mode7);
	Load_Animation_BOB(&Daodan[0],8,1,daodan_anim_mode8);
	Load_Animation_BOB(&Daodan[0],9,1,daodan_anim_mode9);
	Load_Animation_BOB(&Daodan[0],10,1,daodan_anim_mode10);
	Load_Animation_BOB(&Daodan[0],11,1,daodan_anim_mode11);
	Load_Animation_BOB(&Daodan[0],12,1,daodan_anim_mode12);
	Load_Animation_BOB(&Daodan[0],13,1,daodan_anim_mode13);
	Load_Animation_BOB(&Daodan[0],14,1,daodan_anim_mode14);
	Load_Animation_BOB(&Daodan[0],15,1,daodan_anim_mode15);
	Load_Animation_BOB(&Daodan[0],16,1,daodan_anim_mode16);

	for(i=0;i<MAX_NUM_DAODAN ;i++)
	{
		Daodan_state[i]=DEAD;
	}
          

    Daodan[0].varsI[1]=0;               //爆炸持续时间

	Set_Anim_Speed_BOB(&Daodan[0],1);   //位图切换速度。。
	
   //浅拷贝
	for(i=1;i<MAX_NUM_DAODAN;i++)
	{
		Clone_BOB(&Daodan[0],&Daodan[i]);
	}
	return 1;
}///end init_daodan
////////////////////////////////////////////////////////////////////////////
///////////自动寻找最近的敌人 并切换位图
int Move_Daodan()
{
	for(int i=0;i<MAX_NUM_DAODAN;i++)
	{
		if(Daodan_state[i]==ALIVE)
		{
			
			int dx=0,dy=0,dx1=0,dy1=0,dx2=0,dy2=0,length,length1,length2;          //dx,dy表示矢量增量 

			int yellow_min=60000,blue_min=60000,boss_min=60000,weixing_min=60000;

			int yellow_mindx,yellow_mindy;

			int blue_mindx,blue_mindy;

			int boss_mindx,boss_mindy;

			int weixing_mindx,weixing_mindy;

			//查询黄色飞机中离导弹最近的。
            for(int yellow=0;yellow<MAX_NUM_YELLOW;yellow++)
			{
				int yellow_dx,yellow_dy,yellow_length;

				if(Yellow_state[yellow]==ALIVE)
				{
                  yellow_dx=Yellow[yellow].x-Daodan[i].x+35;

				  yellow_dy=Yellow[yellow].y-Daodan[i].y+29;

				  yellow_length=Fast_Distance_2D(yellow_dx,yellow_dy);

				  if(yellow_length<yellow_min)
				  {
					  yellow_min=yellow_length;

					  yellow_mindx=yellow_dx;
					  yellow_mindy=yellow_dy;
				  }
				}
			}
//////查询蓝色飞机中离导弹最近的。/////////////////////////////////////////////////////
			for(int blue=0;blue<MAX_NUM_BLUE;blue++)
			{
				int blue_dx,blue_dy,blue_length;
				
				if(Blue_state[blue]==ALIVE)
				{
					blue_dx=Blue[blue].x-Daodan[i].x+35;
					blue_dy=Blue[blue].y-Daodan[i].y+29;

					blue_length=Fast_Distance_2D(blue_dx,blue_dy);

					if(blue_length < blue_min)
					{
						blue_min=blue_length;

⌨️ 快捷键说明

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