Jump to content

Recommended Posts

Posted (edited)

Olá,

Estou desenvolvendo um jogo, e estou com alguns problemas, quero que minha nave possa teletransportar para ir, e se a tecla for apertada novamente dentro de 3 segundos, a nave volte para o ponto onde ela usou o teletransporte e no tempo de recarga são adicionados 2 segundos, caso a tecla não for apertada denovo dentro de 3 segundos, o player não podera mais teleportar . O que eu fiz está funcionando, mas há bugs.. Então tentei usar algumas variáveis booleanas e não estava dando certo nada, então passei para as variáveis integers e consegui consertar alguns, mas outros continuam.

BUG : Se a NaveX e NaveY for diferente de TeleX e TeleY o jogador não podera mais teleportar.. esse foi o unico jeito q funcionou o problema da nave ir e voltar..

 

	Var
		NaveX,NaveY                            : Integer; // Coordenadas X e Y da Nave.
		DirecaoX,DirecaoY                      : Integer; // Identificara a direcao que o player esta mirando.
        TeleX,TeleY                            : Integer; // Coordenadas X e Y do Teleporte.
		TempoT                                 : Integer; // Temporiza o tempo de recarga da habilidade.
		TempoRealT                             : Real;    // Tempo restante para que a habilidade saia do tempo de recarga.
		CooldownT,Teleportou                   : Boolean; // Identifica se a habilidade esta em tempo de recarga.

