APPLET, JUEGO DEL CUATRO
En una carpeta dentro de la
carpeta del proyecto llamada imagen se introducen dos imágenes de dos cruces,
una roja para la máquina y otra azul para el jugador.
El codigo
de la pagina será:
<HTML>
<HEAD>
<
</HEAD>
<BODY>
<P> </P>
<!-- Insert HTML here -->
<applet
code=cuatro.class
codebase="./"
name=Applet1
width=320
height=200
VIEWASTEXT>
<param name=label value="This string was passed from the
HTML host.">
<param name=background value="008080">
<param name=foreground value="FFFFFF">
</applet>
</BODY>
</HTML>
El código de la clase applet será:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.net.*;
public class cuatro extends Applet
{ /*Utilizamos dos matrices una para las lineas verticales y otra para las
horizontales*/
boolean
horizontal[][],vertical[][];
/*Dos imagenes una
para la cruz azul del jugador y otra para la cruz roja
del la maquina*/
Image jugador,maquina;
/*
*posx y poxy nos indican las posiciones en las que se encuentra el raton
*x y y indican la
anchura y altura de cada cuadrado
*turno indica el turno de juego
*completado[][] nos
permite saber si hay o no algun cuadrado hecho
*cuadrados indica el numero de cuadrados
hechos
*/
int
posx,posy,x,y,turno,completado[][],cuadrados;
/*
*Es el que efectua
el movimiento de la maquina
*/
void
jugar_maquina(Graphics g)
{
int
px=0,py=0,h_o_v=0;
// h_o_v=0
entonces horizontal sino vertical
boolean
encontrado=false;
g.setColor(Color.blue);
/*
*Buscamos alguna solucion
*Para ello elegimos al azar dos posiciones
del tablero
*Solo cuando se encuentre una libre se saldra de este metodo
*/
while
(!encontrado)
{
h_o_v=(int)(Math.random()*2);
px=(int)(Math.random()*6);
py=(int)(Math.random()*5);
if (h_o_v==0)
{
if
(!horizontal[px][py])
{horizontal[px][py]=true;
g.fillRect(x*(py+1),(y*(px+1))-1,x,3);
encontrado=true;}
}
else
{
if
(!vertical[py][px])
{vertical[py][px]=true;
g.fillRect((x*(px+1))-1,y*(py+1),3,y);
encontrado=true;}
}
}
}
/*
*funcion que nos
permite saber si hay algun cuadrado nuevo hecho
*/
boolean
verSicuadrado()
{
boolean
cuadrado=false;
for (int i=0;i<5;i++)
for (int j=0;j<5;j++)
if
((horizontal[i][j])
&& (vertical[i][j]) &&
(horizontal[i+1][j])
&& (vertical[i][j+1]))
{if
(completado[i][j]==0)
{completado[i][j]=turno;
cuadrado=true;
}
}
return
cuadrado;
}
/*
*metodo que
inicializa todas las variables del juego
*/
void comenzar()
{
horizontal=new
boolean[6][5];
vertical=new
boolean[5][6];
completado=new int[5][5];
cuadrados=0;
// turno=2=maquina
y si turno=1=jugador
//turno jugador
turno=1;
}
/*
*Metodo de inicio
de la applet
*Carga las imagenes
utilizando el metodo getImage()
*/
public
void init()
{
jugador = getImage(getCodeBase(),"imagen/jugador.gif");
maquina = getImage(getCodeBase(),"imagen/maquina.gif");
addMouseListener(new evento());
comenzar();
}
/*
*metodo de inicio
para las aplicaciones graficas independientes
*/
public
void init2()
{
Toolkit T=getToolkit();
jugador =
T.getImage("imagen/jugador.gif");
maquina = T.getImage("imagen/maquina.gif");
addMouseListener(new evento());
comenzar();
}
/*
*Metodo que nos
permite pintar la ventana grafica
*sera llamado cada
vez que se desee repintar mediante el metodo repaint()
*/
public void paint(Graphics
g)
{
//obtenemos
la dimension de la ventana grafica
o applet
Dimension dim
= getSize();
g.setColor(Color.black);
x = (dim.width
/ 8);
y = (dim.height / 8);
//dibujamos el tablero
for (int i=1;i<7;i++)
{
g.drawLine(i*x, y, i*x, 6*y );
g.drawLine(x, i*y, 6*x, i*y);
}
g.setColor(Color.red);
/*Recorremos la matriz de
horizontales y verticales para ver
*si hay alguna linea
hecha y asi pintarla
*/
for
(int i=0;i<6;i++)
for
(int j=0;j<5;j++)
{
if
(horizontal[i][j])
g.fillRect(x*(j+1),(y*(i+1))-1,x,3);
if
(vertical[j][i])
g.fillRect((x*(i+1))-1,y*(j+1),3,y);
}
/*
*Contamos el numero de cuadrados que ha hecho
la maquina y el jugador
*contador1=jugador y
contador2=maquina
*/
int
contador1=0,contador2=0;
for
(int i=0;i<5;i++)
for
(int j=0;j<5;j++)
if
(completado[i][j]==1)
{
contador1++;
g.drawImage(jugador, x*(j+1)+(x/4),y*(i+1)+(y/4),x/2,y/2,this);
}
else
if (completado[i][j]==2)
{
g.drawImage(maquina, x*(j+1)+(x/4),y*(i+1)+(y/4),x/2,y/2,this);
contador2++;
}
cuadrados=contador1+contador2;
//Si hemos hecho los 25 cuadrados
entonces hemos terminado
if
(cuadrados!=25)
{
/*
*Visualizamos el turno y el numero de
cuadrados hechos tanto por la
*maquina como por el jugador
*Establecemos posteriormente el turno
*/ g.drawString("Cuadrados:
jugador: "+contador1+" maquina: "+contador2,x,y*7);
if
(turno==2)
{jugar_maquina(g);
if (!verSicuadrado()) turno=1;
else
repaint();
}
}
//En caso de haber terminado el juego
else
{
g.drawString("---Fin---"+" "+"Cuadrados: jugador:
"+contador1+" maquina: "+contador2,x,y*7);
}
}
/*
*Esta clase se encarga de ver en que posicion del tablero estamos
*Ejecutara las acciones oportunas una vez se
pulse y suelte el boton
*izquierdo del raton
*/
class
evento extends MouseAdapter
{
public
void mouseReleased(MouseEvent
e) {
if
(cuadrados==25)
{comenzar();
repaint();
}
if (turno==1)
{
posx = e.getX();
posy
= e.getY();
//columnas-filas
if
(((posx>(x-3)) && (posx<(6*x)+2))
&& ((posy>(y-3)) && (posy<(6*y)+2)))
if ((posx % x>x-3) || (posx %
x<3))
{
if
(!vertical[((posy-3)/y)-1][(posx-3)/x])
{
vertical[((posy-3)/y)-1][(posx-3)/x]=true;
if
(!verSicuadrado())
if
(turno==1) turno=2;
repaint();}
}
else
{
if ((posy %
y>y-3) || (posy % y<3))
if
(!horizontal[(posy-3)/y][((posx-3)/x)-1])
{horizontal[(posy-3)/y][((posx-3)/x)-1]=true;
if
(!verSicuadrado()) turno=2;
repaint();
}
}
}
}
}
/*
*Esta clase se encarga de cerra
la aplicacion
*solo en case de ejecutarse de forma
independiente y
*no en forma de applet
*/
static class Cerrar extends WindowAdapter
{
public
void windowClosing(WindowEvent
e)
{System.exit(0);
}
}
/*
*El metodo main()
nos permite ejecutar
*la applet de forma
independiente
*/
public static void
main(String args[])
{ cuatro C = new
cuatro();
Frame ventana=new Frame("Cuatro: El juego de los cuadrados");
ventana.addWindowListener(new Cerrar());
ventana.add(C);
ventana.setSize(300,300);
C.init2();
ventana.setVisible(true);
}
}