Diseñe el juego Hit the Mouse usando HTML, CSS y Vanilla Javascript

En este artículo, vamos a crear un juego en el que el mouse sale de los agujeros y golpeamos el mouse con un martillo para ganar puntos. Está diseñado usando HTML, CSS y Vanilla JavaScript.

Código HTML:

  • Primero, creamos un archivo HTML (index.html).
  • Ahora, después de crear el archivo HTML, le daremos un título a nuestra página web usando la etiqueta <title>. Debe colocarse entre la etiqueta <head>.
  • Luego vinculamos el archivo CSS que proporciona todo el efecto de animaciones a nuestro html. También se colocó dentro de la sección <head>.
  • Llegando a la sección del cuerpo de nuestro código HTML.
    • Tenemos que crear un div para dar el encabezado principal a nuestro juego.
    • En el segundo div colocamos puntos para nuestro juego.
    • En el tercer div, que es el más interesante, colocamos 5 agujeros y les asignamos la clase particular.
    • En el siguiente, colocamos los 2 botones para iniciar y detener nuestro juego según el interés del usuario.
    • En el div final colocamos una imagen de martillo que luego la convertimos en cursor.
  • Al final de nuestra sección de cuerpo, colocamos el enlace de nuestro archivo JS en la etiqueta <script>.

index.html

<!DOCTYPE html>
<html lang="en">
  
<head>
    <title>Hit-The-Mouse</title>
    <link rel="stylesheet" href="style.css">
  
    <!-- Adding google fonts to our project 
        to set chosen font family -->
    <link href=
"https://fonts.googleapis.com/css2?family=Dancing+Script:wght@700&display=swap"
        rel="stylesheet">
    <link rel="preconnect" 
        href="https://fonts.gstatic.com">
</head>
  
<body>
    <div class="heading">
        <h1>Hit the Mouse</h1>
    </div>
  
    <div class="score">
        <h3>Points: <span>0</span></h3>
    </div>
  
    <div class="holes">
        <div class="hole hole1"></div>
        <div class="hole hole2"></div>
        <div class="hole hole3"></div>
        <div class="hole hole4"></div>
        <div class="hole hole5"></div>
    </div>
    <div class="buttons">
        <button class="button start">
            START
        </button>
  
        <button class="button stop">
            STOP
        </button>
    </div>
  
    <div class="hammer">
        <img src=
'https://media.geeksforgeeks.org/wp-content/uploads/20210302112037/hammer1.png'>
    </div>
      
    <!-- linking our js file -->
    <script src="script.js"></script>
</body>
  
</html>

Código CSS: CSS se usa para dar diferentes tipos de animaciones y efectos a nuestra página HTML para que parezca interactiva para todos los usuarios. En CSS, debemos recordar los siguientes puntos:

  • Restaura todos los efectos del navegador.
  • Utilice clases e identificadores para dar efectos a los elementos HTML.
  • Usa @keyframes{} para dar la animación a los elementos HTML.

style.css

/* Restoring all the browser effects */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: 'Dancing Script', cursive;
    cursor: none;
}
  
/* Setting up the bg-color, text-color 
and alignment to all body elements */
body {
    background-color: green;
    color: white;
    justify-content: center;
}
  
.heading {
    font-size: 2em;
    margin: 1em 0;
    text-align: center;
}
  
.score {
    font-size: 1.3em;
    margin: 1em;
    text-align: center;
}
  
.holes {
    width: 600px;
    height: 400px;
    display: flex;
    flex-wrap: wrap;
    margin: 0 auto;
}
  
.hole {
    flex: 1 0 33.33%;
    overflow: hidden;
    position: relative;
}
  
/* Use of pseudo classes */
.hole:after {
    display: block;
    background: url(
'https://media.geeksforgeeks.org/wp-content/uploads/20210302112038/hole2.png')
        bottom center no-repeat;
    background-size: contain;
    content: '';
    width: 100%;
    height: 70px;
    position: absolute;
    z-index: 20;
    bottom: -30px;
}
  
