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);
}










