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
#include <allegro.h> #include <stdlib.h> void init(); void deinit(); int dispersion_x(int actual_x , int referencia_x){ //dispersion horizontal por punto de referencia if(actual_x<referencia_x){ //menor que el punto de referencia if(actual_x<0){actual_x=rand()%SCREEN_W; // si pasa de la pantalla devuelve a una posicion dentro de la pantalla return actual_x; } else{return --actual_x;};} // sino devuelve en sustractorio que creara movimiento por cada frame if (actual_x>referencia_x){ //mayor que el punto de referencia if(actual_x > SCREEN_W){actual_x=rand()%SCREEN_W; // si pasa de la pantalla devuelve a una posicion dentro de la pantalla return actual_x;} else{return ++actual_x;};};}; // sino devuelve en sumatorio que creara movimiento por cada frame int dispersion_y(int actual_y , int referencia_y){ //dispersion vertical por punto de referencia if(actual_y<referencia_y){ //menor que el punto de referencia if(actual_y<0){actual_y=rand()%SCREEN_H; // si pasa de la pantalla devuelve a una posicion dentro de la pantalla return actual_y; } else{return --actual_y;};} // sino devuelve en sustractorio que creara movimiento por cada frame if (actual_y>referencia_y){ if(actual_y > SCREEN_H){actual_y=rand()%SCREEN_H; // si pasa de la pantalla devuelve a una posicion dentro de la pantalla return actual_y;} else{return ++actual_y;};};}; // sino devuelve en sumatorio que creara movimiento por cada frame int main() { init(); int ref_x=SCREEN_W/2; //Centro horizontal de la pantalla int ref_y=SCREEN_H/2; //Centro vertical de la pantalla BITMAP* buffer; //Creo bitmap que servira para el dibujo buffer = create_bitmap(SCREEN_W,SCREEN_H); //Del tamaño de SCREEN while (!key[KEY_ESC]) { //Comienza el ciclo de animacion clear_bitmap(buffer); //Limpia para el siguiente frame circlefill(buffer, dispersion_x(pos_x,ref_x), dispersion_y(pos_y,ref_y), 5, makecol(255,255,255)); //Dibujo circulo pequeño pos_x=dispersion_x(pos_x,ref_x); //la posicion original horizontal toma el valor de la funcion para crear movimiento pos_y=dispersion_y(pos_x,ref_y); //la posicion original vertical toma el valor de la funcion para crear movimiento blit(buffer, screen, 0,0,0,0,SCREEN_W,SCREEN_H); //se pasa lo dibujado a la pantalla y cierra el frame } deinit(); return 0; } END_OF_MAIN() void init() { int depth, res; allegro_init(); depth = desktop_color_depth(); if (depth == 0) depth = 32; set_color_depth(depth); res = set_gfx_mode(GFX_AUTODETECT_WINDOWED,800, 600, 0, 0); if (res != 0) { allegro_message(allegro_error); } install_timer(); install_keyboard(); install_mouse(); /* add other initializations here */ } void deinit() { clear_keybuf(); /* add other deinitializations here */ }
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 ;