(* Procedimento que ira desenhar o slot da habilidade TELETRANSPORTE *) 
	Procedure InterfaceT;
	Begin                                        //////////////////////////////////////////////////////////////
  	LimpadorXY('               ',2,5);         // APAGA OS SLOTS DA HABILIDADE, EVITAR BUGS.               //
  	LimpadorXY('               ',2,6);         // TEMPORIZA O TEMPO PARA QUE A HABILIDADE POSSA SER USADA. //
  	Dec(TempoT);                               /////////////////////////////////////////////////////////////
  	TempoRealT := TempoT / 40;
  	WriteCorXY(15,'TELETRANSPORTE',4,4);
  	TemporizadorXY(Round(TempoRealT),'',10,5);
  	WriteCorXY(15,'SEGUNDOS',7,6);
  	If (NaveX <> TeleX) and (NaveY <> TeleY) then   // << PROBLEMA AQUI, TENTEI USAR VARIAVEIS BOOLEANS MAS NAO ESTAVA ADIANTANDO..
		Begin
		  Teleportou := False;
		  LimpadorXY(' ',TeleX,TeleY);
		  TeleX := NaveX;
		  TeleY := NaveY;
		End;			 
  	If (TempoT <= 1) then
  	Begin
    	CooldownT := False;
    	LimpadorXY('               ',2,5);
    	LimpadorXY('               ',2,6);
    	WriteCorXY(10,'PRONTO',8,5);
  	End;
	End;
  
   { ----------------------------------------------------------- }                 

      'J': Begin
             If (Teleportou = True) then 
             Begin
               Teleportou := False;
               WriteCorXY(CorNave,' ',NaveX,NaveY);
               TempoT := TempoT + 80;
               NaveX := TeleX;
               NaveY := TeleY;
               If (DirecaoX < 0) then 
			   Begin
				 WriteCorXY(CorNave,NaveE,NaveX,NaveY);
                 NaveX := NaveX;
                 NaveY := NaveY;
                 TeleX := NaveX;
                 TeleY := NaveY;
               End;
               If (DirecaoX > 0) then 
			   Begin
			     WriteCorXY(CorNave,NaveD,NaveX,NaveY);
                 NaveX := NaveX;
                 NaveY := NaveY;
                 TeleX := NaveX;
                 TeleY := NaveY;
               End;
               If (DirecaoY < 0) then 
			   Begin
				 WriteCorXY(CorNave,NaveC,NaveX,NaveY);
                 NaveX := NaveX;
                 NaveY := NaveY;
                 TeleX := NaveX;
                 TeleY := NaveY;
               End;
               If (DirecaoY > 0) then 
			  Begin
				 WriteCorXY(CorNave,NaveB,NaveX,NaveY);
                 NaveX := NaveX;
                 NaveY := NaveY;
                 TeleX := NaveX;
                 TeleY := NaveY;
               End;								 								                  
             End;
             If (CooldownT = False) and (TempoT <= 1) then
             Begin                                                  /////////////////////////////////////////////////////
               If (DirecaoX < 0) and (NaveX > Teleporte + 1) then   // QUANDO A HABILIDADE TELETRANSPORTE FOR USADA    //
               Begin                                                // APAGARA A POSICAO ATUAL DA NAVE E ATUALIZARA    //
                 TeleX := NaveX;                                    // PARA A DIRECAO EM QUE A NAVE APONTOU.           //
                 TeleY := NaveY;                                    // E COMEÇA O TEMPO DE RECARGA DA HABILIDADE.     //
                 LimpadorXY(#15,TeleX,TeleY);                       // PARA A DIRECAO EM QUE A NAVE APONTOU.         //
                 NaveX := NaveX - Teleporte;                        //////////////////////////////////////////////////
                 WriteCorXY(CorNave,NaveE,NaveX,NaveY); 
				 Teleportou := True;        
                 CooldownT := True;
                 TempoT := 160;                                 // ESQUERDA
               End
               Else if (DirecaoX < 0) and (NaveX < Teleporte) then
               Begin
                 TeleX := NaveX;
                 TeleY := NaveY;
                 LimpadorXY(#15,TeleX,TeleY);
                 NaveX := 3;
                 WriteCorXY(CorNave,NaveE,NaveX,NaveY);
                 Teleportou := True; 
                 CooldownT := True;
                 TempoT := 160;
               End
               Else if (DirecaoX > 0) and (NaveX < 78-Teleporte) then    // DIREITA
               Begin
                 TeleX := NaveX;
                 TeleY := NaveY;
                 LimpadorXY(#15,TeleX,TeleY);
                 NaveX := NaveX + Teleporte ;
                 WriteCorXY(CorNave,NaveD,NaveX,NaveY);
                 Teleportou := True; 
                 CooldownT := True;
                 TempoT := 160;
               End
               Else if (DirecaoX > 0) and (NaveX >= 78-Teleporte) then
               Begin
                 TeleX := NaveX;
                 TeleY := NaveY;
                 LimpadorXY(#15,TeleX,TeleY);
                 NaveX := 78;
                 WriteCorXY(CorNave,NaveE,NaveX,NaveY);
                 Teleportou := True; 
                 CooldownT := True;
                 TempoT := 160;
               End
               Else if (DirecaoY > 0) and (NaveY < 48-Teleporte ) then    // BAIXO
               Begin
                 TeleX := NaveX;
                 TeleY := NaveY;
                 LimpadorXY(#15,TeleX,TeleY);
                 NaveY := NaveY + Teleporte;
                 WriteCorXY(CorNave,NaveB,NaveX,NaveY);
                 Teleportou := True; 
                 CooldownT := True;
                 TempoT := 160;
               End
               Else if (DirecaoY > 0) and (NaveY >= 48-Teleporte ) then
               Begin
                 TeleX := NaveX;
                 TeleY := NaveY;
                 LimpadorXY(#15,TeleX,TeleY);
                 NaveY := 48;
                 WriteCorXY(CorNave,NaveB,NaveX,NaveY);
                 Teleportou := True; 
                 CooldownT := True;
                 TempoT := 160;
               End
               Else if (DirecaoY < 0) and (NaveY > 11+Teleporte) then    // CIMA
               Begin
                 TeleX := NaveX;
                 TeleY := NaveY;
                 LimpadorXY(#15,TeleX,TeleY);
                 NaveY := NaveY - Teleporte;
                 WriteCorXY(CorNave,NaveC,NaveX,NaveY);
                 Teleportou := True; 
                 CooldownT := True;
                 TempoT := 160;
               End
               Else if (DirecaoY < 0) and (NaveY <= 11+Teleporte ) then
               Begin
                 LimpadorXY(#15,NaveX,NaveY);
                 NaveY := 11;
                 WriteCorXY(CorNave,NaveB,NaveX,NaveY);
                 Teleportou := True; 
                 CooldownT := True;
                 TempoT := 160;
               End;
             End;
           End;
         End;
                 
   { --------------------------------------------------------------------------------------------- }  
    { FAZ A CONTAGEM REGRESSIVA DO TEMPO DE RECARGA DAS HABILIDADES ENQUANTO A NAVE ESTA PARADA }
           If (CooldownT = True) and (TempoT > 1) then
           Begin
             InterfaceT;
           End;          
           Delay(ControlT);       
         End;
      Until (KeyPressed = True);
   { --------------------------------------------------------------------------------------------- }
   { FAZ A CONTAGEM REGRESSIVA DO TEMPO DE RECARGA DAS HABILIDADES ENQUANTO A NAVE SE MOVIMENTA} 
    If (CooldownT = True) and (TempoT > 1) then
    Begin
      InterfaceT;
    End;    
Edited by Gabriel Gomes

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.