📄 gameobject.h
字号:
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#include <io.h>
#include <fcntl.h>
#include "T3DLIB1.h"
#include "T3DLIB2.h"
#include "all.h"
////////////////////////////////////
int Init_Player()
{
//定义动画模式
static int player_anim_mode0[4]={1,0,2,3},player_anim_mode1[4]={5,6,4,3},player_anim_mode2[3]={7,8,9},player_anim_mode3[3]={10,11,12},player_anim_mode4[1]={3};
Create_BOB(&Player,0,0,60,52,13,BOB_ATTR_MULTI_ANIM | BOB_ATTR_ANIM_ONE_SHOT,DDSCAPS_VIDEOMEMORY,255,8);
Load_Bitmap_File(&bitmap8bit,"player.bmp");
// 加载位图
Load_Frame_BOB(&Player,&bitmap8bit,0,0,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,1,1,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,2,2,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,3,3,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,4,4,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,5,5,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,6,6,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,7,0,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,8,1,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,9,2,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,10,3,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,11,4,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Player,&bitmap8bit,12,5,1,BITMAP_EXTRACT_MODE_CELL);
Unload_Bitmap_File(&bitmap8bit);
//加载动画指令
Load_Animation_BOB(&Player,0,4,player_anim_mode0); //左倾
Load_Animation_BOB(&Player,1,4,player_anim_mode1); //右倾
Load_Animation_BOB(&Player,2,3,player_anim_mode2); //中蛋
Load_Animation_BOB(&Player,3,3,player_anim_mode3); //爆炸
Load_Animation_BOB(&Player,4,1,player_anim_mode4); //中间
Player.varsI[0]=Blood_Player; //血
Player.varsI[1]=0; //爆炸持续时间
Player.varsI[2]=0; //中蛋闪烁时间
Player.counter_1=0; //重生时间
Player_state=ALIVE; //状态
SET_BIT(Player.attr,BOB_ATTR_VISIBLE); //这里用BOB_ATTR_VISIBLE来测试是否需要渲染。。
Set_Pos_BOB(&Player,360,415); //位置
Set_Vel_BOB(&Player,5,5); //移动速度
zidan_mode=1; //子弹模式为1
daodan_mode=1; //导弹模式为1
addspeed_mode=1; //速度模式为1
Set_Anim_Speed_BOB(&Player,2); //动画速度 也就是多少帧切换位图
Set_Animation_BOB(&Player,3); //设置动画模式。。为第4个 只有一张位图
return 1;
}
int Move_Player()
{
int i;
//用玩家对所有的兰色飞机进行碰撞测试
for(i=0;i<MAX_NUM_BLUE;i++)
{
if(Blue_state[i]==ALIVE) //兰色飞机是活的
{
if(Collision_Test(Player.x+20,Player.y,20,52,Blue[i].x+18,Blue[i].y+5,32,57) || Collision_Test(Player.x+12,Player.y+26,32,14,Blue[i].x+18,Blue[i].y+5,32,57)) //碰撞测试
{
Player.varsI[0]-=Collision_with_boss_dam; //玩家的血减20
Blue[i].varsI[0]=0; //兰色飞机直接减为0
Set_Animation_BOB(&Blue[i],2); //兰色飞机爆炸
Set_Animation_BOB(&Player,2); //玩家中蛋闪烁。。
Set_Anim_Speed_BOB(&Player,1); //动画切换速度。。
if(Player.varsI[0]<=0) //如果玩家的血减到了0 那么他的状态就是将死了
{
Set_Animation_BOB(&Player,3); //设置动画模式为爆炸
Player_state=DYING; //状态为将死了
}
}
}
}//end 和兰色飞机捧撞测试
//然后是和卫星捧撞测试
for(i=0;i<MAX_NUM_WEIXING;i++)
{
if(Weixing_state[i]==ALIVE)
{
if(Collision_Test(Player.x+20,Player.y,20,52,Weixing[i].x+18,Weixing[i].y+18,56,50) || Collision_Test(Player.x+12,Player.y+26,32,14,Weixing[i].x+18,Weixing[i].y+18,56,50))
{
Player.varsI[0]-=Collision_with_weixing_dam;
Weixing[i].varsI[0]-=50;
Set_Animation_BOB(&Player,2);
Set_Anim_Speed_BOB(&Player,1);
if(Weixing[i].varsI[0]<=0)
{
Set_Animation_BOB(&Weixing[i],1);
}
if(Player.varsI[0]<=0)
{
Set_Animation_BOB(&Player,3); //血为0 爆炸。。。。
Player_state=DYING;
}
}
}
}
//检测宝物时候存在。。如果存在的话 改变玩家的属性。
for(i=0; i<MAX_NUM_BAOWU; i++)
{
if(Baowu_state[i]==ALIVE)
{
if(Collision_BOBS(&Player,&Baowu[i]))
{
Baowu_state[i]=DEAD;
Set_Animation_BOB(&Player,2);
//判断宝物的属性。并改变相应的开火模式
if(Baowu[i].curr_animation==0)
{
if(Baowu[i].anim_index==0)
{
zidan_mode++;
if(zidan_mode > 3)
zidan_mode=3;
}
else if(Baowu[i].anim_index==1)
{
addspeed_mode++;
if(addspeed_mode > 3)
addspeed_mode=3;
}
else if(Baowu[i].anim_index==2)
{
daodan_mode++;
if(daodan_mode > 3)
daodan_mode=3;
}
}
else if(Baowu[i].curr_animation==1)
{
if(Baowu[i].anim_index==0)
{
addspeed_mode++;
if(addspeed_mode > 3)
addspeed_mode=3;
}
else if(Baowu[i].anim_index==1)
{
daodan_mode++;
if(daodan_mode > 3)
daodan_mode=3;
}
else if(Baowu[i].anim_index==2)
{
zidan_mode++;
if(zidan_mode > 3)
zidan_mode=3;
}
}
else if(Baowu[i].curr_animation==2)
{
if(Baowu[i].anim_index==0)
{
daodan_mode++;
if(daodan_mode > 3)
daodan_mode=3;
}
else if(Baowu[i].anim_index==1)
{
zidan_mode++;
if(zidan_mode > 3)
zidan_mode=3;
}
else if(Baowu[i].anim_index==2)
{
addspeed_mode++;
if(addspeed_mode > 3)
addspeed_mode=3;
}
}
}
}
}
//这里还要和其他的 BOSS 类似的。。。
//和敌人子弹进行碰撞测试
for(i=0; i<MAX_NUM_ENEMYZIDAN; i++)
{
if(Enemyzidan_state[i]==ALIVE)
{
if(Collision_Test(Player.x+20,Player.y,20,52,Enemyzidan[i].x,Enemyzidan[i].y,10,10) || Collision_Test(Player.x+14,Player.y+26,36,14,Enemyzidan[i].x,Enemyzidan[i].y,10,10))
{
Player.varsI[0]-=Enemyzidan_dam;
Enemyzidan[i].varsI[1]=1; //注意 Enemyzidan[i].varsI[1] 是子弹消失的标记。!!!!!!!!!!!!!
Set_Animation_BOB(&Player,2); //中蛋;;;
if(Player.varsI[0] <= 0)
{
Set_Animation_BOB(&Player,3);
Player_state=DYING;
}
}
}
}/////////////////////////////////////////////////////////
////////////////////////////////////////和黄色飞机进行碰状测试
for(i=0;i<MAX_NUM_YELLOW;i++)
{
if(Yellow_state[i]==ALIVE)
{
if(Collision_Test(Player.x+20,Player.y,20,52,Yellow[i].x+10,Yellow[i].y+10,50,47) || Collision_Test(Player.x+12,Player.y+26,32,14,Yellow[i].x+10,Yellow[i].y+10,50,47))
{
Player.varsI[0]-=Collision_with_yellow_dam;
Yellow[i].varsI[0]=0;
Set_Animation_BOB(&Player,2);
Set_Anim_Speed_BOB(&Player,1);
if(Player.varsI[0]<=0)
{
Set_Animation_BOB(&Player,3); //血为0 爆炸。。。。
Player_state=DYING;
}
if(Yellow[i].varsI[0]<=0)
{
Set_Animation_BOB(&Yellow[i],16);
}
}
}
}
///和老王进行碰状测试
if(Boss_state==ALIVE)
{
if(Collision_Test(Boss.x+40,Boss.y+40,70,110,Player.x,Player.y,70,64))
{
Player.varsI[0]-=Collision_with_boss_dam;
if(Player.varsI[0]<=0)
{
Player.varsI[0]=0;
Set_Animation_BOB(&Player,3);
Player_state=DYING;
}
}
}
return 1;
}
/////////////////////////////////////////////////////////////////////////////////////
int Check_Player() //这里检测中蛋没?
{
if(Player.curr_animation==2) //是否是中蛋模式
{
if(++Player.varsI[2]>6) //这里用一个记数器Player.varsI的第2项来来记录中蛋后闪烁的时间
{
Set_Animation_BOB(&Player,4); //设置为初始动画
Player.varsI[2]=0; //中蛋记数器重置为0
}
}
return 1;
}
//////////////////////////////////////////////////////////////////////////////////////
int Reset_Player()
{
Player_state=ALIVE; //状态
Show_BOB(&Player); //设置为可见的。。
Player.varsI[0]=Blood_Player; //血加满。。。
Player.varsI[1]=0; //爆炸持续时间
Player.varsI[2]=0; //玩家中蛋的时间
zidan_mode=1; //子弹模式为1(原始的。)
daodan_mode=1; //导弹模式为1(原始的。)
addspeed_mode=1; //速度模式为1 (原始的。)
Player.counter_1=0; //这个变量将记录重生的时间
Set_Pos_BOB(&Player,360,415); //位置
Set_Anim_Speed_BOB(&Player,2); //动画速度为2帧切换位图。。
Set_Vel_BOB(&Player,5,5);
Set_Animation_BOB(&Player,2); //选择动画模式为中间不动的那个。。
Animate_BOB(&Player);
return 1;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
int Delete_Player()
{
Destroy_BOB(&Player);
return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int Draw_Player()
{
Draw_BOB(&Player,lpddsback); //可见才进行渲染
Animate_BOB(&Player); //寻找下一帧位图索引。。。
return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////黄色飞机
int Init_Yellow()
{
static int yellow_anim_mode0[1]={0},yellow_anim_mode1[1]={1},yellow_anim_mode2[1]={2},yellow_anim_mode3[1]={3};
static int yellow_anim_mode4[1]={4},yellow_anim_mode5[1]={5},yellow_anim_mode6[1]={6},yellow_anim_mode7[1]={7};
static int yellow_anim_mode8[1]={8},yellow_anim_mode9[1]={9},yellow_anim_mode10[1]={10},yellow_anim_mode11[1]={11};
static int yellow_anim_mode12[1]={12},yellow_anim_mode13[1]={13},yellow_anim_mode14[1]={14},yellow_anim_mode15[1]={15};
static int yellow_anim_mode16[3]={16,17,18}; //爆炸模式指令
int i,k;
Create_BOB(&Yellow[0],0,0,70,57,19,BOB_ATTR_MULTI_ANIM, DDSCAPS_VIDEOMEMORY,255,8); //第一个小的黄色飞机位图无法显示。。。
Load_Bitmap_File(&bitmap8bit,"yellowplane.bmp");
Load_Frame_BOB(&Yellow[0],&bitmap8bit,0,0,0,BITMAP_EXTRACT_MODE_CELL); //肯定是加载了第一个小的黄色飞机的。。。
Load_Frame_BOB(&Yellow[0],&bitmap8bit,1,1,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,2,2,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,3,3,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,4,4,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,5,5,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,6,6,0,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,7,0,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,8,1,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,9,2,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,10,3,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,11,4,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,12,5,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,13,6,1,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,14,0,2,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,15,1,2,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,16,2,2,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,17,3,2,BITMAP_EXTRACT_MODE_CELL);
Load_Frame_BOB(&Yellow[0],&bitmap8bit,18,4,2,BITMAP_EXTRACT_MODE_CELL);
Unload_Bitmap_File(&bitmap8bit);
////////////////////////////////////////////////////加载位图
for(i=0;i<MAX_NUM_YELLOW;i++)
{
Yellow_state[i]=DEAD; //黄色飞机状态初始化为死的
}
Yellow[0].varsI[0]=100; //血为满的
Yellow[0].varsI[1]=0; //爆炸时间
//加载指令集
Load_Animation_BOB(&Yellow[0],0,1,yellow_anim_mode0); //这里应该也没有错。。。。。。
Load_Animation_BOB(&Yellow[0],1,1,yellow_anim_mode1);
Load_Animation_BOB(&Yellow[0],2,1,yellow_anim_mode2);
Load_Animation_BOB(&Yellow[0],3,1,yellow_anim_mode3);
Load_Animation_BOB(&Yellow[0],4,1,yellow_anim_mode4);
Load_Animation_BOB(&Yellow[0],5,1,yellow_anim_mode5);
Load_Animation_BOB(&Yellow[0],6,1,yellow_anim_mode6);
Load_Animation_BOB(&Yellow[0],7,1,yellow_anim_mode7);
Load_Animation_BOB(&Yellow[0],8,1,yellow_anim_mode8);
Load_Animation_BOB(&Yellow[0],9,1,yellow_anim_mode9);
Load_Animation_BOB(&Yellow[0],10,1,yellow_anim_mode10);
Load_Animation_BOB(&Yellow[0],11,1,yellow_anim_mode11);
Load_Animation_BOB(&Yellow[0],12,1,yellow_anim_mode12);
Load_Animation_BOB(&Yellow[0],13,1,yellow_anim_mode13);
Load_Animation_BOB(&Yellow[0],14,1,yellow_anim_mode14);
Load_Animation_BOB(&Yellow[0],15,1,yellow_anim_mode15);
Load_Animation_BOB(&Yellow[0],16,3,yellow_anim_mode16);
//浅拷贝
for(k=1;k<MAX_NUM_YELLOW;k++)
{
Clone_BOB(&Yellow[0],&Yellow[k]);
}
return 1;
}//end init_yellow
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///激活一个黄色飞机
int Start_Yellow(int mode) //x,y,z分别是位置和AI模式
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -