📄 gameobject.h
字号:
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 + -