##
LINEAS FLOTANTES

El ejemplo de las líneas flotantes es más difícil de describir que su código. Se ejecuta sobre un bucle infinito y son líneas que se están moviendo continuamente por la ventana que ocupa el applet, rebotando en los bordes y moviéndose continuamente. El código del fichero Lineas.java, es el que contiene las sentencias que crean el applet que se visualiza a continuación. Repasar el código delalgoritmo para entenderlo, que es bastante simple.

> Tu navegador no entiende la marca <APPLET>. La imagen siguiente es la reproducción de la apariencia del applet en pantalla:

    import java.awt.*;
    import java.applet.Applet;

    public class Lineas extends Applet {
        int LINEAS = 25;
        int gSup = 3;
        int gInf = 3;
        int gIzq = 2;
        int gDch = 6;
        int apAncho,apAlto;
        int gLineas[][] = new int[LINEAS][4];

        public void init() {
            Dimension d = size();
            apAncho = d.width;
            apAlto = d.height;
            }

        public void start() {
            gLineas[0][0] = aleatorio( apAncho );
            gLineas[0][1] = aleatorio( apAlto );
            gLineas[0][2] = aleatorio( apAncho );
            gLineas[0][3] = aleatorio( apAlto );

            for( int i=1; i < LINEAS; i++ )
                {
                CopiaLinea( i,i-1 );
                RecalcLinea( i );
                }
            repaint();
            }

        public void paint( Graphics g ) {
            while( true )
                {
                for( int i=LINEAS-1; i > 0; i-- )
                    CopiaLinea( i,i-1 );
                RecalcLinea( 0 );
                g.setColor( Color.black );
                g.drawLine(
                    gLineas[0][0],gLineas[0][1],
                    gLineas[0][2],gLineas[0][3] );
                g.setColor( getBackground() );
                g.drawLine( gLineas[LINEAS-1][0],gLineas[LINEAS-1][1],
                    gLineas[LINEAS-1][2],gLineas[LINEAS-1][3] );
                }
            }

        private void CopiaLinea( int desde,int hasta ) {
            for( int i=0; i < 4; i++ )
                gLineas[desde][i] =  gLineas[hasta][i];
            }

        public int aleatorio( int rango ) {
            double retornoMath;

            retornoMath = Math.random();
            return( (int)(retornoMath * rango) );
            }

        private void RecalcLinea( int i ) {
            gLineas[i][1] += gSup;
            if( (gLineas[i][1] < 0 )  ||  (gLineas[i][1] > apAlto) )
                {
                gSup *= -1;
                gLineas[i][1] += 2*gSup;
                }

            gLineas[i][3] += gInf;
            if( (gLineas[i][3] < 0 )  ||  (gLineas[i][3] > apAlto) )
                {
                gInf *= -1;
                gLineas[i][3] += 2*gInf;
                }

            gLineas[i][0] += gIzq;
            if( (gLineas[i][0] < 0 )  ||  (gLineas[i][0] > apAncho) )
                {
                gIzq *= -1;
                gLineas[i][0] += 2*gIzq;
                }

            gLineas[i][2] += gDch;
            if( (gLineas[i][2] < 0 )  ||  (gLineas[i][2] > apAncho) )
                {
                gDch *= -1;
                gLineas[i][2] += 2*gDch;
                }
            }
        }

|  | ##### [Anterior] [Indice] [Siguiente]