Programación
Durante el desarrollo nos hemos enfrentado a varios retos y a continuación explicaremos cómo hemos resuelto algunos de los problemas que nos hemos encontrado.
Lógica de la Banca
Para gestionar la lógica de la banca y decidir si debe pedir una carta, hemos implementado una función que evalúa una serie de condiciones. Estas condiciones determinan si la banca debe o no tomar otra carta, y funcionan de la siguiente manera:
- Si la banca tiene una puntuación igual o superior a 7,5, no pedirá otra carta.
- Si ningún jugador supera la puntuación actual de la banca, tampoco pedirá otra carta.
- Si la banca tiene menos puntos que los necesarios para poder pagar a los jugadores contra los que pierde, estará obligada a pedir una carta.
- En caso de que ninguna de estas condiciones se cumpla, se llama a una función adicional que evalúa el riesgo de pedir una carta calculando el porcentaje de probabilidades de que la banca se pase del 7,5.
Si el riesgo de pasarse es menor al nivel de riesgo que puede asumir la banca, esta pedirá otra carta, de lo contrario, se plantará.
Problemas con la base de datos
Uno de los principales problemas surgió al intentar conectar con la base de datos. Aunque la implementación inicial fue sencilla, nos encontramos con dificultades al usar la librería (mysql-connector) en Linux debido a un problema relacionado con el SSL. Intentamos desactivar el SSL, pero esto hacía que diese otro error, finalmente solucionamos el problema instalando la versión correcta de la librería directamente desde PyCharm.
Además de los problemas de conexión tuvimos dificultades con las respuestas de las consultas SQL. Inicialmente, no podíamos identificar a qué correspondía cada valor devuelto en los resultados de las consultas por lo que, buscando una solución, añadimmos un bucle que genera un diccionario para cada fila de resultados, emparejando cada columna con su valor correspondiente. Esto nos permitiría pasar de esto (1, "Alice", 0) a esto {"player_id": 1, "name": "Alice", "is_ai": 0}, lo que facilita mucho el manejo de los datos.
Problemas con la interfaz
En lo referente a la interfaz, hemos ido cambiando varias cosas durante el desarrollo. Al principio creabamos las variables de los títulos ASCII de forma manual, concatenando línea por línea y añadiendo manualmente los márgenes laterales, lo cual nos hacía perder mucho tiempo y no era práctico.
Descubrimos que podíamos simplificar el proceso utilizando triples comillas (""") para definir el texto directamente, sin necesidad de concatenar cada línea. Finalmente, añadimos una función que aplicaba automáticamente los márgenes con un for de cada línea, lo que nos ahorró bastante tiempo.