Ta-Te-Ti
El clásico juego de tres en línea para dos jugadores.
- Nivel
- Avanzado
- Tema:
- Proyectos
- Conceptos:
- Entrada y salida
- Matrices
- SubProcesos
- Funciones
- Repetir
- Mientras
- Lógicos
Ejecuta, modifica y depura este ejemplo en el navegador.
Lo que aprenderás
El tablero es una matriz de 3 x 3. Un SubProceso lo dibuja, una Funcion Logico revisa si hay tres en línea y Repetir ... Hasta Que valida cada jugada.
Código
SubProceso DibujarTablero(tablero) Definir fila Como Entero Escribir "" Para fila <- 1 Hasta 3 Hacer Escribir " ", tablero[fila, 1], " | ", tablero[fila, 2], " | ", tablero[fila, 3] Si fila < 3 Entonces Escribir "---+---+---" FinSi FinParaFinSubProcesoFuncion gano <- HayTresEnLinea(tablero, jugador) Definir gano Como Logico Definir i Como Entero gano <- Falso Para i <- 1 Hasta 3 Hacer Si tablero[i, 1] = jugador Y tablero[i, 2] = jugador Y tablero[i, 3] = jugador Entonces gano <- Verdadero FinSi Si tablero[1, i] = jugador Y tablero[2, i] = jugador Y tablero[3, i] = jugador Entonces gano <- Verdadero FinSi FinPara Si tablero[1, 1] = jugador Y tablero[2, 2] = jugador Y tablero[3, 3] = jugador Entonces gano <- Verdadero FinSi Si tablero[1, 3] = jugador Y tablero[2, 2] = jugador Y tablero[3, 1] = jugador Entonces gano <- Verdadero FinSiFinFuncionAlgoritmo TaTeTi Definir tablero, jugador, ganador Como Caracter Definir fila, columna, jugadas, i, j Como Entero Definir valida Como Logico Dimension tablero[3, 3] Para i <- 1 Hasta 3 Hacer Para j <- 1 Hasta 3 Hacer tablero[i, j] <- " " FinPara FinPara jugador <- "X" ganador <- "" jugadas <- 0 Mientras ganador = "" Y jugadas < 9 Hacer DibujarTablero(tablero) Repetir Escribir "Turno de ", jugador, ". Fila (1 a 3):" Leer fila Escribir "Columna (1 a 3):" Leer columna valida <- fila >= 1 Y fila <= 3 Y columna >= 1 Y columna <= 3 Si valida Entonces Si tablero[fila, columna] <> " " Entonces valida <- Falso FinSi FinSi Si NO valida Entonces Escribir "Esa casilla no está disponible." FinSi Hasta Que valida tablero[fila, columna] <- jugador jugadas <- jugadas + 1 Si HayTresEnLinea(tablero, jugador) Entonces ganador <- jugador FinSi Si jugador = "X" Entonces jugador <- "O" SiNo jugador <- "X" FinSi FinMientras DibujarTablero(tablero) Si ganador = "" Entonces Escribir "¡Empate!" SiNo Escribir "¡Ganó ", ganador, "!" FinSiFinAlgoritmoDiagrama de flujo
Cada bloque del diagrama corresponde a una instrucción del código.
Ejemplo de ejecución
Esto muestra el programa al ejecutarlo. Las respuestas escritas por el usuario aparecen resaltadas.
| | ---+---+--- | | ---+---+--- | | Turno de X. Fila (1 a 3):Respuesta del usuario: 1Columna (1 a 3):Respuesta del usuario: 1 X | | ---+---+--- | | ---+---+--- | | Turno de O. Fila (1 a 3):Respuesta del usuario: 2Columna (1 a 3):Respuesta del usuario: 1 X | | ---+---+--- O | | ---+---+--- | | Turno de X. Fila (1 a 3):Respuesta del usuario: 1Columna (1 a 3):Respuesta del usuario: 2 X | X | ---+---+--- O | | ---+---+--- | | Turno de O. Fila (1 a 3):Respuesta del usuario: 2Columna (1 a 3):Respuesta del usuario: 2 X | X | ---+---+--- O | O | ---+---+--- | | Turno de X. Fila (1 a 3):Respuesta del usuario: 1Columna (1 a 3):Respuesta del usuario: 3 X | X | X---+---+--- O | O | ---+---+--- | | ¡Ganó X!
Desafío
Al terminar, pregunta si quieren jugar otra vez.
Ver pista
Envuelve todo el juego, desde que se limpia el tablero, en un Repetir ... Hasta Que.
Ejemplos relacionados
Ordenamiento Shell
Una inserción entre elementos lejanos, con un salto que se achica en cada pasada.
AvanzadoOrdenamiento rápido (Quicksort)
Elige un pivote, separa los menores de los mayores y ordena cada lado con recursión.
AvanzadoOrdenamiento por montículo
Organiza el arreglo como un montículo y saca el mayor una y otra vez.
Avanzado