Max Hernandez

Laberinto - Ejemplo de Canvas en HTML5

lunes, 11 de febrero de 2013

Tarea 2: Mi primer protocolo


Esta semana en redes se nos encargo la tarea de realizar un protocolo muy simple para entender, como es este proceso y la complejidad del mismo. Esta publicación servirá de reporte para esta tarea, aquí pondré las reglas para mi protocolo de ejemplo y después una pequeña implementación en Python para probar su funcionamiento.
Para esta tarea yo decidí hacer un protocolo sobre una partida Tic Tac Toe utilizando una sesión con Sockets para conectar a los jugadores.w

Tic Tac Toe
El tic tac toe es un juego donde se colocan círculos y tachas en una matriz de 3x3, el juego se gana cuando un jugador logra poner 3 de su respectiva marca en horizontal, diagonal o vertical.


[Imagen obtenida de: "http://upload.wikimedia.org/wikipedia/commons/a/ae/Tic_Tac_Toe.gif"]

Mi protocolo

Datos utilizados e interpretación:
  • Jugador en turno: 1 bit
  • fin de partida: 2 bits
  • siguiente movimiento: 4 bits
  • matriz posiciones: 3x3 casillas de al menos dos bits
  • Nombre de jugadores: vector con dos valores - String con 10 a 40 caracteres para cada nombre, posición cero para el jugador cero y uno para el uno.

Las casillas se mapean de arriba hacia abajo de izquierda a derecha, de 0 al 8 se enumeran las casillas
0 | 1| 2
----------
3 | 4| 5
----------
6 | 7| 8

El jugador "0" siempre es el circulo, el jugador "1" siempre es la "X", es decir el cliente siempre se dibuja como la "X" y el servidor siempre como el circulo

El fin de la partida puede tener 4 valores: "0" partida todavía en proceso, "1" gano el jugador "0" o el servidor, "2" gano el jugador "1" o el cliente y "3" empate. Primero se verifica que haya terminado el juego es decir que el valor de la variable de fin de partida tenga un valor diferente a 0, después se verifica que haya sido empate es decir que la variable tenga el valor 3, de no ser así se

Para conocer el jugador ganador o el que tiene el turno, solo se necesita 1 bit, donde "0" se asigna al programa servidor y "1" al cliente.

Se necesita una unidad lógica que verifique
  • Quien gano
  • Quien tiene el turno
  • Si hay empate
En la matriz de 3x3 los siguientes numeros representan: "0" es una casilla vacia, "1" para el jugador "0", "2" para el jugador "1".
Example:
0 | 1| 2
----------
1 | 2| 0
----------
2 | 0| 0

Comunicación

La comunicación se lleva a cabo por medio de Sockets

Al inicio de la partida se pasan por el stream los datos:
  • Turno: 1 bit
  • Nombre de jugadores: Vector con dos valores - String con 10 a 40 caracteres para cada nombre
Después de cada movimiento se pasan por el stream los datos:
  • Fin de partida: 2 bits
  • Siguiente movimiento: 4 bits
Si se pierde conexion de red, la partida queda en empate

Cliente servidor 
Este juego es un perfecto programa cliente servidor puesto que es un juego de exacto dos personas.

Inicio del juego
El turno inicial para los jugadores se genera de forma aleatoria.

Al terminar la partida
Se decide un ganador y se empieza un nuevo juego

Implementación
Por desgracia no pude lograr que mi implementación funcionara correctamente, puesto a que el Thread que utiliza la interfaz gráfica GTK parece estar bloqueando, el Thread que espera la información del oponente. Parece un error fácil de arreglar pero a decir verdad no supe como hacerlo.

A pesar del inconveniente todo lo demás esta implementado y parece funcionar solo que no pude probarlo bien. Los programas establecen conexión y mandan los datos del protocolo.



El código:


https://github.com/MaxHernandez/redes_de_telecomunicaciones

La versión mas estable corriendo:
Los dos programas establecen conexión por medio de los Sockets, una conexión para recibir y una para mandar datos, esto se implemento así para verificar funcionalidad.



Referencias:
http://tools.ietf.org/html/rfc959

1 comentario: