Memory Game en JavaScript
Transcription
Memory Game en JavaScript
DS «Création de documents numériques» (DUT Informatique) 12/12/2013 Memory Game en JavaScript 1. Principe du jeu 4 paires de cartes identiques sont disposées aléatoirement face cachée. Le joueur retourne successivement deux cartes. Si les deux cartes forment une paire, elles restent face visible sinon elle sont replacées face cachée. La partie est gagnée lorsque les 4 paires sont visibles. Figure 1 : début de partie Figure 2 : partie en cours 2. Battre les cartes Les valeurs des cartes (4 paires de lettres) sont stockées dans le tableau de caractères cardValue. Le tableau cardHidden indique si les cartes sont affichées face cachée (true) ou face visible (false). var cardValue = ['H' , 'H' , 'T' , 'T' , 'M' , 'M' , 'L' , 'L']; var cardHidden = [true, true, true, true, true, true, true, true]; Les cartes doivent être mélangées avant de commencer la partie. Pour cela, vous devez implémenter les deux fonctions ci-dessous. Exercice 1 (1 point) La fonction swapCards(i,j) permet d’échanger (permuter) les valeurs des cartes d’indices i et j dans le tableau cardValue. Exercice 2 (2 points) La fonction shuffleCards() permet de mélanger les cartes en effectuant 50 permutations successives. Les indices des cartes à échanger seront tirés aléatoirement. 3. Afficher les cartes Après chaque action du joueur, toutes les cartes sont dessinées. Chaque carte est représentée par une division HTML (élément <div>) identifiée. L’identifiant varie entre 0 et 7. Le dessin d’une carte d’indice i consiste à afficher le caractère ‘?’ lorsque que la carte est présentée face cachée (cardHidden[i]==true) ou sa valeur (cardValue[i]) lorsqu’elle est présentée face visible. Exercice 3 (2 points) Implémenter la fonction displayCards() qui dessine l’ensemble des cartes du jeu. DS «Création de documents numériques» (DUT Informatique) 12/12/2013 4. Jouer Chaque carte (représentée par une division HTML identifiée de 0 à 7) réagit au clic de souris en appelant la fonction play(i), i correspondant à la valeur de l’identifiant de la carte cliquée. Exercice 4 (2 points) Donner le code HTML correspondant à l’ensemble des cartes du jeu. Exercice 5 (2 points) Implémenter la fonction isWinner() qui retourne true si toutes les cartes sont affichées face visible et false sinon. Exercice 6 (3 points) Implémenter la fonction checkCards(i,j) qui compare les valeurs des cartes i et j. Si elles sont différentes, elles sont replacées face cachée sinon la fonction affiche une fenêtre d’alerte en cas de victoire seulement. Afin de mémoriser les cartes sélectionnées par le joueur, on utilise la variable clickCount qui compte le nombre d’appels de la fonction play(i) et le tableau à 2 cases cardSelected[] qui contient les indices des cartes cliquées. Exercice 7 (3 points) Implémenter la fonction play(i) qui met à jour les variables clickCount et cardSelected[] ainsi que l’affichage des cartes. À partir de 2 clics, la fonction appelle checkCards() au bout d’une demi-seconde. Rappel: la fonction setTimeout(function(){MyFunction()},msec) permet d’appeler la fonction MyFunction au bout de msec millisecondes. 5. Aller plus loin Exercice 8 (2 points) Donner les modifications à apporter au script afin de pouvoir afficher la durée de la partie dans la fenêtre d’alerte en cas de victoire. Rappel: la méthode getTime() de la classe Date renvoie le nombre de millisecondes écoulées depuis le 01/01/1970. Afin d’augmenter la difficulté du jeu, on peut utiliser plus de paires de cartes. Si cardCount correspond au nombre (pair) de cartes dans le jeu, implémenter les deux fonctions suivantes : Exercice 9 (1 point) La fonction createHTML() retourne sous forme d’une chaîne de caractères le code HTML des divisions identifiées représentant les cartes au nombre de cardCount. Exercice 10 (2 points) La fonction createCards() initialise les tableaux cardValue et cardHidden en fonction de la variable cardCount. Pour des raisons de simplicité, les valeurs des cartes seront des entiers compris entre 0 et cardCount/2-1.