You are on page 1of 8

Universidad Autnoma de Quertaro

Facultad de Ingeniera
Ingeniera en Automatizacin

Programacin Avanzada
Reporte de Proyecto Final Ajedrez

Profesor: Moiss Agustn Martnez Hernndez
Alumnos: Corona Patricio Csar Agustn
Surez Soto Jess Ismael










Introduccin
El ajedrez es un juego entre dos personas, cada una de las cuales dispone de 16 piezas mviles que se colocan
sobre un tablero dividido en 64 escaques. En su versin de competicin est considerado como un deporte.
Originalmente inventado como un juego para personas, a partir de la creacin de computadoras y programas
comerciales de ajedrez una partida de ajedrez puede ser jugada por dos personas, por una persona contra un
programa de ajedrez o por dos programas de ajedrez entre s.
Se juega sobre un tablero cuadriculado de 88 casillas, alternadas en colores blanco y negro, que constituyen
las 64 posibles posiciones para el desarrollo del juego. Al principio del juego cada jugador tiene diecisis
piezas: un rey, una dama, dos alfiles, dos caballos, dos torres y ocho peones. Se trata de un juego de estrategia
en el que el objetivo es derrocar al rey del oponente. Esto se hace amenazando la casilla que ocupa el rey
con alguna de las piezas propias sin que el otro jugador pueda proteger a su rey interponiendo una pieza entre
su rey y la pieza que lo amenaza, mover su rey a un escaque libre o capturar a la pieza que lo est
amenazando, lo que trae como resultado el jaque mate y el fin de la partida.
RS232 (Recommended Standard 232, tambin conocido como Electronic Industries Alliance RS-232C) es una
interfaz que designa una norma para el intercambio de una serie de datos binarios entre un DTE (Equipo
terminal de datos) y un DCE (Data Communication Equipment, Equipo de Comunicacin de datos), aunque
existen otras en las que tambin se utiliza la interfaz RS-232.
Conector RS-232 (DB-9 hembra).











Creacin de las piezas y tablero.
Se definen los valores que permanecern contantes en la solucin, tales valores como el tamao de los
bloques blanco y negro y el tamao que ocuparan las imgenes de las piezas, tambin se define el color
para cada bloque representado por un valor predeterminado por la estructura System.Drawing.Color,
tambin se crea cada bloque con un rectngulo utilizando un brush de tipo LinearGradientBrush.



En donde X_PIEZA y Y_PIEZA se utilizarn despus para ayudarnos a colocar las piezas en el centro de
cada bloque de manera que no queden colocadas ms hacia un lado que de otro.

Para crear las imgenes utilizaremos un archivo de recursos Ajedrez.resources que crearemos a partir de
otro archivo de recursos tipo Ajedrez.resx, utilizando la herramienta Resgen.exe de Visual Studio, el
archivo se crea de la siguiente manera: "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0>resgen.exe
C:\Ajedrez.resx Si se presenta un error en la generacin del archivo se copian las imgenes en la
direccin que indica y si el problema persiste se debe probar con otra versin de Visual Studio.

Teniendo este archivo de recursos ahora podemos cargar las imgenes y asignar cada una a una variable
de tipo de pieza, para esto se crea una enumeracin para tipo de pieza TipoDePieza y otra para color de
pieza ColorDePieza.

Para cargar las imgenes crearemos una clase Resources utilizaremos el Administrador de recursos
System.Resources y crearemos una funcin CargarPieza para cargar las imgenes; para asignar a las
piezas su imagen creamos otra clase Pieza donde utilizaremos la funcin que se creo anteriormente y
finalmente crearemos una clase para cada una de las piezas para asignar su imagen correspondiente.



























Realizaremos algo similar para los bloques, crearemos una enumeracin ColorDeBloque y hacemos uso
del bloque estndar que creamos anteriormente.



Con esto tenemos la clase Pieza y la clase Bloque que tienen lo necesario para crear el mtodo en que se dibujaran las
piezas y los bloques, crearemos en cada clase una funcin Dibujar la cual se mandar llamar cuando se requiera
dibujar la pieza el bloque.

Para las piezas utilizaremos la funcin predefinida DrawImage que se encuentra en la clase System.Drawing

Creamos la funcin Dibujar para Pieza



Y para los bloques utilizaremos la funcin FillRectangle que se encuentra en la misma clase System.Drawing

Creamos la funcin Dibujar para Bloque


Ya tenemos las funciones Dibujar que dibujan la Pieza\Bloque en la posicin (int x, int y), y aun no se ha definido ninguna
variable que almacene dichas coordenadas, creamos una nueva estructura Coordenadas que contendr estas
coordenadas.



