Présentation
Le jeu se compose de paires de cartes portant des illustrations identiques. L’ensemble des cartes est mélangé, puis étalé face contre table. À son tour, chaque joueur retourne deux cartes de son choix. S’il découvre deux cartes identiques, il les ramasse et les conserve, ce qui lui permet de rejouer. Si les cartes ne sont pas identiques, il les retourne faces cachées à leur emplacement de départ.
Le jeu se termine quand toutes les paires de cartes ont été découvertes et ramassées. Le gagnant est le joueur qui possède le plus de paires.
Un jeu très simple qui, pour notre exercice, se jouera en solo.
Le code Javascript
// variables var canvas,ctx,posX,posY,c1,c2,i,reste; // globales var images, tuiles, paires; // tableaux // paramètres var C = 6; var T = 80; var W = 480; var H = 480; var nbImg = 20; var dos = 19; var vide = 20; window.onload = function() { // préparation du jeu canvas = document.getElementById('canvas'); ctx = canvas.getContext('2d'); posX = canvas.offsetLeft; posY = canvas.offsetTop; canvas.width = W; canvas.height = H loadImages(); } function loadImages(){ // chargement des images images = []; for(var i=1; i<nbImg+1; i++){ var b = new Image(); b.src = "assets/img"+i+".jpg"; b.onload = function() { images.push(this); if(--nbImg==0) init(); }; } } function init() { // initialisation de la partie tuiles = []; paires = []; total = C*C; for (i=0; i<total*.5; i++){ paires.push(i,i); } for (i=0; i<total; i++){ var c = {}; c.x = parseInt(i%C)*T; c.y = parseInt(i/C)*T; var r = parseInt(Math.random()*paires.length); c.ref = paires[r]+1; paires.splice(r,1); c.frame = dos; tuiles.push(c); } render(); canvas.addEventListener("click", choisir, false); } function choisir(e){ // cliquer sur une case var c = tuiles[parseInt((e.clientX-posX)/T)+parseInt((e.clientY-posY)/T)*C]; // trouve la case sur laquelle on a cliqué if(c.frame != vide) { // si ce n'est pas une case vide c.frame = c.ref; // enregistre l'image à afficher if (!c1){ // si aucune carte n'a été retournée c1 = c; // la carte choisie est la première } else if (c1 == c){ // sinon si la carte choisie est déjà retournée c1.frame = dos; // masque la carte c1 = null; // la première carte n'est plus sélectionnée } else if (!c2) { // sinon si la deuxième carte n'est pas choisie c2 = c; // la carte choisie est la deuxième carte if (c1.ref == c2.ref) { // si les références des deux cartes est identique c1.frame = c2.frame = vide; // supprime les deux cartes de l'affichage c1 = c2 = null; // déselectionne les deux cartes total -= 2; // décrémente le total des cartes if (total == 0) finPartie(); // si il n'y a plus de carte à découvrir la partie est terminée } } else { // sinon la paire n'est pas bonne c1.frame = c2.frame = dos; // masque les deux cartes c2 = null; // déslectionne la deuxième carte c1 = c; // enregistre la première carte } } render(); // mise à jour de l'affichage } function finPartie(){ // fin de partie alert("Fin de partie, cliquez pour rejouer."); init(); } function render() { // Dessine le jeu for(var i=0; i<tuiles.length; i++){ ctx.drawImage(images[tuiles[i].frame-1], tuiles[i].x, tuiles[i].y); } }
A retenir
Voilà une fois encore un jeu au code très très simple que vous n’aurez sans doute pas de difficulté à prendre en main.