⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cidade.cpp

📁 3d游戏开发的基础应用,3d场景的真实展现,可以是很好的教材
💻 CPP
📖 第 1 页 / 共 5 页
字号:
						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 + -