📄 cidade.cpp
字号:
car->estado=decide(car);
if(car->estado==ClkW) {
car->pex=0;
car->pez=0;
car->tdir=car->dir;
}
if(car->estado==CClkW) {
car->pex=0;
car->pez=EstradaLim;
car->tdir=car->dir;
}
}
break;
case OESTE : car->x-=car->speed;
if(car->x<0) {
retiraLog(&(car->r->rlog), car);
car->r=car->r->w;
criaLog(&(car->r->rlog), car);
car->x+=EstradaL;
car->estado=decide(car);
if(car->estado==ClkW) {
car->pex=EstradaLim;
car->pez=EstradaLim;
car->tdir=car->dir;
}
if(car->estado==CClkW) {
car->pex=EstradaLim;
car->pez=0;
car->tdir=car->dir;
}
}
break;
}
break;
case ClkW : switch(car->tdir) {
case NORTE :
if(car->roty>D_3PI2) {
car->x=car->pex+Hd*cosf(D_2PI-car->roty);
car->z=car->pez-Hd*sinf(D_2PI-car->roty);
car->roty-=Speed*PasCrvL;
if(car->roty<D_3PI2) car->roty=D_3PI2;
car->dir=FindDir(car->roty);
}
else {
retiraLog(&(car->r->rlog), car);
car->r=car->r->w;
criaLog(&(car->r->rlog), car);
car->x=EstradaLim;
car->z=He;
car->estado=0;
}
break;
case SUL :
if(car->roty>D_PI2) {
car->x=car->pex-Hd*cosf(D3DX_PI-car->roty);
car->z=car->pez+Hd*sinf(D3DX_PI-car->roty);
car->roty-=Speed*PasCrvL;
if(car->roty<D_PI2) car->roty=D_PI2;
car->dir=FindDir(car->roty);
}
else {
retiraLog(&(car->r->rlog), car);
car->r=car->r->e;
criaLog(&(car->r->rlog), car);
car->x=0;
car->z=Hd;
car->estado=0;
}
break;
case ESTE :
if(car->roty>0) {
car->x=car->pex+Hd*sinf(D_PI2-car->roty);
car->z=car->pez+Hd*cosf(D_PI2-car->roty);
car->roty-=Speed*PasCrvL;
if(car->roty<0) car->roty=0;
car->dir=FindDir(car->roty);
}
else {
retiraLog(&(car->r->rlog), car);
car->r=car->r->n;
criaLog(&(car->r->rlog), car);
car->x=Hd;
car->z=EstradaLim;
car->estado=0;
}
break;
case OESTE :
if(car->roty>D3DX_PI) {
car->x=car->pex-Hd*sinf(D_3PI2-car->roty);
car->z=car->pez-Hd*cosf(D_3PI2-car->roty);
car->roty-=Speed*PasCrvL;
if(car->roty<D3DX_PI) car->roty=D3DX_PI;
car->dir=FindDir(car->roty);
}
else {
retiraLog(&(car->r->rlog), car);
car->r=car->r->s;
criaLog(&(car->r->rlog), car);
car->x=He;
car->z=0;
car->estado=0;
}
break;
}
break;
case CClkW : switch(car->tdir) {
case NORTE :
if(car->roty<D_PI2) {
car->x=car->pex-He*cosf(car->roty);
car->z=car->pez-He*sinf(car->roty);
car->roty+=Speed*PasCrvH;
if(car->roty>D_PI2) car->roty=D_PI2;
car->dir=FindDir(car->roty);
}
else {
retiraLog(&(car->r->rlog), car);
car->r=car->r->e;
criaLog(&(car->r->rlog), car);
car->x=0;
car->z=Hd;
car->estado=0;
}
break;
case SUL :
if(car->roty<D_3PI2) {
car->x=car->pex+He*cosf(car->roty-D3DX_PI);
car->z=car->pez+He*sinf(car->roty-D3DX_PI);
car->roty+=Speed*PasCrvH;
if(car->roty>D_3PI2) car->roty=D_3PI2;
car->dir=FindDir(car->roty);
}
else {
retiraLog(&(car->r->rlog), car);
car->r=car->r->w;
criaLog(&(car->r->rlog), car);
car->x=EstradaLim;
car->z=He;
car->estado=0;
}
break;
case ESTE :
if(car->roty<D3DX_PI) {
car->x=car->pex+He*sinf(car->roty-D_PI2);
car->z=car->pez-He*cosf(car->roty-D_PI2);
car->roty+=Speed*PasCrvH;
if(car->roty>D3DX_PI) car->roty=D3DX_PI;
car->dir=FindDir(car->roty);
}
else {
retiraLog(&(car->r->rlog), car);
car->r=car->r->s;
criaLog(&(car->r->rlog), car);
car->x=He;
car->z=0;
car->estado=0;
}
break;
case OESTE :
if(car->roty<D_2PI) {
car->x=car->pex-He*sinf(car->roty-D_3PI2);
car->z=car->pez+He*cosf(car->roty-D_3PI2);
car->roty+=Speed*PasCrvH;
if(car->roty>D_2PI) car->roty=D_2PI;
car->dir=FindDir(car->roty);
}
else {
retiraLog(&(car->r->rlog), car);
car->r=car->r->n;
criaLog(&(car->r->rlog), car);
car->x=Hd;
car->z=EstradaLim;
car->roty=0;
car->estado=0;
}
break;
}
break;
}
car->gx=car->r->x*EstradaL+EstradaL+car->x;
car->gz=car->r->z*EstradaL+EstradaL+car->z;
// Novo objectivo
if(car->r==car->rvs)
do car->rvs=findrua(rand()%Nqx+1, rand()%Nqz+1);
while(!car->rvs || car->rvs==car->r);
}
void PeaoMove(Peao *pea) {
switch(pea->estado) {
case 0 : switch(pea->dir) {
case NORTE : pea->z-=Pspeed;
if(pea->z<Hpd && !pea->r->n) pea->estado=CClkW;
else if(pea->z<0) {
retiraPLog(&(pea->r->rpea), pea);
pea->r=pea->r->n;
criaPLog(&(pea->r->rpea), pea);
pea->z+=EstradaL;
if(pea->r->w) {
pea->pex=0;
pea->pez=EstradaL;
pea->roty=D_2PI;
pea->estado=ClkW;
}
}
break;
case SUL : pea->z+=Pspeed;
if(pea->z>=Hpe && !pea->r->s) pea->estado=CClkW;
else if(pea->z>=EstradaL) {
retiraPLog(&(pea->r->rpea), pea);
pea->r=pea->r->s;
criaPLog(&(pea->r->rpea), pea);
pea->z-=EstradaL;
if(pea->r->e) {
pea->pex=EstradaL;
pea->pez=0;
pea->estado=ClkW;
}
}
break;
case ESTE : pea->x+=Pspeed;
if(pea->x>=Hpe && !pea->r->e) pea->estado=CClkW;
else if(pea->x>=EstradaL) {
retiraPLog(&(pea->r->rpea), pea);
pea->r=pea->r->e;
criaPLog(&(pea->r->rpea), pea);
pea->x-=EstradaL;
if(pea->r->n) {
pea->pex=0;
pea->pez=0;
pea->estado=ClkW;
}
}
break;
case OESTE : pea->x-=Pspeed;
if(pea->x<Hpd && !pea->r->w) pea->estado=CClkW;
else if(pea->x<0) {
retiraPLog(&(pea->r->rpea), pea);
pea->r=pea->r->w;
criaPLog(&(pea->r->rpea), pea);
pea->x+=EstradaL;
if(pea->r->s) {
pea->pex=EstradaL;
pea->pez=EstradaL;
pea->estado=ClkW;
}
}
break;
}
break;
case ClkW : switch(pea->dir) {
case NORTE :
if(pea->roty>D_3PI2) {
pea->x=pea->pex+PasseioL2*cosf(D_2PI-pea->roty);
pea->z=pea->pez-PasseioL2*sinf(D_2PI-pea->roty);
pea->roty-=Pspeed*KProty;
if(pea->roty<D_3PI2) pea->roty=D_3PI2;
}
else {
pea->x=EstradaLim;
pea->z=Hpe;
retiraPLog(&(pea->r->rpea), pea);
pea->r=pea->r->w;
criaPLog(&(pea->r->rpea), pea);
pea->dir=OESTE;
pea->estado=0;
}
break;
case SUL :
if(pea->roty>D_PI2) {
pea->x=pea->pex-PasseioL2*cosf(D3DX_PI-pea->roty);
pea->z=pea->pez+PasseioL2*sinf(D3DX_PI-pea->roty);
pea->roty-=Pspeed*KProty;
if(pea->roty<D_PI2) pea->roty=D_PI2;
}
else {
pea->x=0;
pea->z=Hpd;
retiraPLog(&(pea->r->rpea), pea);
pea->r=pea->r->e;
criaPLog(&(pea->r->rpea), pea);
pea->dir=ESTE;
pea->estado=0;
}
break;
case ESTE :
if(pea->roty>0) {
pea->x=pea->pex+PasseioL2*sinf(D_PI2-pea->roty);
pea->z=pea->pez+PasseioL2*cosf(D_PI2-pea->roty);
pea->roty-=Pspeed*KProty;
if(pea->roty<0) pea->roty=0;
}
else {
pea->x=Hpd;
pea->z=EstradaLim;
retiraPLog(&(pea->r->rpea), pea);
pea->r=pea->r->n;
criaPLog(&(pea->r->rpea), pea);
pea->dir=NORTE;
pea->estado=0;
}
break;
case OESTE :
if(pea->roty>D3DX_PI) {
pea->x=pea->pex-PasseioL2*sinf(D_3PI2-pea->roty);
pea->z=pea->pez-PasseioL2*cosf(D_3PI2-pea->roty);
pea->roty-=Pspeed*KProty;
if(pea->roty<D3DX_PI) pea->roty=D3DX_PI;
}
else {
pea->x=Hpe;
pea->z=0;
retiraPLog(&(pea->r->rpea), pea);
pea->r=pea->r->s;
criaPLog(&(pea->r->rpea), pea);
pea->dir=SUL;
pea->estado=0;
}
break;
}
break;
case CClkW : switch(pea->dir) {
case NORTE :
if(pea->roty<D_PI2) {
pea->roty+=Pspeed*KProty;
if(pea->roty>D_PI2) pea->roty=D_PI2;
}
else {
pea->x=Hpd;
pea->z=Hpd;
pea->dir=ESTE;
pea->estado=0;
}
break;
case SUL :
if(pea->roty<D_3PI2) {
pea->roty+=Pspeed*KProty;
if(pea->roty>D_3PI2) pea->roty=D_3PI2;
}
else {
pea->x=Hpe;
pea->z=Hpe;
pea->dir=OESTE;
pea->estado=0;
}
break;
case ESTE :
if(pea->roty<D3DX_PI) {
pea->roty+=Pspeed*KProty;
if(pea->roty>D3DX_PI) pea->roty=D3DX_PI;
}
else {
pea->x=Hpe;
pea->z=Hpd;
pea->dir=SUL;
pea->estado=0;
}
break;
case OESTE :
if(pea->roty<D_2PI) {
pea->roty+=Pspeed*KProty;
if(pea->roty>D_2PI) pea->roty=D_2PI;
}
else {
pea->x=Hpd;
pea->z=Hpe;
pea->roty=0;
pea->dir=NORTE;
pea->estado=0;
}
break;
}
break;
}
}
int findi(Movel *car) {
for(int i=0;i<NumCar;i++)
if(&carros[i]==car) return i;
return 0;
}
void Reorganiza(Lanim *rz) {
float tim=0;
for(Lanim *la=rz;la;la=la->nx) {
la->pass=la->pass/(la->tmg-tim);
tim=la->tmg;
}
}
////////////////////////////////////////////////////////////////////////////////////
// Input semantics used by this app
enum INPUT_SEMANTICS
{
// Gameplay semantics
// TODO: change as needed
INPUT_ROTATE_AXIS_LR=1, INPUT_ROTATE_AXIS_UD,
INPUT_ROTATE_LEFT, INPUT_ROTATE_RIGHT,
INPUT_ROTATE_UP, INPUT_ROTATE_DOWN,
INPUT_CONFIG_INPUT, INPUT_CONFIG_DISPLAY,
INPUT_MOVE_FWD, INPUT_MOVE_BWD,
INPUT_ACTION,
};
// Actions used by this app
DIACTION g_rgGameAction[] =
{
// TODO: change as needed. Be sure to delete user map files
// (C:\Program Files\Common Files\DirectX\DirectInput\User Maps\*.ini)
// after changing this, otherwise settings won't reset and will be read
// from the out of date ini files
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -