Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: onetake en 22 Enero 2017, 18:52 pm



Título: Duda en código.
Publicado por: onetake en 22 Enero 2017, 18:52 pm
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
  1. {
  2.                                            attacker.AddFlag4((ulong)MsgUpdate.Flags4.FreezingPelter);
  3.                                            attacker.RemoveFlag4((ulong)MsgUpdate.Flags4.HealingSnow);
  4.                                            attacker.RemoveFlag4((ulong)MsgUpdate.Flags4.ChillingSnow);
  5. attacker.MinAttack += 1000;
  6. attacker.MaxAttack += 3000;
  7.  
  8.                                        }



Quiero que el

Código
  1. attacker.MinAttack += 1000;
  2. 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..


Título: Re: Duda en código.
Publicado por: ivancea96 en 22 Enero 2017, 23:09 pm
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)


Título: Re: Duda en código.
Publicado por: MAFUS en 23 Enero 2017, 21:25 pm
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.

Código
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. enum {
  5.    TIMEOUT_RUNNING,
  6.    TIMEOUT_DONE,
  7.    TIMEOUT_ERROR = -1
  8. };
  9.  
  10. int timeout(unsigned segundos) {
  11.    static time_t t;
  12.    static unsigned s;
  13.  
  14.    if(segundos) {
  15.        time(&t);
  16.        s = segundos;
  17.    }
  18.  
  19.    if(!s)
  20.        return TIMEOUT_ERROR;
  21.  
  22.    if(difftime(time(NULL), t) >= s) {
  23.        s = 0;
  24.        return TIMEOUT_DONE;
  25.    }
  26.  
  27.    return TIMEOUT_RUNNING;
  28. }
  29.  
  30. int main() {
  31.    int i = 0;
  32.  
  33.    if(timeout(1) == TIMEOUT_ERROR)
  34.        return 1;
  35.  
  36.    while(i < 5) {
  37.        printf("%i seg\r", i);
  38.        fflush(stdout);
  39.  
  40.        if(timeout(0) == TIMEOUT_DONE) {
  41.            timeout(1);
  42.            ++i;
  43.        }
  44.    }
  45. }

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.