elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15
111  Programación / Programación C/C++ / Re: Duda con temporizador en C++ en: 7 Julio 2013, 01:23 am
Te recomiendo que hagas algunas prácticas con hilos... Si tienes linux mejor (ahí tienes la librería pthread que es más fácil que Windows API).

Eso voy a hacer la verdad, porque es la primer vez que oigo de su existencia y me podrían ser muy útiles. Sí, tengo linux, pero por alguna razón no me funciona bien allegro así que utilizaré windows.
Un saludo y gracias por todo :P

112  Programación / Programación C/C++ / Re: Duda con temporizador en C++ en: 7 Julio 2013, 01:10 am
Vale, entonces cuando en el while yo ejecute Funcion, esta se ejecutará automáticamente en segundo plano, ¿no?

La verdad es que no entiendo muy bien todo eso de DWORD, LPVOID y lpParam. ¿Qué significan exactamente?

Ya verás, ahora con esto mi juego del Snake va a mejorar mucho xDD
Un saludo y gracias :D
113  Programación / Programación C/C++ / Re: Duda con temporizador en C++ en: 7 Julio 2013, 00:46 am
Pues no xD.

Aver, main llama a funcion_principal(). En funcion_principal() llama a funcion1(), espera 3 segundos y después llama a funcion2().

Si es eso, solo tendrías que poner rest(3000), si no es eso entonces no te entiendo... A no ser que quieras que la función y el main se ejecuten al mismo tiempo (¿Es eso?)

Exacto, lo has entendido perfectamente. Es justo eso lo que quiero que haga, pero NO puedo usar el rest porque entonces se para TODO el juego y yo solo quiero que se pare esa función.

Mi idea es que mientras se esperan 3 segundos el while se ejecute normalmente las veces que haga falta y cuando haya pasado el tiempo se ejecute funcion2.

Un saludo
114  Programación / Programación C/C++ / Re: 1º Reto de Retrodev en: 7 Julio 2013, 00:41 am
¡Allegro! Por fin alguien lo usa ^^

Aunque no acabo de entender bien tú código, no sé, es un poco extraño (¿Que es retraso?)

Ahora que lo veo, en realidad es un poco retorcido pero es útil. Retraso es una variable que aumenta cada vez que se realiza un ciclo. Y solo cuando esta variable es igual a 10 (se han completado 10 ciclos) se realizan las acciones de mover a la serpiente y se resetea el valor. Si te fijas las acciones que no son de movimiento están fuera de este if.

La función de este valor es bajar un poco la velocidad del juego. También podría haberse hecho aumentando el valor del rest del final, pero con esta variable se concreta que solo queremos bajarle el "ritmo" al movimiento de la serpiente. Prueba a quitarla y se hace injugable, te lo aseguro  :xD
Un saludo
115  Programación / Programación C/C++ / Re: Duda con temporizador en C++ en: 7 Julio 2013, 00:25 am
¿Te refieres a una función que se ejecute cada 3 segundos?

Ya encontré como hacer eso, pero no es a lo que me refiero. Lo que me gustaría es algo como así:
Código
  1. void funcion_principal(){
  2.       funcion1();
  3.       esperar(3);
  4.       funcion2();
  5. }

Y luego en el main poder llamar a "funcion_principal" y que esta se ejecute en ese orden y con ese tiempo. No se si me explico... :xD
Un saludo
116  Programación / Programación C/C++ / Duda con temporizador en C++ en: 7 Julio 2013, 00:13 am
Buenas, estoy haciendo un videojuego en C++ con allegro, y me gustaría ejecutar una función 3 segundos después de que se haya ejecutado otra. (Es decir ejecutar una función, esperar tres segundos, y ejecutar la otra.)

No quiero usar la función rest(3000), porque esto ralentiza el juego al estar ejecutandose en un bucle while.
Quisiera saber si hay alguna libreria o algún truco que me sirva. He buscado en google un poco, pero no encuentro mi problema en particular.

Un saludo y gracias de antemano ;D
117  Programación / Programación C/C++ / Re: 1º Reto de Retrodev en: 6 Julio 2013, 23:53 pm
Ya está lista la ALPHA de mi juego. Aquí el código:

