Présentation
Le pendu est un jeu consistant à trouver un mot ou une phrase en devinant quelles sont les lettres qui le composent. Le jeu se joue traditionnellement à deux, avec un papier et un crayon, selon un déroulement bien particulier.
Les deux joueurs dans cet exemple s’appellent A et B.
A pense à un mot et dessine une rangée de tirets, chacun correspondant à une lettre de ce mot.
B annonce une lettre.
La lettre fait-elle partie du mot ?
Oui : A l’inscrit à sa place autant de fois qu’elle se trouve dans le mot.
Non : A dessine le premier trait du pendu.
Le jeu se poursuit jusqu’à ce que :
B gagne la partie en trouvant toutes les lettres du mot ou en le devinant correctement.
A gagne la partie en complétant le dessin du pendu.
Un jeu vraiment très simple à la fois dans sa version classique et dans sa version informatique. Cependant il va nous permettre d’aborder une notion parfois bien utile, la gestion du texte.
Le code Javascript
// variables var canvas, ctx, texte, phrase, erreur, infos, images, touche, lettre, longueur; var W = 480; var H = 480; // préparation du jeu window.onload = function () { canvas = document.getElementById( 'canvas' ); ctx = canvas.getContext( '2d' ); canvas.width = W; canvas.height = H; loadImages(5); } // chargement des images function loadImages(nbImg){ images = []; for ( var i=1; i<nbImg+1; i++){ var b = new Image(); b.src = "assets/phase" +i+ ".jpg" ; b.onload = function () { images.push( this ); if (--nbImg==0) init(); }; } } // initialisation du jeu function init() { erreur = 0; phrase = "Vous jouez au pendu sur le Wiki de Mediabox" infos = phrase.replace(/[A-Za-z]/g, "_" ); longueur = phrase.length; texte = infos; render(); canvas.setAttribute( 'tabindex' , '1' ); canvas.focus(); canvas.addEventListener( "keydown" , appuie, false ); } // gestion phrase function appuie(e){ touche = (String.fromCharCode(e.keyCode)).toLowerCase(); lettre = false ; for ( var i=0; i<longueur; i++) { if (phrase.charAt(i).toLowerCase() == touche){ infos = infos.substr(0,i)+phrase.substr(i,1)+infos.substr(i+1); lettre = true ; } } texte = infos; if (!lettre) ++erreur; render(); if (erreur>4) finPartie( "Perdu, cliquez pour rejouer." ); for ( var j=0; j<longueur; j++) { if (infos.charAt(j) == "_" ) return ; } finPartie( "Bravo, cliquez pour rejouer." ); } // fin de la partie function finPartie(message){ alert(message); init(); } // Dessine le jeu function render() { ctx.fillStyle = "rgb(256,256,256)" ; ctx.fillRect(0, 0, W, H); if (erreur>0) ctx.drawImage(images[erreur-1],0,0); ctx.fillStyle = "black" ; ctx.font = "16px Arial" ; ctx.textAlign = "center" ; ctx.fillText(infos, W/2, H-30); } |