Tres en raya: líneas y elecciones aleatorias
Eres X y el ordenador juega con O. Pulsa una casilla vacía y completa una fila,
columna o diagonal de tres antes que tu rival. Cada partida tiene un máximo de nueve
movimientos; los empates permiten volver a intentarlo sin consumir la recompensa.
La primera victoria suma 5 puntos. Perder o empatar no consume la recompensa.
Puedes volver a jugar tantas veces como quieras; las victorias siguientes son de práctica.
Inicia sesión para guardar los puntos.
Un tablero sin duplicar reglas #
game.js guarda el tablero como un array de nueve posiciones. En config.js, cada línea
posible es un array de tres índices. findWinningLine() busca una línea cuyas tres
casillas tengan la misma marca usando find() y every().
El rival primero busca una jugada que le permita ganar inmediatamente. Si no existe,
selecciona una casilla libre con Math.floor(Math.random() * available.length).
Es un rival sencillo y vencible, apropiado para estudiar sus decisiones.
playTurn() comprueba que la casilla sea válida, coloca X y revisa la victoria antes
de dar el turno a O. renderer.js crea nueve botones accesibles, marca la línea ganadora
y conecta cada pulsación con esa función. La plataforma y main.js utilizan ese mismo
adaptador: no hay una segunda implementación de las reglas.
Para investigar #
¿Qué índices representan la diagonal de arriba a la derecha hasta abajo a la izquierda?
¿Cómo harías que el rival también bloqueara una victoria inmediata de X?
Ejecutarlo y modificarlo en tu ordenador #
El visor muestra el código que utiliza esta partida. Descarga los archivos respetando
el árbol de carpetas. Para los juegos con archivos ../shared/, guarda esa carpeta junto
a la carpeta del juego. Por ejemplo: games/snake/ y games/shared/.
Sirve la carpeta games con un servidor HTTP local. Si tienes Python 3 instalado,
puedes ejecutar python3 -m http.server 8000 desde esa carpeta y abrir la subcarpeta
del juego en el navegador. La versión independiente funciona sin instalar librerías;
los puntos del curso se guardan únicamente desde la plataforma.