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