Implementar la funcionalidad del juego
Requisitos:
- Dominio de los bucles y condiciones de JavaScript.
- Saber manipular el DOM utilizando JavaScript.
Funcionalidad:
- Crear la dinámica central del juego.
- Diseñar escenarios de fin de juego.
- Implementar mecanismos de creación y movimiento de bloques.
Pasos:
- Verificar si el jugador ha hecho clic en un bloque negro o blanco. Actualizar el estado del juego según el clic del jugador.
// Determinar si se hace clic en un bloque negro o blanco
function judge(ev) {
if (
ev.target.className.indexOf("black") == -1 &&
ev.target.className.indexOf("cell") !== -1
) {
ev.target.parentNode.pass1 = 1; // Define el atributo pass, que indica que se ha hecho clic en el bloque blanco de esta fila
}
if (ev.target.className.indexOf("black") !== -1) {
// Hacer clic en un objetivo con "black" en el nombre de la clase es un bloque negro
ev.target.className = "cell";
ev.target.parentNode.pass = 1; // Define el atributo pass, indicando que se ha hecho clic en el bloque negro de esta fila
score();
}
}
- Determinar cuándo el juego ha terminado basado en las interacciones del jugador. Disparar acciones de finalización del juego cuando el juego ha terminado.
// Comprobar si el juego ha terminado
function over() {
var rows = con.childNodes;
if (rows.length == 5 && rows[rows.length - 1].pass !== 1) {
fail();
}
for (let i = 0; i < rows.length; i++) {
if (rows[i].pass1 == 1) {
fail();
}
}
}
// Fin del juego
function fail() {
clearInterval(clock);
flag = false;
confirm("La puntuación final es " + parseInt($("score").innerHTML));
var con = $("con");
con.innerHTML = "";
$("score").innerHTML = 0;
con.style.top = "-408px";
}
- Generar filas de bloques para el juego. Posicionar aleatoriamente el bloque "negro" entre los demás.
// Crear un <div class="row"> con cuatro hijos <div class="cell">
function createrow() {
var con = $("con");
var row = creatediv("row"); // Crear div: className=row
var arr = createcell(); // Definir el nombre de la clase del div cell, uno de los cuales es cell black
con.appendChild(row); // Agregar nodo hijo con row como con
for (var i = 0; i < 4; i++) {
row.appendChild(creatediv(arr[i])); // Agregar nodos hijos de row cell
}
if (con.firstChild == null) {
con.appendChild(row);
} else {
con.insertBefore(row, con.firstChild);
}
}
// Crear una matriz de nombres de clases; uno de ellos es "cell black", los demás son "cell"
function createcell() {
var temp = ["cell", "cell", "cell", "cell"];
var i = Math.floor(Math.random() * 4); // Generar aleatoriamente la posición del bloque negro Math.random() función de parámetros 0~1 número aleatorio
temp[i] = "cell black";
return temp;
}
- Hacer que los bloques se muevan hacia abajo continuamente. Eliminar las filas antiguas a medida que salen de vista.
// Mover los bloques negros hacia abajo
function move() {
var con = $("con");
var top = parseInt(window.getComputedStyle(con, null)["top"]);
if (speed + top > 0) {
top = 0;
} else {
top += speed;
}
con.style.top = top + "px"; // Continuar moviendo el valor de la parte superior para que se mueva
over();
if (top == 0) {
createrow();
con.style.top = "-102px";
delrow();
}
}
// Eliminar una fila
function delrow() {
var con = $("con");
if (con.childNodes.length == 6) {
con.removeChild(con.lastChild);
}
}