Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



miércoles, 12 de junio de 2013

Juego De Dominó hecho con Python (III): El Código Fuente

Juego De Dominó hecho 

con Python (III): 

El Código Fuente

Bien, una vez visto el esquema del programa, pasamos a ver y comentar el código fuente

La función Main: 
Es donde vamos a elegir el tipo Torneo y tipo de jugadores. Después pasaremos a jugar las partidas correspondientes.



Pregunta: ¿por qué para salir del bucle while hago que la variable punto sea igual que 120?
Respuesta: De esa forma, hago que cuando se vuelva a examinar la condición "punto<100" esta sea falsa y se termine de ejecutar el bucle...
Pregunta: ¿hay otra forma de hacerlo?
Respuesta: Si usando la orden Break (mucho más simple, e intuitivo :) )


La clase Jugador:


Comentarios:
Solo se ha creado una clase Jugador, que tiene una variable "tipo" que diferencia entre "CPU" y "HUMANO" y también tenemos una variable "inteligencia", que nos ayuda a saber que inteligencia va a tener la CPU (de las fichas que puede colocar en la "serpiente": 1: coloca una aleatoriamente, 2: coloca la ficha más pesada, 3: coloca la ficha doble más pesada, y si no tiene coloca la que más pese).

Esto funciona...si... pero es muy mejorable.

¿que pasa si tenemos otro tipo de jugador, por ejemplo jugador en red ?
¿que pasa si hay más inteligencias, por ejemplo si una CPU va a usar el algoritmo minimax para elegir la ficha a colocar?
Habría que alterar el código del método de la clase jugador, ampliándolo para admitir esos casos, básicamente añadiendo más grupos de instruciones if...then..., creando un código muy largo y difícil de comprobar , añadir más futuros casos y encontrar posibles errores.

Solución:
Lo mejor es usar la Herencia de Clases, y creamos, a partir de la clase Jugador, varias clases Heredadas de esta, con el método "colocar" redefinido con las caracteristicas del jugador/inteligencia (aprovechamos el concepto de polimorfismo)... consiguiendo que él código fácilmente ampliable.


Mejora: Usar Herencia con la clase Jugador





La Función Partida:




Como podéis ver, se sigue el esquema:



Nota: 
Para mezclar las fichas, he usado la funcion random.shuffle, que es una función que genera una lista con los elementos desordenados aleatoriamente, para poderla usar necesitamos importar el módulo random





Funciones varias:
- Para contar nº de fichas que tiene una lista
- Funciones para mostrar opciones que tiene que elegir el usuario.
- Averiguar que jugador tiene una determinada ficha




La clase serpiente:
Tiene varias propiedades, las más importante son "cola" y "cabeza" que tienen el valor de la ficha que se puede colocar en esos lugares. Además otras dos propiedades donde se van a almacenar las fichas que se van colocando en dos listas (cabeza y cola).
El método "Coloca" se va a encargar de añadir a la lista correspondiente la ficha colocada por el jugador. Y con el método "Ver" se nos muestra la serpiente, en forma de dos dos listas (cola y cabeza)




La clase Ficha: