jueves, 27 de octubre de 2016

Buscaminas con Socket en Python

Autor: Constanza Couselo
 Competencia: Creatividad e Innovación
Asignatura :  Desarrollo de Aplicaciónes Cliente-Servidor
Palabras clave: Python, Buscaminas , Servidor, Cliente, Socket


Introducción: 

Para esta actividad eran necesarios los conocimientos obtenido, respecto de apuntes subidos a la Plataforma Educa y clases expositivas del Profesor a cargo del ramo.

La actividad consistía en crear dos programas uno que fuera el cliente y el otro servidor, en python utilizando socket, que permitan simular el juego buscaminas. En más Detalle:

Una vez que el cliente se conecte al servidor, el servidor despliega por la pantalla del cliente(en la consola) un campo minado como el siguiente, con dimensiones de 3 x 3, que indica con el número 0 que no se sabe que hay en los espacios:

1 2 3
a |0|0|0|
b |0|0|0|
c |0|0|0|
Este campo minado (internamente) será generado al azar y mostrado en la consola del servidor una vez que comienza a ejecutarse (siempre debe haber al menos 1 mina y un máximo de 8):

1 2 3
a|0|0|1|
b|0|1|1|
c|0|0|0|
Donde los 1 simbolizan las minas existentes en él.
Ya desplegado esto, se le preguntará al usuario qué espacio desea escavar, donde la opción de escribir por teclado la coordenada que desee (por ejemplo, "a1" sería el primer cuadro del campo minado y se ingresa de una sola vez(no son 2 ingresos separados)).

Cuando el usuario envíe al servidor la coordenada a excavar, este responderá inmediatamente con el campo minado resultante, que puede ser (por ejemplo , al ingresar 1):

 1 2 3
a|*|0|0|
b|0|0|0|
c|0|0|0|
Donde * indica que espacio fue excavado, pero no explotó y procederá inmediatamente a pedir la próxima coordenada a excavar.
o (por ejemplo, al ingresar a3).

1 2 3
a|0|0|X|
b|0|0|0|
c|0|0|0|
Donde X indica que ese espacio fue excavado,pero había una mina, por lo que enviará el mensaje BOOOOOM!! Al cliente inmediatamente después y se cerrará el cliente y el servidor.
Obviamente por cada movimiento, este campo minado se entregará actualizado al cliente y el servidor mantendrá registros de estos movimientos (hasta encontrar una mina).
(Este sería el resultado con los movimientos a1 y b1 por parte del cliente).
  1 2 3
a|*|0|0|
b|*|0|0|
c|0|0|0|
Si el servidor se da cuenta de que en algún el cliente excavó todos los espacios sin minas sin equivocarse(es decir, sin excavar, el espacio donde haya una mina), enviará un mensaje cliente que diga FELICITACIONES!!!!, inmediatamente se cerrará el cliente y el servidor.
Solución:
A continuación se muestra la solución a nuestro problema, utilizando socket con python (lenguaje de programación requerido):
=> Programa Servidor:
 
 
=> Programa Cliente: 
 
 
Reflexión:
 
Consideró que esta actividad me sirvió para conocer a profundidad el manejo de socket en python, sobre todo entender a cabalidad el proceso de conexión entre un servidor y un cliente, para poder enviar datos de manera óptima. Además, me ayudo a mejorar el pensamiento lógico; a diseñar mis propias funciones, y algoritmos para así poder cumplir con los requerimientos establecidos.

1 comentario: