Foros del Web » Programación para mayores de 30 ;) » C/C++ »

relojes en c++

Estas en el tema de relojes en c++ en el foro de C/C++ en Foros del Web. Hola a todos estoy intentando programar el comecocos en c++ y hay algo que no me acaba de salir. He conseguido que pacman al comerse ...
  #1 (permalink)  
Antiguo 22/11/2014, 10:57
 
Fecha de Ingreso: noviembre-2014
Mensajes: 11
Antigüedad: 9 años, 5 meses
Puntos: 0
relojes en c++

Hola a todos estoy intentando programar el comecocos en c++ y hay algo que no me acaba de salir.

He conseguido que pacman al comerse la bolita grande, al colisionar con enemigos en vez de morir los mande directamente a la zona de "descanso" pero lo que no consigo es hacer que pacman tenga esta habilidad solo durante un tiempo limitado, no se 8 segundos o algo por estilo.

En mi funcion juego tengo un do while que lo cubre todo para que al apretar esc, se cierre la aplicacion he probado a poner cosas como:

for (reset=3000; reset < 1; reset --);
{
modokiller = 1;

}

int reset = 3000;
do{
modokiller = 1;
reset --;
}while (reset !=0)

evidentemente estos bucles estan dentro del if que se asegura que pacman esta en la posicion de la bolita grande, si se cumple la condicion, entramos en mis bucles propuestos

lo he probado con rest tambien pero entonces detengo todo el juego.

Yo entiendo que esta funcion tengo que ponerla dentro de mi gran bucle do while del juego, pero nunca me acaba de salir, necesito una funcion especifica para que una variable valga x durante 10 segundos, y pasados esos diez segundos vuelva a su valor inicial y.

Muchas gracias de antemano. Saludos a todos
  #2 (permalink)  
Antiguo 24/11/2014, 02:07
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: relojes en c++

Tienes varias opciones para resolver tu problema:

1. Asumes que tu juego funciona a 25 fps... luego puedes tener un contador de "frames" para los cuales está activo un determinado evento, por ejemplo el poder de la inmunidad. Para el caso concreto, 8 segundos a 25 fps serían 180 frames. En cada frame tendrías que decrementar esta variable hasta que llegue a 0, momento en el que el "powerup" se desactiva. Este mecanismo es el más sencillo de implementar pero puede dar problemas si varía la tasa de fps durante el juego.

2. Capturas la fecha del sistema. Si son las 12:00:00 y el "powerup" debe durar 8 segundos, te basta con capturar la fecha actual del sistema, sumar 8 segundos... este será el momento en el que el powerup dejará de estar activo. En los sucesivos frames verificas que la fecha actual del sistema no supera la fecha límite del powerup... cuando se supere simplemente lo desactivas y listo.

Un saludo.
  #3 (permalink)  
Antiguo 24/11/2014, 06:07
 
Fecha de Ingreso: noviembre-2014
Mensajes: 11
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: relojes en c++

muchas gracias por la ayuda, pero sigo sin saber como hacerlo, estoy empezando con la programacion y conozco muy pocas funciones de la libreria allegro y en general del mundo de la programacion...

nose que comando exacto deberia utilizar para este caso, como e dicho e intentado con el for un do while que resta a un contador y un rest, pero ninguno me a acabado de funcionar, nose si hay algun comando especifico para ahacer que una variable valga x durante un tiempo ( me da igual cuanto, luego ya ire modificando numeros y ajustandolo) y que al terminar el temporizador vuelva a valer y.

muchas gracias.
  #4 (permalink)  
Antiguo 24/11/2014, 06:25
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: relojes en c++

Si usas el estándar C++11, puedes hacer uso de la clase "chrono"

Código C++:
Ver original
  1. system_clock::time_point now = std::chrono::system_clock::now( );
  2. time_t now_c = std::chrono::system_clock::to_time_t( now );

time_t es un alias. Almacena el número de segundos desde el 1 de Enero de 1970. Con las dos líneas anteriores recuperas la fecha actual del sistema.

Ahora habría que calcular el momento en el que finaliza el powerup. Para sumar 8 segundo sería algo como:

Código C++:
Ver original
  1. time_t powerupEnd = now_c + 8;

Y después te queda comprobar si el powerup ha caducado o no:

Código C++:
Ver original
  1. system_clock::time_point now = std::chrono::system_clock::now( );
  2. time_t now_c = std::chrono::system_clock::to_time_t( now );
  3.  
  4. if ( now_c >= powerupEnd )
  5. {
  6.   // Powerup caducado
  7. }

Posiblemente el código quede más bonito si creas una función que te devuelva, directamente el time_t de la hora actual, para no tener que ir duplicando código.
  #5 (permalink)  
Antiguo 24/11/2014, 12:36
 
Fecha de Ingreso: noviembre-2014
Mensajes: 11
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: relojes en c++

ostras muchas gracias lo probare a ver que tal sale :D

Etiquetas: funcion, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:58.