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

c++ y allegro

Estas en el tema de c++ y allegro en el foro de C/C++ en Foros del Web. Hola a todos. Estoy creando una funcion para c++ para que los objetos se alejen de los puntos de referencia dados a la funcion en ...
  #1 (permalink)  
Antiguo 23/03/2011, 08:35
 
Fecha de Ingreso: febrero-2011
Mensajes: 33
Antigüedad: 13 años, 2 meses
Puntos: 0
c++ y allegro

Hola a todos.

Estoy creando una funcion para c++ para que los objetos se alejen de los puntos de referencia dados a la funcion en si.

Les dejo mi codigo:
Código c++:
Ver original
  1. #include <allegro.h>
  2. #include <stdlib.h>
  3.  
  4. void init();
  5. void deinit();
  6. int dispersion_x(int actual_x , int referencia_x){ //dispersion horizontal por punto de referencia
  7.    
  8.     if(actual_x<referencia_x){    //menor que el punto de referencia  
  9.                              if(actual_x<0){actual_x=rand()%SCREEN_W; // si pasa de la pantalla devuelve a una posicion dentro de la pantalla
  10.                                             return actual_x;     }
  11.                              else{return --actual_x;};} // sino devuelve en sustractorio que creara movimiento por cada frame
  12.     if (actual_x>referencia_x){   //mayor que el punto de referencia
  13.                                   if(actual_x > SCREEN_W){actual_x=rand()%SCREEN_W; // si pasa de la pantalla devuelve a una posicion dentro de la pantalla
  14.                                                           return actual_x;}
  15.                                   else{return ++actual_x;};};}; // sino devuelve en sumatorio que creara movimiento por cada frame
  16.                                        
  17. int dispersion_y(int actual_y , int referencia_y){ //dispersion vertical por punto de referencia
  18.    
  19.     if(actual_y<referencia_y){  //menor que el punto de referencia  
  20.                              if(actual_y<0){actual_y=rand()%SCREEN_H; // si pasa de la pantalla devuelve a una posicion dentro de la pantalla
  21.                                             return actual_y;     }
  22.                              else{return --actual_y;};} // sino devuelve en sustractorio que creara movimiento por cada frame
  23.     if (actual_y>referencia_y){  
  24.                                   if(actual_y > SCREEN_H){actual_y=rand()%SCREEN_H; // si pasa de la pantalla devuelve a una posicion dentro de la pantalla
  25.                                                           return actual_y;}
  26.                                   else{return ++actual_y;};};}; // sino devuelve en sumatorio que creara movimiento por cada frame
  27.    
  28. int main() {
  29.     init();
  30.     int ref_x=SCREEN_W/2;              //Centro horizontal de la pantalla
  31.     int ref_y=SCREEN_H/2;              //Centro vertical de la pantalla
  32.     int pos_x=rand()%SCREEN_W;         //Una posicion cualquiera dentro del ancho de la pantalla
  33.     int pos_y=rand()%SCREEN_H;         //Una posicion cualquiera dentro del alto de la pantalla
  34. BITMAP* buffer;                        //Creo bitmap que servira para el dibujo
  35. buffer = create_bitmap(SCREEN_W,SCREEN_H); //Del tamaño de SCREEN
  36.  
  37.     while (!key[KEY_ESC]) {                //Comienza el ciclo de animacion
  38.         clear_bitmap(buffer);              //Limpia para el siguiente frame
  39. circlefill(buffer, dispersion_x(pos_x,ref_x), dispersion_y(pos_y,ref_y), 5, makecol(255,255,255));  //Dibujo circulo pequeño
  40.  
  41. pos_x=dispersion_x(pos_x,ref_x);              //la posicion original horizontal toma el valor de la funcion para crear movimiento
  42. pos_y=dispersion_y(pos_x,ref_y);              //la posicion original vertical toma el valor de la funcion para crear movimiento
  43.  
  44. blit(buffer, screen, 0,0,0,0,SCREEN_W,SCREEN_H); //se pasa lo dibujado a la pantalla y cierra el frame
  45.        
  46.     }
  47.  
  48.     deinit();
  49.     return 0;
  50. }
  51. END_OF_MAIN()
  52.  
  53. void init() {
  54.     int depth, res;
  55.     allegro_init();
  56.     depth = desktop_color_depth();
  57.     if (depth == 0) depth = 32;
  58.     set_color_depth(depth);
  59.     res = set_gfx_mode(GFX_AUTODETECT_WINDOWED,800, 600, 0, 0);
  60.     if (res != 0) {
  61.         allegro_message(allegro_error);
  62.         exit(-1);
  63.     }
  64.  
  65.     install_timer();
  66.     install_keyboard();
  67.     install_mouse();
  68.     /* add other initializations here */
  69. }
  70.  
  71. void deinit() {
  72.     clear_keybuf();
  73.     /* add other deinitializations here */
  74. }

funciona menos cuando y>Screen_H.
Si alguien me pudiera ver el codigo bien a ver donde tengo el fallo se lo agradeceria mucho... fijo que es un ;

Última edición por LionCode; 23/03/2011 a las 08:45
  #2 (permalink)  
Antiguo 23/03/2011, 10:24
 
Fecha de Ingreso: febrero-2011
Mensajes: 33
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: c++ y allegro

error:
Código C++:
Ver original
  1. pos_x=dispersion_x(pos_x,ref_x);        
  2. pos_y=dispersion_y(pos_x,ref_y);

solucion:
Código C++:
Ver original
  1. pos_x=dispersion_x(pos_x,ref_x);        
  2. pos_y=dispersion_y(pos_y,ref_y);

el infame copiar pegar y olvidarme de cambiar la ultima letra bueh.

Les dejo la funcion por si quieren darle un uso.

Etiquetas: Ninguno
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 21:22.