Wiki PókerToChido - aigora/twIE_2021-poker GitHub Wiki
Bienvenido a la página Wiki de nuestro PókerToChido.
INTRODUCCIÓN
A principio del segundo cuatrimestre se nos encargó realizar un trabajo con código, usando GitHub para registrar nuestros trabajos y el progreso de estos. Al principio no teníamos muy bien pensado qué hacer, pero a una compañera de nuestro grupo se le ocurrió la idea de hacer un Póker, por lo que como nos parecía una buena idea, decidimos que era un buen reto al que someternos para poder practicar y desarrollar nuestras habilidades de programación.
ORGANIZACIÓN DEL TRABAJO
Para poder organizarnos de una forma mejor, creamos un grupo de Teams y WhatsApp en los que realizábamos videoconferencias, enviábamos mensajes y subíamos archivos para que cada integrante del equipo pudiera descargarlos y opinar sobre ellos. En cuanto al reparto de trabajo, intentamos en todo momento una distribución equitativa para que nadie trabajase ni de forma excesiva ni de forma escasa. Cada vez que alguien acababa su parte, la subía a Teams para que la pudiésemos ver y cuando todas las personas habíamos revisado el código o el documento creado, se procedía a situarlo en GitHub mediante la aplicación de GitHub desktop. Más adelante, empezamos a usar ramas de GitHub para organizarnos mejor y que quedase constancia de nuestros cambios y modificaciones en cada parte.
EXPLICACIÓN DE NUESTRA VERSIÓN
Al principio habíamos establecido que nuestro Póker iba a ser parecido al Póker descubierto, pero después de realizar el menú principal, nos dimos cuenta de que sería mejor realizar un póker que tuviese las bases del Póker Texas Holdem con algunas modificaciones como, por ejemplo, la omisión de la opción de abandonar.
Nuestro póker, al igual que el Texas Holdem, consta de un crupier, que en este caso es el propio ordenador, y unos jugadores. Como mínimo, deben de jugar 2 jugadores y un máximo de 6. Cada uno se identifica con un nombre y se le asigna un saldo inicial. En nuestra versión, las apuestas son sin límites, con la única condición de que la apuesta que realices no puede superar al saldo que vas teniendo a lo largo de cada ronda. El funcionamiento del juego es muy simple y está muy guiado, por lo que es casi imposible no saber usarlo. Por ahora, para participar en el juego solo se puede usar un ordenador.
MANUAL DE USO
Estas son las opciones principales del juego, de las cuales los jugadores han de escoger la que deseen. En el caso de querer ver las instrucciones del juego, has de descargar el archivo de texto "Instrucciones.txt" y en la parte del código de la imagen posterior, introducir la ubicación del archivo que ha sido descargado en su ordenador mediante el separador "", ya que si usas el símbolo "/" no te leerá el archivo.
Esta ubicación la podrás encontrar clicando en las propiedades del archivo una vez descargado mediante el botón derecho del ratón.
Además de tener la opción inicial de ver las instrucciones, a lo largo que avanza el juego, se imprimen en pantalla unas pequeñas indicaciones que permiten a los jugadores participar de una forma más fluida sin tener que andar buscando las instrucciones iniciales.
En el caso de querer participar (opción inicial número 2) se ha de indicar el número de participantes y sus nombres (teniendo un máximo de 30 caracteres por nombre) para que sea más fácil el transcurso del juego.
Tras estos pasos iniciales, se procederá a repartir las cartas a cada jugador. Para evitar miradas indeseadas y que los jugadores puedan ver las manos de los demás, se ha implementado un código que sirve de temporizador para que cada individuo tenga 5 segundos para ver sus cartas y luego desaparezcan.
Cada participante posee de $500 de saldo para poder jugar y realizar las apuestas. El saldo puede aumentar o disminuir, pero lo que no se puede hacer es realizar una apuesta mayor al saldo que tienes en el momento de la apuesta.
Una vez establecidas las condiciones básicas para poder jugar, empieza la primera ronda de apuestas o Pre-Flop de las 5 rondas que son, en la que cada jugador, tras ver sus cartas, ha de decidir si quiere intervenir o no.
En el caso de esta primera ronda de apuestas, hay dos ciegas (apuestas) que son obligatorias realizar: la ciega pequeña, que la ha de realizar el primer jugador que desee concursar, cuyo valor es de $5 y la ciega grande, que la ha de pagar el segundo jugador en participar, con un valor de $10. Cada jugador en la primera ronda tiene dos opciones (a excepción del caso de la partida con dos jugadores y los dos primeros jugadores de cada partida que paguen las ciegas iniciales), igualar la apuesta o aumentar la apuesta.
En el caso de hacer una apuesta, se le indica al jugador su saldo restante tras esta operación para que vaya teniendo constancia de cuanto saldo le queda. También hemos usado una variable llamada “bote_ganador” en la cual se va almacenando el dinero que se realiza por apuesta para que cuando el jugador gane, se le indique el valor exacto de su premio. Eso sí, aunque gane o pierda dinero, no va a influir en la siguiente partida. Todo esto se puede ver en la imagen contigua.
En la segunda ronda de apuestas o Flop, el crupier, que en este caso es el ordenador, sitúa 3 cartas en la pantalla para que cada jugador pueda ver qué combinaciones puede hacer para poder ganar. En el Flop, la apuesta mínima permitida es el precio de la ciega grande, es decir, un valor de $10. Las opciones de esta ronda son: mantener la apuesta o aumentar la apuesta.
Cuando llegamos a la tercera ronda de apuestas o Turn, el crupier, revela una nueva carta, haciendo que en la mesa estén 4 cartas para que se puedan seguir realizando combinaciones con las cartas. Las opciones son iguales que en la ronda anterior a excepción de que no hay apuesta mínima. Una vez llegada la cuarta ronda de apuestas o River, el crupier, revela la 5ª carta en la mesa con lo que, a partir de ahora, la mejor mano con 5 cartas ganará la partida. De nuevo, la ronda de apuestas es igual que en el River.
Tras las decisiones de todos los jugadores, llega el momento más esperado de todos, el momento de mostrar las cartas y saber quién es la persona ganadora. A esta ronda se la conoce como Showdown y tras saber quién tiene la mejor mano y la entrega del bote, se finaliza la partida.
PRINCIPALES PROBLEMAS Y SUS SOLUCIONES
Uno de los grandes problemas al que nos enfrentamos al principio fue el de incluir los nombres de los jugadores en una parte del código que creaba las manos aleatorias de cartas de cada jugador. A una de nuestras compañeras se le ocurrió la idea de usar vectores para almacenar los nombres en vez de usar variables, ya que habíamos usado muchas variables casi iguales y teníamos que optimizarlas ya que era mucho texto.
Como se puede ver en la línea 5, se pide a los usuarios que escriban su nombre para que se puedan almacenar y así usarlos durante el resto del juego. Se nos ocurrió la idea de almacenar nombres porque la asociación de un número con cada jugador era más liosa que el que cada jugador escribiera su nombre o alguna palabra con la que se sienta identificado. Usamos una estructura de tipo usuario llamada “jugador[i].” que tiene también un vector llamado “nombre” para poder guardar los nombres y poder aplicarlos en los distintos lugares del código en los que se necesita hacer referencia a cada jugador. Para la impresión del nombre del jugador, usamos un bucle for en el que, según el número de participantes anteriormente seleccionados, se imprimían los nombres con un postincremento de i (i++).
Tras este primer problema y la continuación del código, nos encontramos con un obstáculo algo más complejo. Nos dimos cuenta de que como cada jugador en el póker solo puede ver su mano de cartas y en nuestro código aparecían las manos de todos los jugadores en pantalla, tuvimos que investigar sobre cómo hacer que cada jugador viese su mano durante un determinado tiempo y luego se borrasen y apareciesen las del siguiente jugador. Tras unas búsquedas concordamos que la mejor opción sería crear un temporizador que, implementado al código aleatorio de cartas, mostrase las cartas de cada jugador durante 5 segundos y luego desapareciesen. También, para que diese tiempo a leer todas las indicaciones que aparecen impresas por consola, dimos un tiempo de 7 segundos desde que se terminan de especificar los nombres de los jugadores. De esta forma, se pudo organizar para que le jugador pudiera mirar sus cartas mientras el siguiente esperaba sin mirar la pantalla.
Por último, tuvimos un problema grande y otro más o menos difícil como consecuencia de arreglar el primero. Como aún no dominábamos muy bien todos los temas de programación, hicimos el trabajo con mucho código básico y repetimos mucha línea de escritura, lo que produjo un exceso de trabajo para el programador y también un exceso de líneas de código. Tras practicar más el tema de funciones, empezamos a implementar funciones y vectores en nuestro código para que fuese mucho más fácil de leer y mucho más corto. En definitiva, mejoramos bastante el código a la par que practicamos para el examen final. Pero cómo no, los cambios a veces suponen obstáculos nuevos a los que te tienes que enfrentar y, en nuestro caso, este cambio produjo que tuviésemos problemas con la opción de abandonar la partida de los jugadores. Es decir, al principio teníamos una opción que permitía a los jugadores que lo deseasen no participar más en la partida mediante teclado, pero una vez implementamos las funciones, no supimos cómo agregar esa opción, por lo que, tras muchos intentos fallidos, decidimos eliminar esa opción para poder realizar un código más corto que el que teníamos anteriormente.