坦克入侵实例的代码.docx

上传人:b****4 文档编号:4174954 上传时间:2022-11-28 格式:DOCX 页数:31 大小:22.29KB
下载 相关 举报
坦克入侵实例的代码.docx_第1页
第1页 / 共31页
坦克入侵实例的代码.docx_第2页
第2页 / 共31页
坦克入侵实例的代码.docx_第3页
第3页 / 共31页
坦克入侵实例的代码.docx_第4页
第4页 / 共31页
坦克入侵实例的代码.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

坦克入侵实例的代码.docx

《坦克入侵实例的代码.docx》由会员分享,可在线阅读,更多相关《坦克入侵实例的代码.docx(31页珍藏版)》请在冰豆网上搜索。

坦克入侵实例的代码.docx

坦克入侵实例的代码

#include<>

#include<>

#include<>

#include<>

#include<>

#include<>

#include<>

#include

#include

#include

"

#defineMISSILE1_NAV"./"

#defineMISSILE2_PATH"./"

#defineMISSILE2_NAV"./"

#defineHELITOE2C_PATH"./"

#defineHELITOE2C_NAV"./"

staticvoidDrawInfoCallBack(vgCommon*chan,void*udata);

staticvoidstateHandler(void);

staticvoidcomputeVVec(float*vv,vgPosition*pos);

staticintrandomNum(intnumber);//获取随机整数值

staticfloate2c_radius=;//预警机巡航半径

staticintstate=0;//仿真运行状态

staticintm1launchable=0;//导弹1是否可发射

staticintm2launchable=0;//导弹2是否可发射

staticinte2cDownable=0;//E2C是否可失事

staticintm1used=0;//导弹1是否已发射

staticintm2used=0;//导弹2是否已发射

staticfloatstartTime=0;//计时起始时间

staticfloattimeNow=0;//计时间隔时间

staticfloatdeltaFrameTime=;//帧渲染间隔时间

 

voidmain(void)

{

staticvgObserver*obs;

staticvgChannel*chan;

staticvgScene*scene;

staticvgObject*m1,*m2;

staticvgPlayer*tank,*heli,*missile1,*missile2;

staticvgPlayer*e2c,*tank_crater,*e2c_crater;

staticvgIsector*fortank,*formissile1,*formissile2;

staticvgIsector*fore2c,*forheli,*forcrater;

staticvgPosition*pos,*e2c_pos,*heli_pos,*missile_pos,*target_pos;

staticvgFx*h_blade1,*h_blade2;

staticvgFx*e_blade1,*e_blade2,*e_trail1,*e_trail2;

staticvgFx*e_airhit,*e_engsmoke,*e_engburn,*e_flash;

staticvgFx*e_fire,*e_smoke,*e_explode,*e_debris;

staticvgFx*m1_flame,*m1_trail,*m2_flame,*m2_trail;

staticvgFx*t_flash,*t_explode1,*t_debris1,*t_smoke;

staticvgFx*t_flame,*t_explode2,*t_debris2,*t_fire;

staticvgPath*tank_path,*tankupdown_path,*heli_path;

staticvgSplineNavigator*tank_nav,*tankupdown_nav,*heli_nav;

staticvgPath*missile1_path,*missile2_path,*helitoe2c_path;

staticvgSplineNavigator*missile1_nav,*missile2_nav,*helitoe2c_nav;

staticVelocityMarkervm;

staticfloatx,y,z;

staticfloath=,p=,r=;

staticfloate2cBspeed=;//预警机螺旋桨转速

staticfloatheliBspeed=;

staticfloatvvec[4],e2cISresult[4],m1ISresult[4],m2Isresult[4];

staticfloathsin,hcos;

staticfloatpsin,pcos;

staticinttankhitted=0;//坦克状态标志

staticinte2ccrashed=0;//预警机是否坠毁

staticinti=0;

staticintm,n,idx;

staticfloattx,ty,tz,th,tp,tr;

staticfloathx,hy,hz,hh,hp,hr;

staticfloatcrashed_x,crashed_y,crashed_z;

vgInitSys();

vgInitFx();

vgDefineSys("");

vgConfigSys();

//初始化Vega变量

obs=vgGetObserv(0);

chan=vgGetObservChan(obs,0);

scene=vgGetScene(0);

m1=vgFindObj("missile1");

m2=vgFindObj("missile2");

tank=vgFindPlyr("p_Tank");

heli=vgFindPlyr("p_Heli");

missile1=vgFindPlyr("p_Missile1");

missile2=vgFindPlyr("p_Missile2");

e2c=vgFindPlyr("p_E2C");

tank_crater=vgFindPlyr("p_Tank_Crater");

e2c_crater=vgFindPlyr("p_E2C_Crater");

 

fortank=vgFindIsect("forTank");

fore2c=vgFindIsect("forE2C");

forheli=vgFindIsect("forHeli");

formissile1=vgFindIsect("formissile1");

formissile2=vgFindIsect("formissile2");

forcrater=vgFindIsect("forCrater");

 

tank_path=vgFindPath("tank_use");

tank_nav=vgFindSplineNavigator("tank_use");

tankupdown_path=vgFindPath("tank_updown");

tankupdown_nav=vgFindSplineNavigator("tank_updown");

heli_path=vgFindPath("heli_use");

heli_nav=vgFindSplineNavigator("heli_use");

h_blade1=vgFindFx("H_blade1");

h_blade2=vgFindFx("H_blade2");

e_blade1=vgFindFx("E_blade1");

e_blade2=vgFindFx("E_blade2");

e_trail1=vgFindFx("E_trail1");

e_trail2=vgFindFx("E_trail2");

e_airhit=vgFindFx("E_airhit");

e_engsmoke=vgFindFx("E_engsmoke");

e_engburn=vgFindFx("E_engburn");

e_flash=vgFindFx("E_flash");

e_explode=vgFindFx("E_explode");

e_debris=vgFindFx("E_debris");

e_fire=vgFindFx("E_fire");

e_smoke=vgFindFx("E_smoke");

m1_trail=vgFindFx("M1_trail");

m1_flame=vgFindFx("M1_flame");

m2_trail=vgFindFx("M2_trail");

m2_flame=vgFindFx("M2_flame");

t_flash=vgFindFx("T_flash");

t_explode1=vgFindFx("T_explode1");

t_debris1=vgFindFx("T_debris1");

t_flame=vgFindFx("T_flame");

t_fire=vgFindFx("T_fire");

t_explode2=vgFindFx("T_explode2");

t_debris2=vgFindFx("T_debris2");

t_smoke=vgFindFx("T_smoke");

 

//注册回调函数

vgAddFunc(chan,VGCHAN_POSTDRAW,DrawInfoCallBack,NULL);

startTime=vgGetTime();

 

while

(1)

{

vgSyncFrame();

vgFrame();

//处理输入事件

stateHandler();

//判断直升机状态

if(vgGetIsectResult(fore2c,VGIS_GETLOS,e2cISresult))

{

e2ccrashed=1;//预警机坠地

crashed_x=e2cISresult[1];

crashed_y=e2cISresult[2];

crashed_z=e2cISresult[3];

 

}

//控制预警机飞行状态

if(!

e2c_pos)e2c_pos=vgNewPos();

vgPosVec(e2c_pos,x,y,z,h,p,r);

vgPos(e2c,e2c_pos);

computeVVec(&vvec[1],e2c_pos);

if(!

e2ccrashed&&z>

{

h+=H_RATE;

if(h>h-=;

vgGetSinCos(h,&hsin,&hcos);

vgGetSinCos(p,&psin,&pcos);

x=ORIGINX+e2c_radius*hcos;

y=ORIGINX+e2c_radius*hsin;

z+=Z_RATE*psin;

}

//计算时间间隔

timeNow=vgGetTime()-startTime;

switch(state)

{

case0:

//初始状态

//初始化E2C预警机位姿

z=ZSTART;

p=;

r=;

//设置视点

vgProp(obs,VGOBS_TETHERSTATE,VGOBS_FIXED);

vgProp(obs,VGOBS_LOOKAT_TARGET,VGOBS_L_NONE);

vgObservPlyr(obs,e2c);

pos=vgNewPos();

vgPosVec(pos,100,25,5,100,-10,0);

vgObservTetherPos(obs,pos);

//设置直升机和坦克的初始位置

vgProp(tankupdown_nav,VGSPLINENAV_CURRENT_INDEX,0);

vgPosVec(pos,,,,-180,0,0);

vgPos(heli,pos);

vgPosVec(pos,2208,1035,0,0,0,0);

vgPos(tank,pos);

vgPosVec(pos,0,0,0,0,0,0);

vgPos(tank_crater,pos);

vgPos(e2c_crater,pos);

vgDelPos(pos);

//设置特效状态

e2cBspeed=;

vgProp(e_blade1,VGFX_BSPEED,e2cBspeed);

heliBspeed=;

vgProp(h_blade1,VGFX_BSPEED,heliBspeed);

vgProp(h_blade2,VGFX_BSPEED,heliBspeed);

vgProp(e_blade1,VGFX_STATE,VG_ON);

vgProp(e_blade2,VGFX_STATE,VG_ON);

vgProp(e_trail1,VGFX_STATE,VG_ON);

vgProp(e_trail2,VGFX_STATE,VG_ON);

vgFxTime(e_trail1,VGFX_STARTTIME,VGFX_NOW);

vgFxTime(e_trail2,VGFX_STARTTIME,VGFX_NOW);

startTime=vgGetTime();

state=1;

break;

 

case1:

//坦克开始行动

if(timeNow>+randomNum(5))

{

vgProp(tank_nav,VGSPLINENAV_CURRENT_INDEX,0);

startTime=vgGetTime();

state=2;

}

break;

case2:

//锁定坦克

vgProp(tank_nav,VGCOMMON_ENABLED,VG_ON);

vgProp(tank,VGPLYR_SPLINE_NAVIGATOR,VG_ON);

vgPlyrNav(tank,(vgNavigator*)tank_nav);

vgProp(obs,VGOBS_TETHERSTATE,VGOBS_FIXED);

pos=vgNewPos();

vgPosVec(pos,0,-8,5,0,-10,0);

vgObservTetherPos(obs,pos);

vgObservPlyr(obs,tank);

vgDelPos(pos);

if(timeNow>+randomNum(5))

{

vgProp(obs,VGOBS_TETHERSTATE,VGOBS_FIXED);

pos=vgNewPos();

vgPosVec(pos,0,0,0,0,0,0);

vgObservTetherPos(obs,pos);

vgObservPlyr(obs,e2c);

vgDelPos(pos);

vgProp(obs,VGOBS_LOOKAT_TARGET,VGOBS_L_PLYR);

vgObservLookatPlyr(obs,tank);

startTime=vgGetTime();

state=3;

}

break;

case3:

//监视坦克行动

if(i>-300)

{

pos=vgNewPos();

vgPosVec(pos,0,0,i,0,0,0);

vgObservTetherPos(obs,pos);

vgObservPlyr(obs,e2c);

vgDelPos(pos);

i--;

}

if(timeNow>+randomNum(5))

{

startTime=vgGetTime();

state=4;

}

break;

case4:

//直升机启动

vgProp(obs,VGOBS_LOOKAT_TARGET,VGOBS_L_NONE);

vgProp(obs,VGOBS_TETHERSTATE,VGOBS_FIXED);

pos=vgNewPos();

vgPosVec(pos,,,,90,-10,0);

vgObservTetherPos(obs,pos);

vgObservPlyr(obs,heli);

vgDelPos(pos);

vgProp(h_blade1,VGFX_STATE,VG_ON);

vgProp(h_blade2,VGFX_STATE,VG_ON);

if(heliBspeed<

heliBspeed+=;

else

{vgProp(heli_nav,VGSPLINENAV_CURRENT_INDEX,0);

startTime=vgGetTime();

state=5;

}

vgProp(h_blade1,VGFX_BSPEED,heliBspeed);

vgProp(h_blade2,VGFX_BSPEED,heliBspeed);

break;

case5:

//直升机行动

vgProp(heli_nav,VGCOMMON_ENABLED,VG_ON);

vgProp(heli,VGPLYR_SPLINE_NAVIGATOR,VG_ON);

vgProp(heli_nav,VGSPLINENAV_START_INDEX,0);

vgProp(heli_nav,VGSPLINENAV_STOP_AT_END,VG_ON);

vgPlyrNav(heli,(vgNavigator*)heli_nav);

vgProp(obs,VGOBS_TETHERSTATE,VGOBS_SPIN);

vgObservPlyr(obs,heli);

vgProp(obs,VGOBS_SPINRAD,80);

vgProp(obs,VGOBS_SPINDELTA,;

vgProp(obs,VGOBS_SPINELEV,20);

if(vgGetProp(tank_nav,VGSPLINENAV_CURRENT_INDEX)==vgGetProp(tank_path,VGPATH_NUM_CTRLPTS)-1)

{

m1launchable=1;

m2launchable=1;

}

break;

case6:

//发射第一枚导弹

//创建导弹路径

missile1_path=vgNewPath(MISSILE1_PATH,NULL);

vgName(missile1_path,"M1_path");

missile_pos=vgNewPos();

target_pos=vgNewPos();

vgGetWCSPos(missile1,missile_pos);

vgGetPosVec(missile_pos,&tx,&ty,&tz,&th,&tp,&tr);

vgProp(missile1,VGPLYR_CSREF,VGPLYR_ABSOLUTE);

vgPosVec(missile_pos,tx,ty,tz,0,0,0);

vgPos(missile1,missile_pos);

vgGetPos(tank,target_pos);

vgGetPosVec(target_pos,&tx,&ty,&tz,&th,&tp,&tr);

vgPosVec(target_pos,tx,ty,tz,0,0,0);

vgPathAddCtrlPointPos(missile1_path,missile_pos);

vgPathAddCtrlPointPos(missile1_path,target_pos);

vgDelPos(missile_pos);

vgDelPos(target_pos);

missile1_nav=vgNewSplineNavigator(MISSILE1_NAV,missile1_path);

vgName(missile1_nav,"M1_nav");

vgProp(missile1_nav,VGCOMMON_ENABLED,VG_ON);

vgProp(missile1_nav,VGSPLINENAV_START_INDEX,0);

vgProp(missile1_nav,VGSPLINENAV_RENDER,VG_OFF);

vgNavigatorAddMarker(missile1_nav,0,VGSPLINENAV_LINEAR,0,NULL,0);

vgNavigatorAddMarker(missile1_nav,0,VGSPLINENAV_ABSOLUTE_HPR,VG_FALSE,NULL,0);

=;

=;

vgNavigatorAddMarker(missile1_nav,0,VGSPLINENAV_VELOCITIES,0,&vm,sizeof(VelocityMarker));

vgNavigatorAddMarker(missile1_nav,1,VGNAV_EMPTY,0,NULL,0);

vgMakeSplineNavigator(missile1_nav);

//控制导弹特效

vgProp(m1_flame,VGFX_STATE,VG_ON);

vgProp(m1_trail,VGFX_STATE,VG_ON);

vgProp(m1_flame,VGFX_DURATION,VGFX_ALWAYS);

vgProp(m1_trail,VGFX_DURATION,VGFX_ALWAYS);

vgFxTime(m1_flame,VGFX_STARTTIME,VGFX_NOW);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1