Aller au contenu principal

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).
danger

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 !

Aperçu du jeu

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 :

Menu du jeu

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)

ContrĂŽles du jeu

🏁 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.
info

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.

Test de TODO
L'ombre est plutĂŽt discrĂšte : c'est le cercle gris qu'on peut voir derriĂšre le personnage.

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.

Test de TODO

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

Test de TODO

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)
Test de TODO
Par exemple, quand je choisis « 3P », je vois trois contrÎles.

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 :
    Test de TODO
  • 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 :
    Test de TODO
  • 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 :
    Test de TODO
  • Lorsque le dernier joueur termine la course, il y a plutĂŽt ce message :
    Test de TODO
  • Des scores sont affichĂ©s quand tout le monde a terminĂ©.
    Test de TODO

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​

Instructions de TODO

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.

astuce

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 :

Test de TODO

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.

Test de TODO

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.

Test de TODO

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 😇)

Bravo ! Le jeu de base est fonctionnel et la partie 1 est terminĂ©e ! đŸ„ł

attention

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, puis 2e, puis 1er, ma position moyenne sera 1.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 est 4 car le premier joueur a terminĂ© 1er, puis 2e, puis 1er. (Ce qui fait une somme de 4) Si on divise 4 par le nombre de courses (c'est-Ă -dire 3) 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 !

Test de TODO
AprĂšs une course

Test de TODO
AprĂšs deux courses

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)

Test de TODO

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.
Test de TODO

TODO C-1​

đŸ§Ș Tester ce TODO​

À l’aide de la console, retirez la classe "invisible" Ă  l’élĂ©ment .wow :

Test de TODO

Un petit « Wow! » animé devrait apparaßtre quelque part :

Test de TODO

Si le « Wow! » animĂ© a disparu, c’est bon !

TODO C-2​

💡 Instructions​

remarque

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.

Test de TODO

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 đŸ’©.

Test de TODO

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.

Test de TODO

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 :

Test de TODO

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 de TODO

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 de TODO

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 de TODO

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.

Test de TODO

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 !)

Test de TODO

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.

Test de TODO
Avant
Test de TODO
AprĂšs

✅ Grille de correction​

📩 Partie 1 (34 points)​

CritĂšrePoints
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
Total34 pts

✹ Partie 2 (6 points)​

CritĂšrePoints
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
Total6 pts
attention

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)

Placer un élément par rapport à un autre

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 :

Placer un élément par rapport à un autre

Il faudrait alors que le cƓur obtienne les valeurs :

Placer un élément par rapport à un autre

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 :

  1. Récupérer les valuers pour l'étoile :
Placer un élément par rapport à un autre
  1. Réduire les valeurs du nombre de pixels nécessaire. Attention ! On ne peut pas simplement faire :
Placer un élément par rapport à un autre

On va donc commencer par convertir la valeur en nombre, PUIS on pourra ensuite réduire sa valeur :

  1. 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 de parseInt().
Placer un élément par rapport à un autre

Et voilĂ  ! Il reste Ă  faire la mĂȘme chose pour .style.top, bien entendu.

📐 Distance entre deux Ă©lĂ©ments​

Distance entre deux points

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 :

Distance entre deux points

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 :

Distance entre deux points