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#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
int pos_x
=rand()%SCREEN_W
; //Una posicion cualquiera dentro del ancho de la pantalla int pos_y
=rand()%SCREEN_H
; //Una posicion cualquiera dentro del alto 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 ;