.rat {
    position: absolute;
    z-index: 10;
    height: 10vh;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    animation: move 0.5s linear;
}
  
.buttons {
    margin: 3em 0 0 0;
    text-align: center;
}
  
.button {
    background-color: inherit;
    padding: 15px 45px;
    border: #fff 2px solid;
    border-radius: 4px;
    color: rgb(21, 14, 235);
    font-size: 0.8em;
    font-weight: 900;
    outline: none;
}
  
/* It is used because we want to 
display single button at a time
on the screen */
  
/* This functionally is moreover 
controlled by JS */
.stop {
    display: none;
}
  
.hammer img {
    position: absolute;
    height: 125px;
    z-index: 40;
    transform: translate(-20px, -50px);
    pointer-events: none;
    animation: marne_wale_effects 0.1s ease;
}
  
/* Giving animation to our rat */
@keyframes move {
    from {
        bottom: -60px;
    }
    to {
        bottom: 0;
    }
}
  
/* Giving effects to hammer when 
we hit on the rat */
@keyframes marne_wale_effects {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(-40deg);
    }
}

Hasta ahora, completamos toda nuestra parte de la interfaz de usuario, ahora escribiremos código para dar funcionalidades a nuestro juego.

Código JavaScript: en esta sección, escribimos el código para:

  1. Efectos de golpeo del martillo.
  2. Cambiando el cursor al martillo.
  3. Iniciar/detener nuestro juego.
  4. Cálculo del número de aciertos

script.js

// Selection of all the CSS selectors 
const score = document.querySelector('.score span')
const holes = document.querySelectorAll('.hole')
const start_btn = document.querySelector('.buttons .start')
const stop_btn = document.querySelector('.buttons .stop')
const cursor = document.querySelector('.hammer img')
  
// Here we changing our default cursor to hammer
// (e) refers to event handler
window.addEventListener('mousemove', (e) => {
    cursor.style.top = e.pageY + "px"
    cursor.style.left = e.pageX + "px"
})
  
// It is used to give the animation to
// our hammer every time we click it
// on our screen
window.addEventListener('click', () => {
    cursor.style.animation = 'none'
    setTimeout(() => {
        cursor.style.animation = ''
    }, 101)
})
  
// From this part our game starts when
// we click on the start button
start_btn.addEventListener('click', () => {
    start_btn.style.display = 'none'
    stop_btn.style.display = 'inline-block'
  
    let holee
    let points = 0
  
    const game = setInterval(() => {
  
        // Here we are taking a random hole
        // from where mouse comes out
        let ran = Math.floor(Math.random() * 5)
        holee = holes[ran]
  
        // This part is used for taking the 
        // mouse up to the desired hole
        let set_img = document.createElement('img')
        set_img.setAttribute('src', 
'https://media.geeksforgeeks.org/wp-content/uploads/20210303135621/rat.png')
        set_img.setAttribute('class', 'rat')
        holee.appendChild(set_img)
  
        // This part is used for taking
        // the mouse back to the hole
        setTimeout(() => {
            holee.removeChild(set_img)
        }, 700);
    }, 800)
  
    // It is used for adding our points
    // to 0 when we hit to the mouse
    window.addEventListener('click', (e) => {
        if (e.target === holee) 
            score.innerText = ++points;
    })
  
    // This is coded for changing the score
    // to 0 and change the stop button
    // again to the start button!
    stop_btn.addEventListener('click', () => {
        clearInterval(game)
        stop_btn.style.display = 'none'
        start_btn.style.display = 'inline-block'
        score.innerHTML = '0'
    })
})

Pasos para jugar el Juego:

  • Haga clic en el botón Inicio para jugar el juego.
  • Después de hacer clic en el botón de inicio, el objeto sale del agujero.
  • Golpea el ratón sobre el objeto para ganar más y más puntos.
  • Haga clic en el botón Detener para pausar su juego.

Producción:

Publicación traducida automáticamente

Artículo escrito por rahulmahajann y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *