TP2 - Sussy Bakart đ
â° Date de remise : 15 novembre Ă 23h59. (Remise sur Teams)
đŠ Projet de dĂ©part : TĂ©lĂ©chargement
đ ModalitĂ©s du TPâ
- đ€ Le TP doit ĂȘtre fait de maniĂšre individuelle.
- â Le projet de dĂ©part fourni devra ĂȘtre complĂ©tĂ© et remis en entier. (CompressĂ©)
- â Attention au plagiat. Pour rappel, il est interdit de :
- Copier en partie ou complĂštement le code d'une autre personne.
- Copier du code généré par IA.
- đ
La pénalité de retard est de -10% par tranche de 24h entamée.
- Si le retard dépasse 120h (5 jours), la note sera de 0.
- đ« Il est interdit de modifier le code HTML ou CSS du projet de dĂ©part.
- đ« Il est interdit d'utiliser des notions qui n'ont pas Ă©tĂ© abordĂ©es en classe, Ă moins de demander Ă votre enseignant(e) pendant un cours.
- Sinon, 0% pour chaque TODO concerné, à la discrétion de l'enseignant(e).
Si votre travail est suspecté de plagiat (code copié d'un(e) autre étudiant(e), code généré par IA, notions non abordées en classe, etc.), deux choses peuvent se produire :
- Le plagiat est prouvé par nos outils : Note de 0, automatiquement.
- Le plagiat est plutÎt évident, mais une validation est requise : vous serez convoqué(e) au bureau de votre enseignant(e). Vous devrez répondre à certaines questions pour prouver que vous comprenez et maßtrisez le code qui a été utilisé dans votre TP. Si vous ne réussissez pas à répondre à certaines questions, vous aurez la note de 0. (Si vous ne comprenez pas votre propre code, c'est que vous avez plagié, d'une maniÚre ou d'une autre)
âš Description du jeuâ
Mario Kart coûtait trop cher ... alors voici Sussy Bakart !

L'objectif du jeu est de compléter un certain nombre de tours de circuit. Avant une partie, on peut choisir un circuit, une difficulté et combien de joueurs participeront :

AprĂšs avoir choisi le nombre de joueurs, on peut voir les contrĂŽles pour chaque joueur, lancer la partie ou annuler la partie. (On peut aussi encore changer de circuit)

đ TODOsâ
đ Vous devrez surtout travailler sur le fichier script.js
, mais aussi un peu sur script2.js
ensuite.
- Il faut tout compléter dans
script.js
. - Il faut seulement compléter 6 points dans
script2.js
, au choix.
Pour chaque TODO, il y aura parfois des indices / instructions supplémentaires ici. De plus il y aura toujours des indications pour tester vos TODOs si vous désirez vous assurez que tout fonctionne bien. Si un test échoue, ça veut dire que votre code n'est pas bon.
TODO 0â
đ§Ș Tester ce TODOâ
Au dĂ©part, aucun bouton dans la page ne fonctionne : câest normal. De plus, il y a une erreur dans la console. Câest normal aussi.
Assurez-vous de jeter un coup dâĆil đ intense Ă toutes les variables globales ! Cela vous aidera Ă vous situer plus tard.
TODO 1â
đ§Ș Tester ce TODOâ
(Deux lignes de code ajoutées dans init()
... ce test nâinclut pas les Ă©couteurs dâĂ©vĂ©nements Ă faire pendant le TODO 7 !)
Dâabord, il nây a plus dâerreurs dans la console. (On peut dâailleurs changer de course parmi les quatre disponibles) Ensuite, essayez les deux instructions suivantes dans la console. Câest censĂ© faire apparaĂźtre le joueur vert et son ombre.

TODO 2â
đ§Ș Tester ce TODOâ
Premier test : Si vous exĂ©cutez lâappel de fonction ci-dessous dans la console, vous devriez voir les quatre joueurs apparaĂźtre. Câest normal quâils ne soient pas bien placĂ©s.

DeuxiĂšme test : Testez lâappel de fonction ci-dessous, qui est censĂ© faire disparaĂźtre les quatre boutons « 1P », « 2P », « 3P » et « 4P » :

TODO 3â
đ§Ș Tester ce TODOâ
Les quatre boutons « 1P », « 2P », « 3P » et « 4P » sont censés fonctionner :
- Les cinq boutons disparaissent. (Difficulté et nombre de joueurs)
- Les joueurs et leur ombre apparaissent.
- Les joueurs sont bien placĂ©s, derriĂšre la ligne dâarrivĂ©e.
- Le bon nombre de contrĂŽles est affichĂ©. (Câest la seule chose diffĂ©rente selon le nombre de joueurs choisi. VĂ©rifiez bien les 4 possibilitĂ©s)

TODO 4â
đ§Ș Tester ce TODOâ
Préparez et lancez une partie. Il devrait se passer plusieurs choses :
- Dâabord, au milieu de lâĂ©cran, en grand, on voit le dĂ©compte. (« 3 », « 2 », « 1 » puis « Go ! »)
Puis, aprÚs le « Go ! » :
- Attendez 2 ou 3 secondes puis vérifiez que
gDecompte
contient encore -1 : - Le « Go ! » disparait bel et bien aprĂšs 1 seconde. (Et aucun dĂ©compte nâest affichĂ© car la course commence)
- Le chronomĂštre en haut Ă gauche de lâĂ©cran progresse :
- Si on « Annule la partie », le chrono sâimmobilise. (Reste coincĂ© aux mĂȘmes chiffres)
- Les joueurs contrĂŽlĂ©s par lâordinateur ont commencĂ© Ă jouer.
TODO 5â
đ§Ș Tester ce TODOâ
Préparez et lancez une partie. Remarquez deux choses :
- Lorsquâun joueur termine la course, il y a ce message dans la console :
- Lorsque le dernier joueur termine la course, il y a plutĂŽt ce message :
- Des scores sont affichés quand tout le monde a terminé.
TODO 6â
đ§Ș Tester ce TODOâ
Lancez une partie avec 4 joueurs. (Pour avoir le contrĂŽle de tous les personnages) Obtenez un item au moins une fois avec chaque joueur et tenter de lâactiver. Notez que le type dâitem nâa pas dâimportance. Pas besoin de terminer la course.
- Avec le joueur rouge (P1), la flĂšche du bas devrait activer lâitem.
- Avec le joueur jaune (P2), la touche S devrait activer lâitem.
- Avec le joueur bleu (P3), la touche K devrait activer lâitem.
- Avec le joueur vert (P4), la touche 5 devrait activer lâitem.
TODO 7â
đĄ Instructionsâ

Comme les deux boutons â âș
appellent la mĂȘme fonction, il faudra trouver un moyen de savoir quel bouton a Ă©tĂ© cliquĂ© lorsque la fonction changerDifficulte() est appelĂ©e.
Les deux flĂšches â âș
sont des caractĂšres textuels accessibles via le .textContent
.
Quand on clique sur â
, il faut diminuer la difficulté de 1. Si on était déjà en difficulté 1 (Facile), il ne se passe rien.
Quand on clique sur âș
, il faut augmenter la difficulté de 1. Si on était déjà en difficulté 3 (Difficile), il ne se passe rien.
En tout temps, la variable gDifficulte
doit contenir 1, 2 ou 3 pour représenter la difficulté actuelle.
Utilisez les classes .facile
, .normal
et .difficile
pour obtenir la bonne couleur de fond sur le bouton.
đ§Ș Tester ce TODOâ
Jouez un peu avec les flÚches gauches et droites pour changer la difficulté du jeu :

Si on clique sur la flĂšche gauche alors quâon est dĂ©jà à « Facile », il ne se passe rien et la difficultĂ© reste coincĂ©e Ă 1.
On peut se rendre de « Facile », à « Normal », à « Difficile » avec la flÚche droite. (Et revenir à « Normal », puis à « Facile » avec la flÚche gauche ensuite)
La flĂšche droite ne fait rien lorsquâon est à « Difficile » et la difficultĂ© reste coincĂ©e Ă 3.
Et, bien entendu, les ennemis contrĂŽlĂ©s par lâordinateur sont plus coriaces en mode « Normal » et « Difficile ». (Contrairement Ă vous, qui ĂȘtes autant maladroit(e) quâavant đ)
Pour rappel, vous n'avez pas à faire tous les TODOs ci-dessous ! Vous n'avez que 6 points à compléter parmi les DLCs, au choix. Notez que compléter plus de 6 points ne permettra pas d'améliorer votre note : le maximum de points à obtenir est 6.
TODO A-2â
đĄ Instructionsâ
Quelques clarifications :
-
Cliquer sur le đ permet d'afficher / cacher les positions moyennes.
-
La position moyenne d'un joueur est obtenue en faisant la moyenne de toutes les positions qu'il a eues au fil des courses. Par exemple, si j'ai complété trois courses et que j'ai eu les positions
1er
, puis2e
, puis1er
, ma position moyenne sera1.33
environ. (1 + 2 + 1, divisé par 3) -
La variable
gSommePositions
contiendra la somme des positions pour les quatre personnages. Ex :[4, 5, 10, 11]
aprĂšs trois courses. Ici, le premier nombre du tableau est4
car le premier joueur a terminé1er
, puis2e
, puis1er
. (Ce qui fait une somme de4
) Si on divise4
par le nombre de courses (c'est-Ă -dire3
) on obtient le nombre à afficher dans le premier élément HTML avec la classe.positionMoyenne
.
đ§Ș Tester ce TODOâ
Il suffit de vĂ©rifier les positions moyennes en cliquant sur le đ aprĂšs une, puis deux courses. Assurez-vous que les valeurs fassent du sens !


TODO B-2â
đ§Ș Tester ce TODOâ
Faites le nĂ©cessaire pour obtenir une Ă©toile. (ScĂ©nario le plus simple : lancer une partie 4P, parcourez la course Ă lâenvers avec nâimporte quel personnage pour prendre la premiĂšre boĂźte que vous croisez, vous finirez par obtenir une Ă©toile. Ăvitez de faire un tour complet, mĂȘme Ă lâenvers, car cela va augmenter votre pointage un peu et cela vous empĂȘchera dâobtenir une Ă©toile)

Une fois votre étoile en main, activez-la et vérifiez que ⊠:
- La nouvelle animation apparait immédiatement et est bien placée autour du joueur.
- La nouvelle animation dure environ 4 secondes puis disparait.
- La nouvelle animation suit le joueur mĂȘme sâil se dĂ©place.

TODO C-1â
đ§Ș Tester ce TODOâ
Ă lâaide de la console, retirez la classe "invisible" Ă lâĂ©lĂ©ment .wow :
Un petit « Wow! » animé devrait apparaßtre quelque part :
Si le « Wow! » animĂ© a disparu, câest bon !
TODO C-2â
đĄ Instructionsâ
Sachez que si le « Wow ! » animĂ© est dĂ©jĂ affichĂ© pour un autre joueur, faire un 360° ne permet pas dâafficher lâanimation. (Il faut attendre que lâanimation soit terminĂ©e pour lâautre joueur dâabord) Câest pour cela quâon a besoin dâun if qui vĂ©rifie que lâĂ©lĂ©ment .wow possĂšde la classe "invisible" : on sâassure que lâanimation nâest pas actuellement visible et utilisĂ©e.
đ VĂ©rifiez dans lâannexe (vers la fin de ce document), il y a un exemple trĂšs complet pour placer un Ă©lĂ©ment dans la page par rapport Ă un autre Ă©lĂ©ment, tel que demandĂ© dans ce TODO.
đ§Ș Tester ce TODOâ
DĂ©sormais, si vous maintenez la touche pour tourner Ă gauche ou la touche pour tourner Ă droite, une fois que vous avez fait un 360°, le « Wow! » devrait apparaĂźtre pour une durĂ©e de 800 millisecondes au-dessus de votre personnage. Notez que vous nâavez pas besoin dâavancer pour faire un 360° : vous pouvez le faire sur place.
Notez que si deux joueurs font un 360° simultanĂ©ment, câest seulement le premier qui complĂšte son 360° qui obtient lâanimation. (Tant que lâanimation nâest pas terminĂ©e, faire un autre 360° ne dĂ©clenche rien)
Si on maintient le bouton pour avancer ET un des boutons pour tourner, cela dĂ©clenche Ă©galement lâanimation. (Tant quâon maintient la touche pour tourner assez longtemps pour faire un cercle complet) Cependant, si vous avez mis une vitesse maximale Ă©levĂ©e dans gVitesseMaximale
, cette manĆuvre pourrait ĂȘtre impossible.
TODO D-2â
đ§Ș Tester ce TODOâ
Appelez la fonction choisirEmoji()
Ă rĂ©pĂ©tition dans la console. La majoritĂ© du temps vous aurez des đ, quelques fois des đ€Ź et rarement des đ©.

TODO D-3â
đĄ Instructionsâ
Le premier dĂ©fi risque dâĂȘtre de trouver comment faire pour accĂ©der Ă lâĂ©lĂ©ment HTML de lâĂ©moji Ă placer. Il faut commencer par crĂ©er un tableau qui contient tous les Ă©lĂ©ments possĂ©dant la classe .emoji
. Une fois que câest fait, disons quâon a nommĂ© ce tableau tableauEmojis
, on peut facilement accĂ©der Ă lâĂ©lĂ©ment HTML de lâĂ©moji Ă placer Ă lâaide du paramĂštre indexSmiley
, comme ceci :
tableauEmojis[indexSmiley]
Ă partir de lĂ , comme pour nâimporte quel Ă©lĂ©ment HTML, on peut effectuer des modifications comme .textContent
, .style.propriété
, etc.
Le deuxiĂšme dĂ©fi sera de savoir comment on peut faire pour placer lâĂ©moji par rapport au joueur. Consultez lâannexe pour cela. (Vers la fin de ce document)
đ§Ș Tester ce TODOâ
Lancez une course. (Avec 4P pour avoir la vie tranquille) Faites demi-tour et allez rĂ©cupĂ©rer un objet en circulant Ă contre-sens de la course. (Câest trĂšs important dâaller Ă lâenvers, mais sans aller trop loin) Vous ĂȘtes censĂ©s obtenir un item parmi : Ă©toile (50% de chances), champignon (20% de chances) ou Ă©moji (30% de chances). DĂ©barrassez-vous des Ă©toiles et des champignons jusquâĂ ce que vous obteniez un Ă©moji. NE LâACTIVEZ PAS TOUT DE SUITE ! Avec les 3 autres joueurs, complĂ©tez un tour complet.
Enfin, activez lâĂ©moji. Les trois autres joueurs devraient ĂȘtre cachĂ©s par un Ă©moji gĂ©ant. Il y a de faibles chances quâau moins un des Ă©mojis soit đ€Ź ou đ©, mais ce nâest pas important : tant que les trois joueurs sont bel et bien cachĂ©s par un Ă©moji gĂ©ant, tout est bon. Dans le screenshot ci-dessous, on peut dire que « jâai eu de la chance » dâavoir trois smileys diffĂ©rents. Bien entendu, si un des trois joueurs se dĂ©place, le smiley le suivra pour continuer Ă le cacher.

TODO E-1â
đ§Ș Tester ce TODOâ
Réactualisez la page Web, appuyez sur les touches « a », « b » et finalement sur la flÚche du haut. Vérifiez ensuite, dans la console, que la variable gCode
a noté les touches appuyées :

TODO E-2â
đĄ Instructionsâ
En ce qui concerne « vĂ©rifier que les deux tableaux ont la mĂȘme taille », ça ne devrait pas ĂȘtre trop compliquĂ© : il existe un petit mot-clĂ© simple (voir aide-mĂ©moire !) qui permet de savoir combien il y a dâĂ©lĂ©ments dans un tableau. Il restera Ă comparer cette valeur pour les deux tableaux.
Le plus ardu sera de vĂ©rifier si les deux tableaux contiennent exactement les mĂȘmes valeurs. Il faudra le faire avec une boucle qui compare tableau1[0]
avec tableau2[0]
, puis tableau1[1]
avec tableau2[1]
, etc. Si jamais on trouve deux valeurs diffĂ©rentes Ă la mĂȘme position, câest que le code est erronĂ© !
Nâoubliez pas de vider le tableau gCode
avant de conclure la fonction, dans tous les cas. (Rappel : lorsquâon retourne une valeur avec return
, la fonction sâarrĂȘte immĂ©diatement)
đ§Ș Tester ce TODOâ
Avant chaque test, réactualisez la page Web ! (Ou bien assurez-vous que gCode
soit vide Ă lâaide de la console)
Test 1 : Tapez un code trop court. (Comme A B C) Appuyez sur espace pour valider le code.
- Vérifiez que
gCode
est redevenu vide et que la course secrĂšte ne soit pas apparue.
Test 2 : Tapez un code trop long. (Au moins 11 touches) Appuyez sur espace pour valider le code.
- Vérifiez que
gCode
est redevenu vide et que la course secrĂšte ne soit pas apparue.
Test 3 : Tapez un code erroné de la bonne longueur. (10 touches) Appuyez sur espace pour valider le code.
- Vérifiez que
gCode
est redevenu vide et que la course secrĂšte ne soit pas apparue.
Test 4 : Finalement, tapez le bon code (â â â â â â â â b a
), validez avec espace et assurez-vous que la course secrĂšte apparaisse. gCode
doit Ă©galement ĂȘtre redevenu vide.

TODO F-2â
đĄ Instructionsâ
Câest le DLC le plus dur ! Câest rĂ©servĂ© aux courageux et courageuses. Pour le cĂŽtĂ© mathĂ©matique, vĂ©rifiez, dans lâannexe de ce document, comment faire pour calculer la distance entre deux points.
đ§Ș Tester ce TODOâ
Faites-le test suivant dans la console. (Attention il y a bien 4 paramĂštres, deux nombres puis deux tableaux !)

Enfin, essayez dâobtenir lâitem « Onde de choc ». (30% de chances de lâobtenir lorsquâon est 2e, 40% de chances de lâobtenir lorsquâon est 3e) Le plus simple est de faire un tour complet avec un personnage, puis de prendre un 2e personnage pour aller Ă la pĂȘche aux items.
Une fois lâitem en main, allez proche d'au moins un autre joueur et assurez-vous que seuls les joueurs prĂšs de vous sont repoussĂ©s.


â Grille de correctionâ
đŠ Partie 1 (34 points)â
CritĂšre | Points |
---|---|
TODO 1 : - Tableaux bien remplis. | 2 pts |
TODO 2 : - Bonne structure pour la fonction. - Bien modifié les éléments avec des classes en commun. - ParamÚtres bien exploités. | 1 pt 2 pts 1 pt |
TODO 3 : - ĂlĂ©ments bien cachĂ©s ou affichĂ©s Ă l'aide d'une fonction. - Le bon nombre de contrĂŽles est affichĂ© avec une boucle. - La bonne fonction est appelĂ©e avec le paramĂštre appropriĂ©. | 2 pts 2 pts 1 pt |
TODO 4 : - La valeur de décompte évolue et la partie est indiquée comme active. - La structure permet de choisir parmi 3 blocs d'opérations. - Bons planificateurs interrompus ou lancés. - Bon texte affiché ou caché dans la page. | 2 pts 1 pt 2 pts 2 pts |
TODO 5 : - Valeur de retour valide. - Une boucle a été utilisée de maniÚre appropriée. | 3 pts 2 pts |
TODO 6 : - Selon la touche appuyée, l'item du bon joueur est activé. | 3 pts |
TODO 7 : - Ăcouteurs d'Ă©vĂ©nements nĂ©cessaires ajoutĂ©s. - Une structure permet de bien choisir les opĂ©rations Ă exĂ©cuter. - La difficultĂ© est affichĂ©e et bien mise Ă jour. - document.querySelector() est utilisĂ© au plus trois fois. - La difficultĂ© est bien inchangĂ©e dans certaines situations. | 1 pt 3 pts 2 pts 1 pt 1 pt |
Total | 34 pts |
âš Partie 2 (6 points)â
CritĂšre | Points |
---|---|
DLC A đ : - Les positions moyennes sont bien calculĂ©es et affichĂ©es avec une boucle. | 2 pts |
DLC B đ : - L'animation est bien placĂ©e dans la page. - La visibilitĂ© de l'animation est bien mise Ă jour. | 1 pt 1 pt |
DLC C đ« : - La visibilitĂ© de l'animation est bien mise Ă jour. - L'animation est bien placĂ©e dans la page. | 2 pts 2 pts |
DLC D đ : - Un Ă©moji alĂ©atoire est retournĂ© avec les bonnes probabilitĂ©s. - L'Ă©moji est bien placĂ© dans la page. | 2 pts 2 pts |
DLC E đ : - L'Ă©vĂ©nement clavier est bien exploitĂ©. - La validitĂ© du code est bien Ă©valuĂ©e pour retourner une valeur. - Le tableau du code est toujours rĂ©initialisĂ©. | 1 pts 4 pts 1 pt |
DLC F đ„ : - Le calcul de la distance est valide. - Une boucle appropriĂ©e a Ă©tĂ© utilisĂ©e. - Un tableau valide est retournĂ©. | 3 pts 2 pts 1 pt |
Total | 6 pts |
Si vous complétez trop de DLCs, l'enseignant(e) corrigera simplement 6 points au hasard parmi le travail réalisé.
đ Annexeâ
đš Placer un Ă©lĂ©ment par rapport Ă un autreâ
Disons quâon souhaite placer le cĆur 100 pixels Ă gauche de lâĂ©toile et 50 pixels en haut de lâĂ©toile. (Tel que dans lâimage ci-dessous)

Ultimement, lâobjectif est de changer les valeurs style.left
et style.top
de lâĂ©lĂ©ment HTML qui reprĂ©sente le cĆur. Disons que pour lâĂ©toile on a :
Il faudrait alors que le cĆur obtienne les valeurs :
De cette maniĂšre, il serait bel et bien 100 pixels Ă gauche et 50 pixels en haut de lâĂ©toile. Nous avons donc, pour left
et pour top
, 3 petites étapes à faire :
- Récupérer les valuers pour l'étoile :
- Réduire les valeurs du nombre de pixels nécessaire. Attention ! On ne peut pas simplement faire :
On va donc commencer par convertir la valeur en nombre, PUIS on pourra ensuite réduire sa valeur :
- Finalement, il reste juste Ă changer la valeur de
.style.left
/.style.top
Ă lâĂ©lĂ©ment qui reprĂ©sente le cĆur. Nâoubliez pas de remettre le"px"
dans la valeur ! On a perdu ce morceau Ă cause deparseInt()
.
Et voilĂ ! Il reste Ă faire la mĂȘme chose pour .style.top
, bien entendu.
đ Distance entre deux Ă©lĂ©mentsâ

Disons quâon souhaite vĂ©rifier si la distance entre le point bleu đ” et le point rouge đŽ est supĂ©rieure Ă 50
. Voici comment on procédera :
En gros, on a fait x rouge - x bleu
exposant 2 additionné à y rouge - y bleu
exposant 2. Pourquoi on a vérifié que le résultat était plus grand que 2500
plutĂŽt que 50
? Pour éviter de faire la racine carrée de notre addition, on a simplement mis 50
en exposant 2. On calcule donc la distance au carré et on la compare avec 50
au carré.
On pourrait remplacer lâusage de l'exposant 2 par cette maniĂšre de faire :