En este tutorial, construiremos un juego interactivo de Piedra, Papel o Tijera usando TypeScript y HTML. Es una excelente oportunidad para aprender sobre la manipulación del DOM, las funciones en TypeScript y cómo manejar eventos.
¿Qué necesitas?
- Tener instalado Node.js (para compilar TypeScript).
- Un editor de texto o IDE (como Visual Studio Code).
Paso 1: Configura el Proyecto
- Crea una carpeta para tu proyecto y navega a ella:
mkdir piedra-papel-tijera cd piedra-papel-tijera
- Inicializa un proyecto Node.js y configura TypeScript:
npm init -y npm install typescript --save-dev npx tsc --init
- Asegúrate de que tu archivo
tsconfig.json
tiene configurado"strict": true
y"outDir": "./dist"
. - Crea la siguiente estructura de carpetas y archivos:
piedra-papel-tijera/ ├── src/ │ ├── index.ts │ └── styles.css ├── index.html ├── tsconfig.json └── package.json
Paso 2: Escribir el HTML
En index.html
, define una interfaz básica:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="styles.css"> <title>Piedra, Papel o Tijera</title> </head> <body> <div class="container"> <h1>Piedra, Papel o Tijera</h1> <div class="choices"> <button id="rock">🪨 Piedra</button> <button id="paper">📄 Papel</button> <button id="scissors">✂️ Tijera</button> </div> <p id="result"></p> <button id="restart">Reiniciar</button> </div> <script src="dist/index.js"></script> </body> </html>
Paso 3: Escribir el CSS
En styles.css
, añade un diseño simple:
body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; } .container { max-width: 400px; margin: auto; } .choices button { margin: 10px; font-size: 20px; padding: 10px 20px; } #result { margin-top: 20px; font-size: 24px; color: #333; }
Paso 4: Escribir el Código TypeScript
En src/index.ts
, implementa la lógica del juego:
type Choice = "rock" | "paper" | "scissors"; const choices: Choice[] = ["rock", "paper", "scissors"]; const resultElement = document.getElementById("result")!; const restartButton = document.getElementById("restart")!; const getComputerChoice = (): Choice => { const randomIndex = Math.floor(Math.random() * choices.length); return choices[randomIndex]; }; const getResult = (player: Choice, computer: Choice): string => { if (player === computer) return "¡Empate!"; if ( (player === "rock" && computer === "scissors") || (player === "paper" && computer === "rock") || (player === "scissors" && computer === "paper") ) { return "¡Ganaste! 🎉"; } return "Perdiste 😢"; }; const playGame = (playerChoice: Choice) => { const computerChoice = getComputerChoice(); const result = getResult(playerChoice, computerChoice); resultElement.textContent = `Elegiste ${playerChoice}, la computadora eligió ${computerChoice}. ${result}`; }; document.getElementById("rock")!.addEventListener("click", () => playGame("rock")); document.getElementById("paper")!.addEventListener("click", () => playGame("paper")); document.getElementById("scissors")!.addEventListener("click", () => playGame("scissors")); restartButton.addEventListener("click", () => { resultElement.textContent = ""; });
Paso 5: Compilar y Ejecutar
Compila el código TypeScript a JavaScript:
npx tsc
Abre el archivo index.html
en tu navegador para jugar.
Mejoras que puedes implementar
- Contador de Puntos: Añade un marcador para el jugador y la computadora.
- Estilos Dinámicos: Cambia los colores del texto según el resultado.
- Niveles de Dificultad: Ajusta las probabilidades de que la computadora gane.
- Animaciones: Usa CSS para animar las elecciones del jugador y la computadora.
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.