Inicio Apuntes FPApuntes DAW Ejercicio Básico JavaScript: Quiniela aleatoria

Ejercicio Básico JavaScript: Quiniela aleatoria

Publicado por entreunosyceros
Publicado el: Última actualización:

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.
Javascript

Como hoy tengo la noche JavaScript, voy a colgar otro pequeño programa, al que le faltan algunas cosillas para funcionar correctamente. El programa (por llamarlo de alguna forma) realiza una selección aleatoria para rellenar una quiniela de fútbol con sus repectivas variables X, 1 y 2.

El programa rellena correctamente las 14 casillas y el pleno al 15 de manera aleatoria cada vez que se pulsa el botón «Volver a generar resultados«. Para que la cosa no resultase tan aburrida pues he generado también un array con «supuestos» equipos de fútbol para repartirlos también de manera aleatoria en la quiniela.

Los equipos no se repiten cada vez que se genera una nueva quiniela. Que esto era lo que le faltaba en la anterior versión de este ejercicio.

Ejercicio básico JavaScript con el que crear una quiniela de fútbol aleatoria

quiniela creada con javascript

Index.html

En el archivo index.html, vamos a crear el marco en el que se va a mostrar la quiniela. Además desde aquí vamos a llamar al archivo .css y al archivo .js para que todo funcione y se va de la misma forma que en la anterior captura de pantalla.

<!DOCTYPE html>
<html>
<head>
  <title>Quiniela de Fútbol</title>
  <link rel="stylesheet" type="text/css" href="style.css" media="screen" />
</head>
<body>
  <h1 style="text-align: center;">Quiniela de Fútbol Aleatoria</h1>
  
  <div class="quiniela" id="resultados">
    <h2 class="cabecera">Partidos</h2>
  </div>
  
  <button id="generarButton">Generar quiniela</button>
  
  <script src="quiniela.js"></script>
</body>
</html>

style.css

En este archivo .css vamos a añadir algunas reglas css para darle un poco de estilo a la quiniela:

body {
    font-family: Arial, sans-serif;
  }
  .quiniela {
    width: 15%;
    margin: 0 auto;
    padding: 20px;
    border: 2px solid #ccc;
    background-color: #f5f5f5;
  }
  .partido {
    display: flex;
    justify-content: space-between;
    margin-bottom: 10px;
  }
  .equipo {
    flex: 1;
  }
  .resultado {
    width: 50px;
    text-align: center;
    font-weight: bold;
  }
  .cabecera {
    text-align: center;
    font-weight: bold;
    margin-bottom: 10px;
  }
  .pleno {
    font-weight: bold;
    text-align: center;
    margin-top: 20px;
    margin-bottom: 10px;
    background-color: #ff0707;
    padding: 5px;
  }
  button {
    display: block;
    margin: 10px auto;
    padding: 10px 20px;
    font-size: 16px;
  }

quiniela.js

En este archivo .js, será en el que vamos a guardar la lógica del programa. Espero que los comentarios añadidos dejen claro que hace cada fragmento de código:

// Definición de los equipos disponibles
const equipos = [
  "Equipo A", "Equipo B", "Equipo C", "Equipo D", "Equipo E",
  "Equipo F", "Equipo G", "Equipo H", "Equipo I", "Equipo J",
  "Equipo K", "Equipo L", "Equipo M", "Equipo N", "Equipo O",
  "Equipo P", "Equipo Q", "Equipo R", "Equipo S", "Equipo T",
  "Equipo U", "Equipo V", "Equipo W", "Equipo X", "Equipo Y",
  "Equipo Z", "Equipo AA", "Equipo BB", "Equipo CC", "Equipo DD"
];

// Definición de los posibles resultados
const resultadosPosibles = ["1", "X", "2"];

// Variable para rastrear si se ha generado la quiniela
let quinielaGenerada = false;

// Función para generar una quiniela aleatoria
function generarQuiniela() {
  const equiposDisponibles = equipos.slice();
  const quiniela = [];

  for (let i = 1; i <= 15; i++) {
    const localIndex = Math.floor(Math.random() * equiposDisponibles.length);
    const local = equiposDisponibles[localIndex];
    equiposDisponibles.splice(localIndex, 1);

    const visitanteIndex = Math.floor(Math.random() * equiposDisponibles.length);
    const visitante = equiposDisponibles[visitanteIndex];
    equiposDisponibles.splice(visitanteIndex, 1);

    const resultado = resultadosPosibles[Math.floor(Math.random() * resultadosPosibles.length)];

    quiniela.push({ local: local, visitante: visitante, resultado: resultado });
  }

  quinielaGenerada = true;

  return quiniela;
}