Código
  1. #include <allegro.h>
  2. #include <list>
  3. #include <cstdlib>
  4. #include <time.h>
  5. #include <string>
  6. using namespace std;
  7.  
  8. const int XTAM = 60, YTAM = 40;
  9. const int SZ = 12;
  10.  
  11. int vx = 1, vy = 0;
  12. int al, score = 0;
  13.  
  14. BITMAP *cuadrado1;
  15. BITMAP *cuadradobmp;
  16. BITMAP *buffer;
  17. BITMAP *fruta;
  18. BITMAP *manzanabmp;
  19. BITMAP *fresabmp;
  20. BITMAP *bombabmp;
  21.  
  22. void draw_score()
  23. {
  24.    rectfill(screen, 0,0,200,14,0);
  25.    textprintf(screen, font, 0, 0, -1, "SCORE:  %d", score);
  26. }
  27.  
  28. void pantalla(){
  29.    blit(buffer, screen, 0,0,0,0, XTAM*SZ, YTAM*SZ);
  30. }
  31. struct Punto{
  32.    int x,y;
  33. };
  34.  
  35. void cuadrado(const Punto& p){
  36.    blit(cuadradobmp, cuadrado1, 0, 0, 0, 0, 12, 12);
  37.    draw_sprite(buffer, cuadrado1, p.x*SZ, p.y*SZ);
  38. }
  39.  
  40. void pinta_comida(const Punto& p){
  41.    srand(time(0));
  42.    if (al==0) blit(manzanabmp, fruta, 0, 0, 0, 0, 12, 12);
  43.    if (al==1) blit(fresabmp, fruta, 0, 0, 0, 0, 12, 12);
  44.    draw_sprite(buffer, fruta, p.x*SZ, p.y*SZ);
  45. }
  46.  
  47. Punto al_azar(){
  48.    srand(time(0));
  49.    Punto p = {rand() % XTAM, rand() % YTAM};
  50.    al = rand() % 2;
  51.    return p;
  52. }
  53.  
  54. void teclas(){
  55.        if (key[KEY_UP] && vy != 1){
  56.            vx = 0, vy = -1;
  57.       }else if (key[KEY_DOWN] && vy != -1){
  58.            vx = 0; vy = 1;
  59.       }else if (key[KEY_LEFT] && vx != 1){
  60.            vx = -1, vy = 0;
  61.       }else if (key[KEY_RIGHT] && vx != -1){
  62.            vx = 1, vy = 0;
  63.       }
  64. }
  65.  
  66. bool hay_choque(const Punto& cabeza, const list<Punto>& cola){
  67.    if (cabeza.x >= XTAM  || cabeza.x < 0) return true;
  68.    if (cabeza.y >= YTAM  || cabeza.y < 0) return true;
  69.    list <Punto>::const_iterator it = cola.begin();
  70.    for (; it != cola.end(); it++){
  71.        if (cabeza.x == it->x && cabeza.y == it->y){
  72.            return true;
  73.        }
  74.    }
  75.    return false;
  76. }
  77.  
  78. int main(){
  79.    allegro_init();
  80.    install_keyboard();
  81.  
  82.    set_color_depth(32);
  83.    set_gfx_mode(GFX_AUTODETECT_WINDOWED, XTAM * SZ, YTAM * SZ, 0, 0);
  84.  
  85.    buffer = create_bitmap(XTAM * SZ, YTAM * SZ);
  86.    cuadrado1 = create_bitmap(12,12);
  87.    cuadradobmp = load_bitmap("imagenes/cabeza.bmp", NULL);
  88.    fruta = create_bitmap(12,12);
  89.    fresabmp = load_bitmap("imagenes/fresa.bmp", NULL);
  90.    manzanabmp = load_bitmap("imagenes/manzana.bmp", NULL);
  91.    bombabmp = load_bitmap("imagenes/bomba.bmp", NULL); //Ya desvelo lo que incluire proximamente ;D
  92.  
  93.    list<Punto> cola;
  94.    int engorda = 0;
  95.    int retraso = 0;
  96.  
  97.    bool choque = false;
  98.    Punto cara = {30, 30};
  99.    Punto comida = al_azar();
  100.  
  101.    while(!key[KEY_ESC] && !choque ){
  102.        pantalla();
  103.        retraso++;
  104.        teclas();
  105.        draw_score();
  106.  
  107.         if (retraso==8){
  108.            cola.push_front(cara);
  109.            if (engorda > 0){
  110.                engorda--;
  111.            }else {
  112.                cola.pop_back();
  113.            }
  114.            cara.x += vx;
  115.            cara.y += vy;
  116.            if (hay_choque(cara, cola)){
  117.                choque = true;
  118.  
  119.            } else if (cara.x == comida.x && cara.y == comida.y){
  120.                engorda = 5;
  121.                if (al==0) score += 5;
  122.                else if (al==1) score +=10;
  123.                comida = al_azar();
  124.                while (hay_choque(comida, cola) ||
  125.                    comida.x == cara.x && comida.y == cara.y ||
  126.                    comida.y < 5){
  127.                        comida = al_azar();
  128.                    }
  129.            }
  130.  
  131.            retraso = 0;
  132.        }
  133.    if (!choque){
  134.            clear(buffer);
  135.            list<Punto>::const_iterator it;
  136.            for (it = cola.begin(); it != cola.end(); it++){
  137.                cuadrado(*it);
  138.            }
  139.            cuadrado(cara);
  140.            pinta_comida(comida);
  141.  
  142.        }
  143.        rest(10);
  144.    }
  145.  
  146.    rectfill(screen, 0,0,200,14,0);
  147.    textprintf(screen, font, 200, 200, -1, "Tu puntuacion ha sido de:  %d", score);
  148.    rest(2000);
  149.    return 0;
  150. }
  151. END_OF_MAIN();
  152.  

He usado Allegro, una lista para crear a mi serpiente y estructuras en lugar de clases. El juego de momento solo tiene una fruta cada vez, aunque hay varios tipos de fruta (cada una da diferentes puntos).
El juego funciona perfectamente, aunque aún me queda incluirle un menú, más frutas y algún tipo de jefe o algo así  >:D

PD: Cuando pueda subiré los archivos compilados en linux y windows :D
118  Programación / Programación General / Re: [Ehn-Dev 2013] - Hilo de discusión / comentarios / dudas. en: 6 Julio 2013, 16:56 pm
:( no me da tiempo :/ buena suerte a los participantes =D

A mi me pasa lo mismo. Pero bueno, será el año que viene  :xD
Un saludo
119  Programación / Programación General / Re: [Ehn-Dev 2013] - Hilo de discusión / comentarios / dudas. en: 6 Julio 2013, 13:37 pm
Conseguí pasarme el Mayhem  :laugh:



Aunque Warz0n3 te recomiendo que cambies los controles pues son bastante incomodos.
Un saludo y felicidades por el juego  ;-)
120  Programación / Programación General / Re: [Ehn-Dev 2013] - Hilo de discusión / comentarios / dudas. en: 6 Julio 2013, 12:20 pm
Se te ha olvidado poner Vigenère Cryptochat en la encuesta y en la lista de participantes.
Un saludo
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines