Proyecto Final: Juego de tres en raya
Tiempo Estimado
30 - 60 minutos
Nivel de Dificultad
Medio/Difícil
Objetivos
- Perfeccionar las habilidades del estudiante al emplear Python para resolver problemas complejos.
- La integración de técnicas de programación en un solo programa consistente de varias partes.
Escenario
Tu tarea es escribir un programa que simule jugar al tres en raya con el usuario. Para hacerlo más fácil, hemos decidido simplificar el juego. Aquí están nuestras reglas:
- La máquina (por ejemplo, el programa) jugará utilizando las ‘X’s.
- El usuario (por ejemplo, tú) jugarás utilizando las ‘O’s.
- El primer movimiento es de la máquina: siempre coloca una ‘X’ en el centro del tablero.
- Todos los cuadros están numerados comenzando con el 1 (observa el ejemplo para que tengas una referencia).
- El usuario ingresa su movimiento introduciendo el número de cuadro elegido. El número debe de ser válido, por ejemplo un valor entero mayor que 0 y menor que 10, y no puede ser un cuadro que ya esté ocupado.
- El programa verifica si el juego ha terminado. Existen cuatro posibles veredictos: el juego continúa, el juego termina en empate, tú ganas, o la máquina gana.
- La máquina responde con su movimiento y se verifica el estado del juego.
- No se debe implementar ningún tipo de inteligencia artificial, la máquina elegirá un cuadro de manera aleatoria, eso es suficiente para este juego.
El ejemplo del programa es el siguiente:
+-------+-------+-------+
| | | |
| 1 | 2 | 3 |
| | | |
+-------+-------+-------+
| | | |
| 4 | X | 6 |
| | | |
+-------+-------+-------+
| | | |
| 7 | 8 | 9 |
| | | |
+-------+-------+-------+
Ingresa tu movimiento: 1
+-------+-------+-------+
| | | |
| O | 2 | 3 |
| | | |
+-------+-------+-------+
| | | |
| 4 | X | 6 |
| | | |
+-------+-------+-------+
| | | |
| 7 | 8 | 9 |
| | | |
+-------+-------+-------+
+-------+-------+-------+
| | | |
| O | X | 3 |
| | | |
+-------+-------+-------+
| | | |
| 4 | X | 6 |
| | | |
+-------+-------+-------+
| | | |
| 7 | 8 | 9 |
| | | |
+-------+-------+-------+
Ingresa tu movimiento: 8
+-------+-------+-------+
| | | |
| O | X | 3 |
| | | |
+-------+-------+-------+
| | | |
| 4 | X | 6 |
| | | |
+-------+-------+-------+
| | | |
| 7 | O | 9 |
| | | |
+-------+-------+-------+
+-------+-------+-------+
| | | |
| O | X | 3 |
| | | |
+-------+-------+-------+
| | | |
| 4 | X | X |
| | | |
+-------+-------+-------+
| | | |
| 7 | O | 9 |
| | | |
+-------+-------+-------+
Ingresa tu movimiento: 4
+-------+-------+-------+
| | | |
| O | X | 3 |
| | | |
+-------+-------+-------+
| | | |
| O | X | X |
| | | |
+-------+-------+-------+
| | | |
| 7 | O | 9 |
| | | |
+-------+-------+-------+
+-------+-------+-------+
| | | |
| O | X | X |
| | | |
+-------+-------+-------+
| | | |
| O | X | X |
| | | |
+-------+-------+-------+
| | | |
| 7 | O | 9 |
| | | |
+-------+-------+-------+
Ingresa tu movimiento: 7
+-------+-------+-------+
| | | |
| O | X | X |
| | | |
+-------+-------+-------+
| | | |
| O | X | X |
| | | |
+-------+-------+-------+
| | | |
| O | O | 9 |
| | | |
+-------+-------+-------+
¡Has Ganado!
Requerimientos
Implementa las siguientes características:
- El tablero debe ser almacenado como una lista de tres elementos, mientras que cada elemento es otra lista de tres elementos (la lista interna representa las filas) de manera que todos los cuadros puedas ser accedidos empleado la siguiente sintaxis:
tablero[fila][columna] - Cada uno de los elementos internos de la lista puede contener ‘O’, ‘X’, o un dígito representando el número del cuadro (dicho cuadro se considera como libre).
- La apariencia de tablero debe de ser igual a la presentada en el ejemplo.
- Implementa las funciones definidas para ti en la plantilla.
- Para obtener un valor numérico aleatorio se puede emplear una función integrada de Python denominada
randrange(). El siguiente ejemplo muestra como utilizarla (El programa imprime 10 números aleatorios del 1 al 8). - La instrucción
from-importprovee acceso a la funciónrandrange()definida en un módulo externo de Python denominadorandom.from random import randrange for i in range(10): print(randrange(8))
Plantilla
def MostrarTablero(tablero):
# La función acepta un parámetro el cual contiene el estado actual del tablero
# y lo muestra en la consola.
def IntroducirMovimiento(tablero):
# La función acepta el estado actual del tablero y pregunta al usuario acerca de su movimiento,
# verifica la entrada y actualiza el tablero acorde a la decisión del usuario.
def ListaCasillasLibres(tablero):
# La función examina el tablero y construye una lista de todos los cuadros vacíos.
# La lista esta compuesta por tuplas, cada tupla es un par de números que indican la fila y columna.
def VictoriaPara(tablero, signo):
# La función analiza el estatus del tablero para verificar si
# el jugador que utiliza las 'O's o las 'X's ha ganado el juego.
def DibujaMovimiento(tablero):
# La función dibuja el movimiento de la máquina y actualiza el tablero.