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

📄 gameobject.h

📁 一个类似于街机的小游戏
💻 H
📖 第 1 页 / 共 5 页
字号:
							Yellow[i].varsI[5]=operand4;
						}
						break;
					case GO_10:
						{
							Set_Vel_BOB(&Yellow[i],-3,3);
							Set_Animation_BOB(&Yellow[i],opcode4);
							Yellow[i].varsI[5]=operand4;
						}
						break;
					case GO_9:
						{
							Set_Vel_BOB(&Yellow[i],-3,3);
							Set_Animation_BOB(&Yellow[i],opcode4);
							Yellow[i].varsI[5]=operand4;
						}
						break;
					case GO_8:
						{
							Set_Vel_BOB(&Yellow[i],0,3);
							Set_Animation_BOB(&Yellow[i],opcode4);
							Yellow[i].varsI[5]=operand4;
						}
						break;
					case GO_7:
						{
							Set_Vel_BOB(&Yellow[i],3,3);
							Set_Animation_BOB(&Yellow[i],opcode4);
							Yellow[i].varsI[5]=operand4;
						}
						break;
					case GO_6:
						{
							Set_Vel_BOB(&Yellow[i],3,3);
							Set_Animation_BOB(&Yellow[i],opcode4);
							Yellow[i].varsI[5]=operand4;
						}
						break;
					case GO_5:
						{
							Set_Vel_BOB(&Yellow[i],3,3);
							Set_Animation_BOB(&Yellow[i],opcode4);
							Yellow[i].varsI[5]=operand4;
						}
						break;
					case Next_GO_4:
						{
							Set_Vel_BOB(&Yellow[i],4,0);
							Set_Animation_BOB(&Yellow[i],4);
							Yellow[i].varsI[5]=operand4;
						}
                        break;
					case STOP:
						{
							Hide_BOB(&Yellow[i]);
							Yellow_state[i]=DEAD;
						}
					}//end switch
				}//end Yellow[i].varsI[5]<=0
			}//end Yellow[i].varsI[3]==4
		
////////////////////////////////////////////////////////
//////////////这里就将根据输入的哪种模式而选用不同的代码 下面是碰撞测试
            /////与玩家子弹进行碰撞测试
			for(int j=0;j<MAX_NUM_MYZIDAN;j++)
			{
				if(Myzidan_state[j]==ALIVE)
				{
					if(Collision_Test(Myzidan[j].x,Myzidan[j].y,15,13,Yellow[i].x+10,Yellow[i].y+10,50,47))
					{
						Set_Animation_BOB(&Myzidan[j],7);

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

		                if(Yellow[i].varsI[0]<=0)
						{
							Set_Animation_BOB(&Yellow[i],16);
						}
					}
				}
			}//end 和玩家子弹碰撞测试
		  /////////与玩家导弹进行碰撞测试
			for(int k=0;k<MAX_NUM_DAODAN;k++)
			{
				if(Daodan_state[k]==ALIVE)
				{
					if(Collision_Test(Daodan[k].x,Daodan[k].y,19,23,Yellow[i].x+10,Yellow[i].y+10,50,47))
					{
						Set_Animation_BOB(&Daodan[k],16);

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

						if(Yellow[i].varsI[0]<=0)
						{
							Set_Animation_BOB(&Yellow[i],16);
						}
					}
				}
			}//end 和玩家的导弹进行碰撞测试
           if(Yellow[i].x < 130 || Yellow[i].x > 650)
		   {
			   RESET_BIT(Yellow[i].attr,BOB_ATTR_VISIBLE);
		   }
		   else 
		   {
			   SET_BIT(Yellow[i].attr,BOB_ATTR_VISIBLE);
		   }
		 
          Yellow[i].x+=Yellow[i].xv;
		  Yellow[i].y+=Yellow[i].yv;
		   
		  Yellow_pos[i].x=Yellow[i].x;
		  Yellow_pos[i].y=Yellow[i].y;
		}//end if 黄色飞机是活的
	}//end for 遍历黄色飞机
	
  return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//////检测黄色飞机是否出界或者Yellow[i].curr_animation==16爆炸模式。。