En la sobrecarga del mtodo ToString hemos de poner override para remplazar el mtodo ToString predefinido para as
sobrecargarlo y que el mtodo utilizado por la clase sea el definido por nosotros ({x}, {y}).

Al principio se asign a cada pieza una imagen y se definieron las propiedades de un bloque blanco y de un bloque
negro, ahora estas imgenes y estas propiedades hay que asignrselas a cada pieza y a cada bloque a sus variables de
tipo enumeracin que se crearon, Crearemos una nueva clase CrearPieza y otra clase CrearBloque y dentro de ellas
la funcin que defina las propiedades que tendr una pieza dependiendo de su color y de su tipo.

Funcin para los bloques:


Estas funciones son para detectar movimientos validos con el mause

internal void mouseDown(object sender, MouseEventArgs e)
{
bMouseDown = true;
Bloques BloqueActual = tablero.GetBloque(e.X, e.Y);
if (BloqueActual != null)
{
Piezas aPiezas = BloqueActual.GetPiezas();

if (aPiezas != null)
{

if (aPiezas.GetHabilitado())
{
tablero.MostrarMovimientosValidos(BloqueActual);
if (tablero.ValidPositionCount() > 0)
MouseDown_Pieza = aPiezas;

}
}
}
}









IMPLEMENTACION DE RS/232
Para hacer la comunicacin RS232 hicimos un programa con el cual pensbamos utilizar para implementar la
comunicacin RS232 en el programa de ajedrez. Tal programa es el siguiente.
Primero hicimos un Transmisor y despus un Receptor.


El cdigo escrito arriba, es el cdigo de un programa para transmitir una cadena de caracteres a otro programa el cual
los recibe (llamado receptor).
Para usar la comunicacin RS232 hay que agregar unas libreras al proyecto, dichas libreras son las siguientes:

Dichas libreras nos ayudan a usar el puerto serial. En el cdigo de arriba nombre el puerto serial como
transmisionport1.
El siguiente cdigo es para recibir los datos que se envan desde otro programa.
private void Recibir(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
recibirdato += this.transmisionport1.ReadExisting();
this.Invoke(new EventHandler(Actualizar));
}
private void Actualizar(object sender, EventArgs e)
{
//textBox1.Text = textBox1.Text + recibirdato;
RecepcionBox.Text = RecepcionBox.Text + recibirdato;
recibirdato = "";
}
Este cdigo es para mandar los datos a otro programa.
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
byte[] Art = new byte[1];
Art[0] = Convert.ToByte(e.KeyChar);
transmisionport1.Write(Art, 0, Art.Length);
Thread.Sleep(20);
}
Los dos fragmentos de cdigo anteriores son los que gobiernan la aplicacin para transmitir y recibir datos al mismo
tiempo, recibe datos de otro programa y enva datos a otro programa.

La imagen de la anterior pagina muestra como se ven los dos programas corriendo al mismo tiempo.
En si es algo parecido a un chat, nombremos al programa como Chat para referencias posteriores.
El programa Chat funciona de la siguiente manera.
Mientras Transimisor-PC1 enva un dato (en este caso cadenas de caracteres) a Receptor-PC2 (este dato queda
guardado en el texbox llamado receptor = HOLA) , Receptor-PC2 puede enviar un dato a Transimisor-PC1 (este dato
queda guardado en el texbox llamado receptor =MUNDO ) y viceversa .
Basndonos en Chat para la implementacin de la comunicacin RS232 en el juego de ajedrez pensamos en lo siguiente.

Imagnese dos PC, PC1 y PC2 corriendo el mismo programa al mismo tiempo.
PC1 va a tener a las piezas blancas como transmisor y PC2 como Receptor, eso quiere decir que el movimiento que el
jugador de las pizas blancas haga se va a enviar a la PC2 , entonces PC2 recibir la posicin de dicha pieza blanca y as el
jugador en PC2 podr ver la jugada de PC1, lo mismo ocurre con PC2 en las piezas negras.
Conclusin:
Hacer un juego de ajedrez implica conocer algoritmos de juego y ser organizado para que no convierta en un caos la
tarea de organizar archivos y variables que pertenezcan al programa.
Conocer la POO (programacin orientada a objetos) ayuda a entender el cdigo escrito en otro lenguaje de
programacin que no sea C++.

Fuentes
http://www.c-sharpcorner.com/UploadFile/6897bc/how-pen-and-brush-works-in-gdi/

You might also like