Duda en código.

Iniciado por onetake, 22 Enero 2017, 18:52 PM

0 Miembros y 1 Visitante están viendo este tema.

onetake

Hola que tal, me paso por acá para hacerles una pregunta ya que me estoy introduciendo en este mundo de la programación y tengo una pequeña duda...

Resulta que estoy trabajando con un juego para ir mejorando en esto.. y pues resulta que tengo una duda sobre un código el cual es este:

Código (csharp) [Seleccionar]
{
                                            attacker.AddFlag4((ulong)MsgUpdate.Flags4.FreezingPelter);
                                            attacker.RemoveFlag4((ulong)MsgUpdate.Flags4.HealingSnow);
                                            attacker.RemoveFlag4((ulong)MsgUpdate.Flags4.ChillingSnow);
attacker.MinAttack += 1000;
attacker.MaxAttack += 3000;

                                        }




Quiero que el

Código (csharp) [Seleccionar]
attacker.MinAttack += 1000;
attacker.MaxAttack += 3000;


Se repita cada 5 segundos, hay alguna manera de que pueda hacerlo, ya que no tengo idea se los agradezco de antemano si pueden ayudarme, sin más nada que decir Saludos..

ivancea96

Es difícil responder a esto.

Dices que es un juego, así que intuyo que tendrás algún tipo de bucle principal. Podría ser ahí donde lo hagas (llamar a una función que lo actualice si han pasado 5 segundos, por ejemplo)

MAFUS

#2
Te voy a dejar una solución de con un ejemplo. Aviso que es un temporizador el cual solo puede existir uno al mismo tiempo. Hay que mirar todo el rato si ha terminado (polling) pero siendo el juego un bucle que se repite no tendrás problema.

#include <stdio.h>
#include <time.h>

enum {
   TIMEOUT_RUNNING,
   TIMEOUT_DONE,
   TIMEOUT_ERROR = -1
};

int timeout(unsigned segundos) {
   static time_t t;
   static unsigned s;
   
   if(segundos) {
       time(&t);
       s = segundos;
   }
   
   if(!s)
       return TIMEOUT_ERROR;
       
   if(difftime(time(NULL), t) >= s) {
       s = 0;
       return TIMEOUT_DONE;
   }
   
   return TIMEOUT_RUNNING;
}

int main() {
   int i = 0;
   
   if(timeout(1) == TIMEOUT_ERROR)
       return 1;
   
   while(i < 5) {
       printf("%i seg\r", i);
       fflush(stdout);
       
       if(timeout(0) == TIMEOUT_DONE) {
           timeout(1);
           ++i;
       }
   }
}


Funciona pasándole, en una primera llamada un valor en segundos que quieres que la rutina espere hasta que indique que ha pasado el tiempo. Sólo comprueba, así que no clava el programa para esperar a que pase el tiempo, tu juego puede seguir ejecutándose.

Una vez que termine el conteo se debe iniciar pasándole de nuevo un valor, sino devolverá un error de que no hay tiempo que temporizar, el TIMEOUT_ERROR.