Implémenter la fonctionnalité du jeu
Exigences :
- Maîtrise des boucles et conditions JavaScript.
- Savoir manipuler le DOM à l'aide de JavaScript.
Fonctionnalités :
- Construire la dynamique principale du jeu.
- Concevoir des scénarios de fin de partie.
- Implémenter les mécanismes de création et de mouvement des blocs.
Étapes :
- Vérifier si le joueur a cliqué sur un bloc blanc ou noir. Mettre à jour l'état du jeu en fonction du clic du joueur.
// Déterminer si l'on clique sur un bloc blanc ou noir
function judge(ev) {
if (
ev.target.className.indexOf("black") == -1 &&
ev.target.className.indexOf("cell") !== -1
) {
ev.target.parentNode.pass1 = 1; // Définit l'attribut pass, qui indique que le bloc blanc de cette ligne a été cliqué
}
if (ev.target.className.indexOf("black") !== -1) {
// Cliquez sur une cible avec "black" dans le nom de la classe, c'est un bloc noir
ev.target.className = "cell";
ev.target.parentNode.pass = 1; // Définit l'attribut pass, indiquant que le bloc noir de cette ligne a été cliqué
score();
}
}
- Déterminer quand la partie est terminée en fonction des interactions du joueur. Démarrer les actions de fin de partie lorsque la partie est terminée.
// Vérifier si la partie est terminée
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 de partie
function fail() {
clearInterval(clock);
flag = false;
confirm("Le score final est " + parseInt($("score").innerHTML));
var con = $("con");
con.innerHTML = "";
$("score").innerHTML = 0;
con.style.top = "-408px";
}
- Générer des rangées de blocs pour le jeu. Positionner aléatoirement le bloc "noir" parmi les autres.
// Crée un <div class="row"> avec quatre enfants <div class="cell">
function createrow() {
var con = $("con");
var row = creatediv("row"); // Crée un div : className=row
var arr = createcell(); // Définit le nom de la classe du div cell, dont l'un est cell black
con.appendChild(row); // Ajoute un nœud enfant avec row comme con
for (var i = 0; i < 4; i++) {
row.appendChild(creatediv(arr[i])); // Ajoute les nœuds enfants de la cellule row
}
if (con.firstChild == null) {
con.appendChild(row);
} else {
con.insertBefore(row, con.firstChild);
}
}
// Crée un tableau de noms de classes ; l'un d'entre eux est "cell black", les autres sont "cell"
function createcell() {
var temp = ["cell", "cell", "cell", "cell"];
var i = Math.floor(Math.random() * 4); // Génère aléatoirement la position du bloc noir Math.random() fonction paramètres 0~1 nombre aléatoire
temp[i] = "cell black";
return temp;
}
- Faire descendre les blocs en continu. Supprimer les anciennes rangées lorsqu'elles sortent de vue.
// Fait descendre les blocs noirs
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"; // Continue de déplacer la valeur du haut pour qu'il se déplace
over();
if (top == 0) {
createrow();
con.style.top = "-102px";
delrow();
}
}
// Supprime une ligne
function delrow() {
var con = $("con");
if (con.childNodes.length == 6) {
con.removeChild(con.lastChild);
}
}