10
Práctica 10 Tablero de Ajedrez en Red Marco Aurelio Nuño Maganda – Cómputo en Dispositivos Móviles 15/08/2014 UNIVERSIDAD POLITÉCNICA DE VICTORIA. INGENIERÍA EN TECNOLOGÍAS DE LA INFORMACIÓN 1130121 Dominguez de la Cruz Karen Esblendy 1130131 García Wha Miguel Ángel

P10 proyecto 15

Embed Size (px)

Citation preview

Page 1: P10 proyecto 15

Práctica 10 Tablero de Ajedrez en RedMarco Aurelio Nuño Maganda – Cómputo en Dispositivos Móviles

15/08/2014UNIVERSIDAD POLITÉCNICA DE VICTORIA. INGENIERÍA EN TECNOLOGÍAS DE LA INFORMACIÓN

1130121 Dominguez de la Cruz Karen Esblendy

1130131 García Wha Miguel Ángel

Page 2: P10 proyecto 15

IntroducciónSe realizó un tablero de ajedrez que incluye los movimientos básicos para poder jugar dicho juego creando el diseño por medio de locaciones en un canvas, para la realización de éste proyecto se realizaron 3 partes sumamente importantes

Diseño Cliente Servidor

La primera parte conlleva todo lo utilizado para poder mostrar, mover y dividir los turnos, la segunda se actualizó lo dibujado para que pudiese fungir la función de un cliente que funcionara en una red con un servidor en una PC, el cual fue diseñado en esta tercera parte llamada servidor.

Desarrollo

Page 3: P10 proyecto 15

DiseñoSe desarrollo una práctica en eclipse con el ADT de Android.

Se le dio a la aplicación un nombre, tal cual lo indicó el profesor en el aula:

Seguido de esto se comentaron las funciones e imports que se indicaron en clase así como cambiar la clase principal de Fragment Main a Activity Main para el buen empleo de la aplicación en todos los dispositivos. Cabe mencionar que se cambió el extends a Activity, y se cambió de layout

Page 4: P10 proyecto 15

de Activity_main a Fragment_main, así como a la vez se comentó la siguiente función para el buen funcionamiento de la aplicación.Para el diseño de este proyecto se Eligieron las siguientes imágenes.

Piezas Blancas

Piezas Negras

Se tomó la decisión de dibujar en un canvas pues fue más sencillo que en un Layout en el cual era complicado ubicar cada uno de los elementos. Como primer paso se creó el espacio en donde se dibujaría el tablero para después dibujar en el las imágenes antes mostradas.

Page 5: P10 proyecto 15

Después se Creó una clase para cada una de las piezas a dibujar y/o tratar, es decir de cada una de las abstracciones del mundo real.

En cada una de las clases se realizaron tareas diferentes como primer paso podremos el como se dibujó el tablero, para el cual se utilizó una variable privada tipo Paint para dibujar un cuadro utilizando una localización , las cuales se definieron en una clase Llamada localización , siendo estas localizaciones las siguientes:

static public final int FORWARD = 0;static public final int FORWARD_RIGHT = 1;static public final int RIGHT = 2;static public final int BACK_RIGHT = 3;static public final int BACK = 4;static public final int BACK_LEFT = 5;static public final int LEFT = 6;static public final int FORWARD_LEFT = 7;static public final int DOWN = -1;

static public final int UP = 1;

Claro que obvio es señalar que con cada una de ellas se realizó un arriba, abajo, etc. pata localizar cada objeto; a la vez se crearon dos variables para las filas y las columnas y así brindar una dirección de acuerdo a una ubicación en el tablero que se dibujó.

Para dibujar el tablero solo se pintaron Y/o dibujaron rectángulos de una dimensión establecida en pixeles y con una simple sentencia se realizó el dibujado, claro tomando en cuenta la localización de los cuadros dibujados. Haciendo uso de la siguiente función.

Page 6: P10 proyecto 15

public CuadroTablero(Localizacion loc) {occupant = null;

//even row odd column, odd row even columnif ((loc.getRow() + loc.getCol()) % 2 != 0) {

paint = Vista.BLACK;}//even even and odd odd.else paint = Vista.WHITE;

this.loc = loc;}

Después para cada uno de los personajes de este juego se realizo una clase independiente para cada uno de ellos y se le dieron las restricciones necesarias para el juego, pondremos como ejemplo a el caballo, ya que es una de las figuras más polémicas al solo tener movimientos en forma de “L”.

Primero que nada se creó la clase caballo , la cual en su constructor tenia los parámetros, Color, localización y tablero puesto que son los atributos que identifican a cada clase pieza, y se creó en el constructor una sentencia If en la cual se cuestionaba que color debería tomar nuestro personaje para de ésta manera ponerle su respectiva imagen.

public Caballo(int color, Localizacion loc, Tablero cb) {super(color, loc, cb);if (getColor() == Pieza.BLACK) {

loadImage(R.drawable.black_knight);}else if (getColor() == Pieza.WHITE) {

loadImage(R.drawable.white_knight);}// TODO Auto-generated constructor stub

}

Y seguido de esto se realizaron las condiciones para sus movimientos utilizando uun ArrayList que obtiee la localización de el objeto y guarda sus movimientos.

@Overridepublic ArrayList<Localizacion> getMoveLocations() {

ArrayList<Localizacion> moves = new ArrayList<Localizacion>();

Localizacion loc = getLoc();loc =

loc.getLocationInDir(Localizacion.FORWARD).getLocationInDir(Localizacion.FORWARD);

moves.add(loc.getLocationInDir(Localizacion.RIGHT));moves.add(loc.getLocationInDir(Localizacion.LEFT));

Page 7: P10 proyecto 15

loc = getLoc();loc = return moves;

}

ClientePara la parte del cliente fue necesario crear una subclase con la cual se realiza la tarea de conectar al cliente con el servidor a través de la clase TCPClient, creando un hilo en segundo plano para que se actualice la interfaz del usuario, solo se creó el objeto TCPClient y se implementó el método messageRecibed que llama a onProgressUpdate y así al final mandar llamar el método TCPClient para que este corra y realice su función.

public class connectTask extends AsyncTask<String,String,TCPClient> { @Override protected TCPClient doInBackground(String... message) { //creamos un objeto de TCPClient mTcpClient = new TCPClient(new TCPClient.OnMessageReceived() { //aqui se implementa el metodo messageReceived public void messageReceived(String message) { publishProgress(message); //este metodo llama aonProgressUpdate } }); mTcpClient.run();//corre metodo de TCPCLIENT return null; }

}

Con esto y con las variables necesarias para su funcionamiento solo fue necesario pasar mensajes de texto al servidor para anunciar ciertos eventos mediante un String y una condición muy sencilla la cual es la siguiente:

String Mensaje1 = "Se ha movido una pieza"; // connect to the server

new connectTask().execute(""); //envia al servidor cuando llega un equipo if (mTcpClient != null) { mTcpClient.sendMessage(Mensaje1); }

Page 8: P10 proyecto 15

ConclusiónEl desarrollo del diseño del proyecto es sumamente importante sin embargo el desarrollo de la red debe ser tomado en cuenta como primera instancia ya que si se diseña el juego para que opere de manera local es decir que un solo cliente sea el que pueda mover las dos piezas al mismo tiempo, se puede caer en un ciclo infinito ya que no se pensó desde un principio el desarrollo del juego para dos clientes si no para uno.

Cabe destacar que la corrección de éste tipo de error no es muy compleja pero lleva su tiempo entender desde un principio la manera en que funcionará la aplicación.

Page 9: P10 proyecto 15

Resultados