int Check_Yellow()
{
	for(int i=0;i<MAX_NUM_YELLOW; i++)
	{
		if(Yellow_state[i]==ALIVE)
		{
			if(Yellow[i].curr_animation==16)         //爆炸模式
			{
				if(++Yellow[i].varsI[1]>6)
				{

					if(rand()%6==2)
					{
				       Start_Baowu(Yellow[i].x+35,Yellow[i].y+28);
					}

				 	Hide_BOB(&Yellow[i]);

					Yellow_state[i]=DEAD;

					Player_sorce+=Sorce_from_yellow;
				}
			}
		}
	}
	return 1;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
////
int Delete_Yellow()
{
	for(int i=0; i<MAX_NUM_YELLOW; i++)
	{
		Destroy_BOB(&Yellow[i]);
	}
	return 1;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
////
int Draw_Yellow()
{
	for(int i=0; i<MAX_NUM_YELLOW; i++)
	{
		if(Yellow_state[i]==ALIVE)
		{
			Draw_BOB(&Yellow[i],lpddsback);          ///如果可见就渲染。。

			Animate_BOB(&Yellow[i]);                 ///寻找下一帧
		}
	}
	return 1;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////




///////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////兰色飞机
int Init_Blue()
{
	static int blue_anim_mode0[4]={3,2,1,0},blue_anim_mode1[4]={3,4,5,6},blue_anim_mode2[2]={7,8};

    int i;

	Create_BOB(&Blue[0],0,0,70,57,9,BOB_ATTR_MULTI_ANIM | BOB_ATTR_ANIM_ONE_SHOT,DDSCAPS_VIDEOMEMORY,255,8);

    Load_Bitmap_File(&bitmap8bit,"blueplane.bmp");
    
	for(i=0;i<9;i++)
	{

	Load_Frame_BOB(&Blue[0],&bitmap8bit,i,i,0,BITMAP_EXTRACT_MODE_CELL);

	}

	Unload_Bitmap_File(&bitmap8bit);

	Load_Animation_BOB(&Blue[0],0,4,blue_anim_mode0);
	Load_Animation_BOB(&Blue[0],1,4,blue_anim_mode1);
	Load_Animation_BOB(&Blue[0],2,2,blue_anim_mode2);
	///////////////////////////////////////////////////////////////////
	for(i=0;i<MAX_NUM_BLUE;i++)
	{
	  Blue_state[i]=DEAD;                        //状态设为死的
	}

	Blue[0].varsI[0]=100;                      //血设为满的
	
	Blue[0].varsI[1]= 0;                       //这个是用来记录爆炸时间的

	Set_Anim_Speed_BOB(&Blue[0],3);            //设置动画速度 。。如果以后的动画速度一直不变的话 就在初始化的时候设置  卫星?蓝色飞机?

	Set_Vel_BOB(&Blue[0],0,11);                //设置初始速度,一直向下跑的。 

	Set_Animation_BOB(&Blue[0],0);             //动画初始模式为左倾。。
    
	for(i=1;i<MAX_NUM_BLUE;i++)
	{
		Clone_BOB(&Blue[0],&Blue[i]);
	}
	//浅拷贝。。
	return 1;
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
int Check_Blue()                        //检测它是否爆炸或者是否超过了底线?
{
	for(int i=0;i<MAX_NUM_BLUE;i++)      //
	{
	  if(Blue_state[i]==ALIVE)
	  {

		if(Blue[i].curr_animation==2)         ///这里是因为爆炸而消失
		{
			if(++Blue[i].varsI[1]>7)         //这里varsI[1]存放了爆炸持续的时间??然后就让它消失?
			{

				if(rand()%4==2)
				{
				     Start_Baowu(Blue[i].x+35,Blue[i].y+28);
				}
				Hide_BOB(&Blue[i]);

				Blue_state[i]=DEAD;

				Player_sorce+=Sorce_from_blue;
			}
		}
		else if(Blue[i].y > 480)                //因为越过边界而消失
		{
			Hide_BOB(&Blue[i]);

			Blue_state[i]=DEAD;
		}

	  }
	}
	return 1;
}

///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//////移动蓝色飞机
int Move_Blue()
{
	for(int i=0;i<MAX_NUM_BLUE;i++)
	{
		if(Blue_state[i]==ALIVE && Blue[i].curr_animation!=2)
		{
          if(Blue[i].y < Player.y)
		  {
			if(Blue[i].x>Player.x) 
			{
				Set_Animation_BOB(&Blue[i],0);

				Blue[i].xv=-2;
			}
			else if(Blue[i].x<=Player.x)
			{
			  if(Blue[i].x<Player.x)
			  {
				  Blue[i].xv=2;
				  
			  }
				Set_Animation_BOB(&Blue[i],1);			
			}
		 } //end if blue[i].u< Player.y

			Blue[i].x+=Blue[i].xv;
			Blue[i].y+=Blue[i].yv;

			if(++Blue[i].varsI[2]==10)        ///这里的varsI存放了发射子弹时间 这样就只会放一个子弹了
			{
				//放子弹
				Start_Enemyzidan_Blue_And_Yellow(Blue[i].x+35,Blue[i].y+10);
			}
  
	              //与玩家子弹进行碰撞测试。
	    	for(int j=0;j<MAX_NUM_MYZIDAN;j++)
	    	{
		      if(Myzidan_state[j]==ALIVE)
		    	 {
			 //进行和玩家子弹的碰撞测试
			    	if(Collision_Test(Blue[i].x+18,Blue[i].y+5,32,57,Myzidan[j].x,Myzidan[j].y,15,13))
			    	{
						Set_Animation_BOB(&Myzidan[j],7);   //玩家子弹爆炸

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

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

						}
			    	}
				}
			}//end for
		    //与玩家导弹进行碰撞测试。
	    	for(int k=0;k<MAX_NUM_DAODAN;k++)
	    	{
				if(Daodan_state[k]==ALIVE)
		    	{
				//进行和玩家导弹的碰撞测试
			    	if(Collision_Test(Blue[i].x+18,Blue[i].y+5,32,57,Daodan[k].x,Daodan[k].y,23,19))
			    	{

						Set_Animation_BOB(&Daodan[k],16); //设置导弹为爆炸模式 //这里已经将它设置成了爆炸了啊 然后在检测的时候会。
                          
						Blue[i].varsI[0]-=Daodan_dam;

						if(Blue[i].varsI[0]<=0)
						{
							Set_Animation_BOB(&Blue[i],2);  //兰色飞机的血小于0就设置为爆炸模式。。
						}
			    	}
				}
			}//end for
						        	
	    //记录活的兰色飞机的位置
			Blue_pos[i].x=Blue[i].x;
			Blue_pos[i].y=Blue[i].y;

		}//end if alive
	}//end for
	return 1;
}
/////////////////////////////////////////////////////////////激活一个蓝色飞机
int Start_Blue(int x,int y) 
{
	for(int i=0;i<MAX_NUM_BLUE; i++)
	{
		if(Blue_state[i]==DEAD)
		{
			Blue_state[i]=ALIVE;                 //状态设为活的

			Show_BOB(&Blue[i]);                  //设为可见的

			Blue[i].varsI[1]=0;                  //爆炸的时间?

			Blue[i].varsI[0]=Blood_Blue;                 //满血

			Set_Pos_BOB(&Blue[i],x,y);            //自动控制出现位置

			Set_Animation_BOB(&Blue[i],0);        //设置动画模式  因为只有那么16个可用 在爆炸或者超过底线后动画模式已经变了 为什么会出现最后残余的爆炸??

			Blue[i].varsI[2]=0;                   //放子弹的帧数


			break;
		}
	}
	return 1;
}
///////////////////////////////////////////////////////////////////
////////////这个Delete应该没有错////////////////////////////////////
int Delete_Blue()
{
   for(int i=0;i<MAX_NUM_BLUE;i++)
   {
	   Destroy_BOB(&Blue[i]);
   }
   return 1;
}
///////////////////////////////////////////////////////////////
///渲染蓝色的飞机//这里没什么问题
int Draw_Blue()
{
	for(int i=0;i<MAX_NUM_BLUE;i++)
	{
		Draw_BOB(&Blue[i],lpddsback);      //这里就检查了是否可见

		Animate_BOB(&Blue[i]);             //寻找下一帧。怎么找不到呢??
	}
  return 1;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int Init_Weixing()
{
	int i;

    static int weixing_anim_mode0[12]={0,1,2,3,4,5,6,7,8,9,10,11},weixing_anim_mode1[4]={12,13,14,15};

	Create_BOB(&Weixing[0],0,0,91,80,16,BOB_ATTR_MULTI_ANIM | BOB_ATTR_BOUNCE,DDSCAPS_VIDEOMEMORY,255,8);

    Load_Bitmap_File(&bitmap8bit,"weixing.bmp");
	///////旋转的位图
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,0,0,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,1,1,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,2,2,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,3,3,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,4,0,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,5,1,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,6,2,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,7,3,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,8,0,2,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,9,1,2,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,10,2,2,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,11,3,2,BITMAP_EXTRACT_MODE_CELL);
	////爆炸的位图
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,12,0,3,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,13,1,3,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,14,2,3,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Weixing[0],&bitmap8bit,15,3,3,BITMAP_EXTRACT_MODE_CELL);

    Unload_Bitmap_File(&bitmap8bit);
    ///////////////////////////////////////////////////////////
	/////////加载指令集
    Load_Animation_BOB(&Weixing[0],0,12,weixing_anim_mode0);       //旋转
	Load_Animation_BOB(&Weixing[0],1,4,weixing_anim_mode1);        //爆炸
	///////////////////////////////////////////////////////////////
	for(i=0;i<MAX_NUM_WEIXING;i++)
	{
	  Weixing_state[i]=DEAD;                               //状态为死的
	}

	Weixing[0].varsI[1]=0;                               //爆炸持续时间
    
	Set_Animation_BOB(&Weixing[0],0);                    //动画模式初始为旋转

	Set_Anim_Speed_BOB(&Weixing[0],1);                   //动画切换帧速度

	Set_Vel_BOB(&Weixing[0],0,2);                        //在刚开始的时候卫星是向下运动的 然后过了y=0时 就开始随机运动了

	///////////////////////浅拷贝
	for(i=1;i<MAX_NUM_WEIXING;i++)
	{
		Clone_BOB(&Weixing[0],&Weixing[i]);
	}
    

⌨️ 快捷键说明

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