Realizar dos operaciones al mismo tiempo en un mismo programa ayuda...

Iniciado por SilentBolt, 8 Agosto 2017, 04:18 AM

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

SilentBolt

Hola!!!, soy yo otra vez xD... bueno estuve haciendo un programa en el cual aparecen varios asteriscos que se deben mover al mismo tiempo pero, no estoy del todo seguro de como hacer que estas dos funciones se ejecuten al mismo tiempo, investigue y consegui unos comandos los cuales se usan con la libreria windows.h usando hilos pero quisiera saber si alguno de ustedes me puede dar otras alternativas, porque nunca he utilizado la libreria windows.h  :(, porque sino tendre que aprender a usarlo autodidacto.

ivancea96

Explica lo de los asteriscos que se mueven al mismo tiempo.

Probablemente no necesites hilos para eso. Ten en cuenta que el procesador es mucho más rápido que la vista humana, con lo cual mover un asterisco y luego mover el otro es lo mismo que hacerlo "al mismo tiempo".

SilentBolt

en realidad, lo que quiero hacer es una clase de juego de guerra xD, pero de asteriscos, y que cada vez que presionas una tecla el asterisco aparezca y empieze a moverse a la izquierda, como si fuera una tropa, ahora viene mi problema necesito hacer una funcion que haga el movimiento del asterisco (sin parar) y otra que reciba por tecla la accion del usuario (donde aparecera el asterisco)

0and6

ok, ok quires hacer un juego, la libreria windows.h generalmente la utilizan para crear funciones que pinten los caracteres en una consola, borrarlos, detectar el teclado, no se si tambien el sonido, etc, etc.

un juego sencillo solo es un bucle infinito, dentro de el se ejecutan funciones que las podriamos reducir en leer teclado, actualizar movimientos, dibujar nuevas posiciones; estas funciones se ejecutan una detras de la otra y el ciclo se repite, para que se logre un efecto de que las balas/tanques estan en movimiento un juego lo que hace es dibujar alrededor de 30/60 veces por segundo, y esto nos da una sensacion de movimiento

Tu no necesitas hilos, aunque los puedes implementas, solo necesitas crear un bucle que se ejecute unas 30 veces por segundo y dentro de ese bucle lees el teclado y dibujas.

SilentBolt

Tal como dices, uso un bucle que imprime infinitamente los movimientos en pantalla, lo que sucede es que yo quiero que el asterisco se mueva continuamente, pero cada vez que avanza, este se detiene a causa de que el programa esta esperando por teclado la accion del usuario, lo que quiero es que el asterisco se mueva continuamente y a la vez el el programa espere la accion del jugador (donde enviara el siguiente asterisco), no se si me explico.

ivancea96

La verdad, yo en tu caso me plantearía empezar a utilizar una librería para gráficos (como SFML, por ejemplo), y hacer el juego con gráficos.
Una consola, al fin y al cabo, es una consola. Es dar vuetas de más.


En cualquier caso, si sigues con esto:

- ¿Utilizas C o C++? Si utilizas C++, la librería estandar tiene threads a partir de C++11 (un estandar relativamente antiguo, asi que probablementelo tengas). Su include es <thread> y la clase se llama "thread", y son muy sencillos e usar.

- Sin threads de C++, puedes usar los de windows. Son algo más "complejos", pero bueno, bien englobado todo en funciones, todo se hace sencillo.

- Otra opción es, con 1 solo thread, dibujar y ver si hay teclas pulsadas. Para esto, sin bloquear la aplicación leyendo la entrada del usuario, puedes usar la función de la WinAPI "GetAsyncKeyState", que te dice si una tecla está pulsada o no.

Vistas estas alternativas, ¿cuál elegirías?