Implementando Corrible

¿Implementando un applet corrible?

Nuestro juego constará de un ciclo eterno que no terminará hasta que el juego termine, es por eso que necesitamos implementar nuestro programa como un juego corrible. Trabajaremos con el código que ya tenemos (applet1). Para implementar el corrible, necesitaremos alargar la declaración de nuestra clase:

public class applet1 extends Applet implements Runnable

Te recordamos que hay una gran importancia de diferencia entre mayúsculas y minúsculas por lo que tengas mucho cuidado con estas. Lo primero que notaremos al implementarle el corrible, es que nos marca un error por falta de un "run()", así que se lo daremos. Dentro de nuestra clase, agregaremos este código:

	public void run()
	{
		
	}

Dentro de este será donde tengamos todo el código de nuestro juego. Más adelante veremos a detalle su función; antes, necesitaremos agregar un hilo de tiempo. Justo después de empezar nuestra clase, antes de cualquier función, es donde declaramos nuestras variables. Aquí es donde agregaremos nuestro hilo de tiempo:

	// Aquí se declaran nuestras variables
	Thread thd;

Le he agregado un comentario para recordar el lugar donde declaramos nuestras variables. Ahora debemos hacer las funciones que inician nuestro hilo y lo terminan. Por eso necesitaremos agregar las siguientes líneas, guiense por el comentario para saber el lugar correcto de estas:

	// TODO overwrite start(), stop() and destroy() methods
	public void start()
	{
		if(thd==null)
		{
			Thread thd=new Thread(this);
			thd.start();
		}
	}

	public void stop()
	{
		if(thd!=null)
		{
			thd.stop();
			thd=null;
		}
	}

Ahora por último, modificaremos nuestro Run para que se corra por siempre (Por siempre que esté activo nuestro applet), y para que repinte el dibujo tras un determinado tiempo, durmiendo unos milisegundos antes de volverlo a hacer (Si no mandamos a dormir, nuestro juego sería tan rápido que no lo veríamos). Nuestro Run quedaría de la siguiente forma:

	public void run()
	{
		while(true)
		{
			// Aquí va el código de nuestro juego
			
			repaint();
				
			try
			{
				Thread.sleep(50);
			}
			catch(InterruptedException e){}	
		}
	}

Así, le indicamos que la operación se "duerma" cada 50 milisegundos y vuelva a repintarse (llama a paint(g);). De esta forma, nuestro código estará listo para comenzar a programar nuestros juegos sobre él. Para asegurarnos que el código esté bien hasta el momento, pongo el código completo a continuación:

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;

public class applet1 extends Applet implements Runnable
{
	// Aquí se declaran nuestras variables
	Thread thd;
	
	public void init()
	{
		// Comienza descarga asíncrona de recursos pesados
		setBackground(Color.blue);
	}

	// TODO overwrite start(), stop() and destroy() methods
	public void start()
	{
		if(thd==null)
		{
			Thread thd=new Thread(this);
			thd.start();
		}
	}

	public void stop()
	{
		if(thd!=null)
		{
			thd.stop();
			thd=null;
		}
	}

	public void run()
	{
		while(true)
		{
			// Aquí va el código de nuestro juego
			
			repaint();
				
			try
			{
				Thread.sleep(50);
			}
			catch(InterruptedException e){}	
		}
	}
	
	public void paint(Graphics g)
	{
		// Aquí se dibujan todos los objetos
		g.setColor(Color.yellow);
		g.drawRect(50, 30, 200, 100);
	}
}

Probando el applet corrible

Si lleno de curiosidad decidiste probar la función de nuestro código hasta el momento, es posible que te hayas llevado una gran decepción al no ver nada distinto hasta ahora. Lo que ocurre es que hemos creado todo para implementarlo como corrible, pero no hemos hecho nada que cambie dentro del applet, por eso parece no hacer nada. Por supuesto, para ver como funciona, haremos en este momento una pequeña prueba. Comencemos por declarar dos variables enteras de nombre "x" y "y", que nos servirán como coordenadas.

	int x = 0;
	int y = 0;

Ahora, modifiquemos un poco nuestro método de dibujo de rectángulo para que se dibuje en las coordenadas X y Y:

		g.drawRect(x, y, 20, 10);

Por último, agreguemos este código en nuestro run, de forma que sus posiciones en X y en Y vayan sumandose conforme pasa el tiempo (en nuestro caso, cada 50 milisegundos):

			// Aquí va el código de nuestro juego
			x += 2;
			y += 1;

Si lo hemos hecho bien, al correrlo con Shift+F6, podremos ver que nuestro pequeño rectángulo moverse de forma inclinada poco a poco hasta salir de la vista de nuestro applet. ¡Felicidades! Ya estás listo para comenzar a programar juegos! Por cualquier cosa, pongo el código completo a continuación:

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;

public class applet1 extends Applet implements Runnable
{
	// Aquí se declaran nuestras variables
	Thread thd;
	int x = 0;
	int y = 0;
	
	public void init()
	{
		// Comienza descarga asíncrona de recursos pesados
		setBackground(Color.blue);
	}

	// TODO overwrite start(), stop() and destroy() methods
	public void start()
	{
		if(thd==null)
		{
			Thread thd=new Thread(this);
			thd.start();
		}
	}

	public void stop()
	{
		if(thd!=null)
		{
			thd.stop();
			thd=null;
		}
	}

	public void run()
	{
		while(true)
		{
			// Aquí va el código de nuestro juego
			x += 2;
			y += 1;
			
			repaint();
				
			try
			{
				Thread.sleep(50);
			}
			catch(InterruptedException e){}	
		}
	}
	
	public void paint(Graphics g)
	{
		// Aquí se dibujan todos los objetos
		g.setColor(Color.yellow);
		g.drawRect(x, y, 20, 10);
	}
}

[Un proyecto de Ayotli Diseño Web]