Campo de estrellas

 
Hardware
Modo 13h
Retrazado Vertical
Primitivas
La Paleta
Pantallas Virtuales
Sprites
Tablas Prefedifinidas
Efectos
Texto
Formatos gráficos
Periféricos
Optimizaciones
Herramientas
Cursos
Links
Foro
Correo Electrónico
El efecto que realizaremos será el de simular un campo de estrellas que se mueve horizontalmente por la pantalla. Para  conseguir  este  efecto, primero tendremos que crear una  estructura  a  la que llamaremos stars, dentro de esta definiremos tres variables  del  tipo int, a la que llamaremos x, y, z respectivamente. Luego crearemos un arreglo de estructuras, el tamaño será la longitud del número de estrellas que queremos que aparezcan en la pantalla. Por ejemplo nosotros crearemos una constante llamada MAX_STARS que será la longitud del arreglo:

#define MAX_STARS 180

El arreglo de estructuras quedaría declarada de la siguiente forma:
 

struct
{
    int x, y, z;
} stars[MAX_STARS];

Una vez  iniciado  el modo gráfico, con  la ayuda de la función random() generaremos  las estrellas aleatoriamente con un ciclo de la siguiente manera:
 

for(i=0; i<MAX_STARS; i++)
{
    stars[i].x=random(320);
    stars[i].y=random(200);
    stars[i].z=random(3)+1;
}

Como  podemos ver, con este el ciclo  ponemos a cada estrella un valor  que  está dentro de la pantalla, así lo haremos hasta llegar a la última estrella (MAXSTARS), que  puede  tener el valor que nosotros queramos. Z nos  sirve para saber la velocidad a la que va la estrella, después con esta variable conoceremos el color que tenemos que darle a la estrella para  que tenga un efecto de profundidad, así que tenemos que cuanto más de prisa se  mueva  la  estrella (z=3), mas blanca  será, y al contrario cuanto más lenta (z=1) más  oscura será. Para cambiar los colores por grises lo haremos con la función  SetColor() y así para cambiar los colores del 1 al 3, haríamos lo siguiente:

SetColor(1, 26, 26, 26);
SetColor(2, 44, 44, 44);
SetColor(3, 62, 62, 62);

Ahora solo nos queda ir dibujando las estrellas mediante un  ciclo del tipo do-while, dentro  del cual habrá unos pasos a seguir para ir controlando las estrellas. Veamos entonces como nos quedaría el código para colocar las estrellas:
 

do
{
    WaitRetrace();
    for(i=0; i<MAX_STARS; i++)
    {
        PutPixel(stars[i].x, stars[i].y, 0, DIR_VGA);
        stars[i].x+=stars[i].z;
        if(stars[i].x>320)
        {
            stars[i].x=0;
            stars[i].y=random(200);
            stars[i].z=random(3)+1;
        }
        PutPixel(stars[i].x, stars[i].y, stars[i].z, DIR_VGA);
    }
} while(!kbhit());

La explicación del código es muy simple. Para empezar tenemos un bucle do-while que se repetirá hasta que se presione alguna tecla. Luego esperamos el retrazado vertical, y hacemos un for para recorrer cada una de las estrellas. Dentro de este ciclo primero se borra la estrella, luego se incrementa la posicion z veces. Después se verifica si alguna estrella ha salido de la pantalla, si es así creamos una nueva estrella, y al final colocamos el punto en la posicion (x,y) y de color z.

Como ven hacer este efecto es muy simple. Incluso con unas cuantas modificaciones podemos cambiar la dirección en que van las estrellas, y tambien le podemos dar mas planos haciendo z mas grande, aunque en este caso la paleta tambien se vería modificada.



Ejemplo
 

Librería gráfica: vgalib.h

Ver ejemplo
 
 

Bajar todo Bajar todo (33 Kb)


Volver a Efectos
1
Hosted by www.Geocities.ws

1