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>

<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

</HEAD>

<BODY>

 

<P>&nbsp;</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);

 }

 

}