Descripción del problema
Deberás implementar el clásico juego del Gato (Tic-Tac-Toe / 3 en raya) en Python puro, ejecutándose completamente en consola. El programa debe permitir que dos jugadores se alternen para marcar casillas en un tablero 3×3, mostrando el estado del tablero tras cada movimiento y detectando automáticamente si hay ganador o empate.
Lee cada nivel cuidadosamente — están pensados para que construyas sobre lo anterior. Guarda una copia funcional de cada nivel antes de avanzar al siguiente.
Herramientas permitidas en Python
✓ PUEDES usar únicamente:
input()
print()
int()
float()
str()
abs()
if
else
elif
while
for
try / except
def
def es opcional — no es requisito, pero puedes usarlo si lo consideras conveniente.
random.random() y random.randint() del módulo random (visto en prueba anterior).
✗ NO puedes usar:
listas / listas 2D
diccionarios
tuplas
def (opcional)
clases
import os
import sys
numpy / pandas
Pista de implementación — tablero sin listas:
c11 = "X" c12 = " " c13 = "O"
c21 = " " c22 = "X" c23 = " "
c31 = "O" c32 = " " c33 = "X"
# O con una sola cadena de 9 caracteres que representa el estado:
tablero = "X" + " " + "O" + " " + "X" + "...." # posición por índice
Comportamiento esperado — todos los niveles
- El tablero muestra las casillas numeradas del 1 al 9 (o fila/columna) antes de la primera jugada
- Se muestra el tablero actualizado después de cada jugada
- Las fichas
XyOse asignan automáticamente (no el jugador las elige en niveles 1 y 2) - El Jugador 1 siempre parte primero en el nivel base
- Se debe validar que la casilla ingresada sea válida y no esté ocupada
- Tras cada jugada indicar si hay ganador, y en qué fila, columna o diagonal
- Si no hay ganador después de 9 jugadas → indicar empate
- El programa debe permitir jugar varias partidas (preguntar al final si se desea continuar)
Ejemplo de ejecución esperada:
Jugador 1: X | Jugador 2: O
1 | 2 | 3
---+---+---
4 | 5 | 6
---+---+---
7 | 8 | 9
Jugador 1 (X), ingresa casilla (1-9): 5
1 | 2 | 3
---+---+---
4 | X | 6
---+---+---
7 | 8 | 9
Sin ganador aún.
Jugador 2 (O), ingresa casilla (1-9): 1
...
¡Jugador 1 (X) gana! — Diagonal principal (↘)
Niveles de dificultad
Juego completo
Implementa el juego completo: tablero, turnos alternados, detección de ganador (fila, columna, diagonal) y empate. Fichas asignadas automáticamente. Parte siempre el Jugador 1.
Estadísticas de sesión
Mantén durante toda la ejecución el conteo de: partidas jugadas, victorias del Jugador 1, victorias del Jugador 2 y empates. Muéstralas al final de cada partida y al salir.
Configuración de partida
Al inicio de cada partida: permite elegir qué ficha quiere cada jugador (o asignar al azar), y quién parte primero (o elegirlo aleatoriamente). Usa random.
Jugar vs CPU
Permite elegir modo: Jugador vs Jugador o Jugador vs CPU. La CPU elige su casilla automáticamente. Puede ser aleatoria o con algo de estrategia (bloquear al rival). Tú decides.
Tabla de evaluación
| Nivel | Contenido | Beneficio |
|---|---|---|
| Nivel 1 | Juego funcional básico 2 jugadores | +0.5 pts próx. prueba |
| Nivel 2 | Incluye nivel 1 + estadísticas de sesión | +0.8 pts próx. prueba |
| Nivel 3 | Incluye niveles anteriores + configuración / random | +1.0 pto próx. prueba |
| Nivel 4 | Incluye niveles anteriores + modo Jugador vs CPU | Reemplaza la nota más baja del curso |
* Los puntos/décimas de los niveles 1–3 se suman a la nota de la próxima prueba escrita, con tope según reglamento. El nivel 4 reemplaza la nota más baja registrada en el libro de clases, sin importar cuál sea.
Recomendaciones de desarrollo
- Empieza por dibujar el tablero en consola y verificar que se ve bien antes de agregar lógica
- Piensa en cómo numerarás las 9 casillas para que el usuario las identifique fácilmente
- Las 8 combinaciones ganadoras (3 filas + 3 columnas + 2 diagonales) se pueden verificar con
ifencadenados - Valida siempre: ¿es un número? ¿está en rango 1-9? ¿está libre?
- Para el Nivel 2, inicializa los contadores antes del bucle principal de partidas
- Para el Nivel 3, decide los turnos y fichas al inicio de cada partida, no durante
- Para la CPU (Nivel 4), una estrategia simple: primero intenta ganar, luego bloquear, si no elige al azar
- Prueba con casos borde: empate exacto, ganar en la última casilla, entradas inválidas repetidas