// Función para mostrar la quiniela en la página
function mostrarQuiniela() {
  const resultadosDiv = document.getElementById("resultados");
  const quiniela = generarQuiniela();

  resultadosDiv.innerHTML = "";

  const divContenedor = document.createElement("div");

  // Crear la cabecera de la quiniela
  const divCabeceraPartidos = document.createElement("div");
  divCabeceraPartidos.classList.add("cabecera");

  // Crear elementos span para la cabecera
  const spanCabeceraPartidos = document.createElement("span");
  spanCabeceraPartidos.classList.add("cabecera-texto");
  spanCabeceraPartidos.textContent = "Partidos     ";

  const spanCabeceraSeparador = document.createElement("span");
  spanCabeceraSeparador.classList.add("cabecera-separador");
  spanCabeceraSeparador.textContent = " - ";

  const spanCabeceraResultados = document.createElement("span");
  spanCabeceraResultados.classList.add("cabecera-texto");
  spanCabeceraResultados.textContent = "Resultados";

  // Agregar los elementos span a la cabecera
  divCabeceraPartidos.appendChild(spanCabeceraPartidos);
  divCabeceraPartidos.appendChild(spanCabeceraSeparador);
  divCabeceraPartidos.appendChild(spanCabeceraResultados);

  // Agregar la cabecera al contenedor
  divContenedor.appendChild(divCabeceraPartidos);

  // Iterar a través de los partidos de la quiniela
  quiniela.forEach((partido, index) => {
    const divPartido = document.createElement("div");
    divPartido.classList.add("partido");

    const spanPartido = document.createElement("span");
    spanPartido.textContent = `${index + 1}. ${partido.local} vs ${partido.visitante}`;
    divPartido.appendChild(spanPartido);

    // Agregar el pleno al 15 si corresponde
    if (index === 14) {
      const divPleno = document.createElement("div");
      divPleno.classList.add("pleno");
      divPleno.textContent = "Pleno al 15";
      divContenedor.appendChild(divPleno);
    }

    // Agregar una línea separadora entre los partidos
    if (index < 14) {
      divContenedor.appendChild(document.createElement("hr"));
    }

    // Crear el contenedor para el resultado
    const divResultado = document.createElement("div");
    divResultado.classList.add("resultado-contenedor");

    // Crear el elemento span para mostrar el resultado
    const spanResultado = document.createElement("span");
    spanResultado.classList.add("resultado");
    spanResultado.textContent = partido.resultado;

    // Agregar el resultado al contenedor
    divResultado.appendChild(spanResultado);

    // Agregar el separador entre el partido y el resultado
    divPartido.appendChild(document.createTextNode("     -     "));
    divPartido.appendChild(divResultado);
    divContenedor.appendChild(divPartido);
  });

  // Agregar el contenedor de la quiniela al elemento resultadosDiv
  resultadosDiv.appendChild(divContenedor);

  // Actualizar el texto del botón
  const generarButton = document.getElementById("generarButton");
  generarButton.textContent = "Generar de nuevo";
}

// Obtener el botón y agregar un evento de clic
const generarButton = document.getElementById("generarButton");
generarButton.addEventListener("click", function () {
  if (quinielaGenerada) {
    mostrarQuiniela();
  } else {
    generarQuiniela();
    mostrarQuiniela();
  }
});

Y bueno, con esto tendremos disponible una quiniela de fútbol como se hacía en tiempos. Creo que a día de hoy hay más variables que deberían considerarse. Pero como cuando hice este ejercicio por primera vez se hacía así … así se queda.

Este ejercicio no lo voy a subir a la sección de ejemplos, al menos por el momento, ya que ahora mismo no tengo tiempo. Quizás en algún momento lo ponga, pero vamos, que si alguien quiere probarlo, solo tiene que pegar los código aquí mostrados en su correspondiente archivo.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

2 Comentarios

PabloTronix 22 junio, 2016 - 12:33 PM

y esto hace quinielas que tocan?

Respuesta
sapoclay 22 junio, 2016 - 3:06 PM

Yo no dejaría de trabajar, por si acaso …

Respuesta

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.