Devoir de l'année dernière
Attention, cette année le cours de JS est tout nouveau. Ce devoir est un vieux sujet écrit avant que ce cours ne soit conçu. Il est donné à titre d'exemple pour vous entrainer. Le sujet que vous aurez au devoir pourra être différent et ne contiendra pas de script php comme dans celui-ci.
Consignes
A la fin de la séance, créez une archive de votre code et déposez-la sur la page moodle du cours. Cette archive doit contenir tous les fichiers permettant de faire fonctionner votre code.
Commencez par télécharger cette archive. Elle contient un répertoire avec un script php
et des images. Pour rappel, une manière de lancer un serveur local est d'exécuter la commande suivante : php -S localhost:8888
Il ne faut pas modifier les codes PHP
- Pensez à sauvegarder votre code fréquemment.
- Vous n'êtes pas autorisés à utiliser react. Vous n'êtes pas autorisés à utiliser chatGPT ou autre IA.
- Vous avez le droit à toute la documentation en ligne que vous voulez.
- Attention à la qualité du code que vous écrivez, il est possible que j'en tienne compte dans la notation.
Très important : Si votre code ne donne pas le résultat escompté, ne restez pas coincés ! Avancez ! J'évaluerai tout code écrit !
Exercice Jeu de culture générale
Regardez la vidéo ci-dessous. Elle illustre le résultat final attendu:
- Au lancement du jeu, l'utilisateur choisit dans une liste s'il souhaite jouer en mode expert ou facile.
- Si le niveau expert est choisi, la photo d'un président s'affiche et à côté 5 drapeaux.
- Si le niveau facile est choisi, la photo d'un président s'affiche et à côté 3 drapeaux.
- Le joueur doit trouver à quel drapeau correspond la photo du président qui vient de s'afficher en cliquant sur le bon drapeau. Si le joueur clique sur le mauvais drapeau, le nombre de mauvaises réponses est incrémenté de 1 et le fond de la cellule du tableau qui récapitule les scores est passé en rouge.
- Si le joueur clique sur le bon drapeau alors le nombre de bonnes réponses est incrémenté de 1, le fond de la cellule est passé en vert et un nouveau président est affiché.
- Un président n'est jamais affiché deux fois.
- Quand les 5 présidents ont été trouvés alors, à la place de la photo d'un président, s'affiche le message "jeu terminé" et les drapeaux sont supprimés. Pour rejouer, il faut rafraîchir la page.
Les ressources qui sont données sont celles présentes sur le serveur (et donc publiquement accessibles):
- Un répertoire
assets
contenant toutes les images nécessaires pour jouer. - Un fichier
presidents.json
contenant 5 entrées selon le formatnom du président
/url
de l'image du président. - Un script
getDrapeaux.php
chargé de vous retourner les url des images à afficher.- Ce script a deux paramètres
$nom
et$difficulte
. $nom
est le nom du président que le joueur doit trouver.$difficulte
est le niveau de difficulté du jeu (1 pour facile, 2 pour expert).- Si le niveau de difficulté est de 1, alors le script vous retourne la liste de 3 url de drapeaux, 5 sinon. La liste est fournie dans un ordre aléatoire.
- Par exemple,
getDrapeaux.php?nom=Mandela&difficulte=1
peut retourner["france.png","usa.png","affDusud.png"]
. - Par exemple,
getDrapeaux.php?nom=Mandela&difficulte=2
peut retourner["france.png","chine.png","bresil.png","affDusud.png","usa.png"]
.
- Ce script a deux paramètres
- Un script
script.php
chargé de définir si une réponse qui lui est envoyée est bonne ou non.- Ce script a deux paramètres
$nom
et$drapeau
. - Si le nom correspond bien au drapeau alors le script retourne "gagne".
- Si le nom ne correspond pas au drapeau alors le script retourne "perdu".
- Par exemple la requête
/script.php?nom=Jinping&drapeau=affDusud.png
retourne "perdu". - Par exemple la requête
/script.php?nom=DeGaulle&drapeau=france.png
retourne "gagne".
- Ce script a deux paramètres
Ce sur quoi vous êtes évalués (20 points au total)
Respectez au maximum les contraintes suivantes:
-
Chargement des données JSON (5 points):
- Charger de manière asynchrone les données liées aux présidents (4 points).
- Afficher aléatoirement un président (1 point).
-
Envoyer une requête aux scripts (5 points):
- Générer et envoyer la requête asynchrone paramétrée au script
getDrapeaux.php
en fonction du nom du président et de la difficulté du jeu (3 points). - Générer et envoyer la requête asynchrone paramétrée au script
script.php
en fonction du drapeau cliqué par le joueur (2 points).
- Générer et envoyer la requête asynchrone paramétrée au script
-
Gérer la réponse du serveur (10 points):
- Récupérer la réponse du serveur
getDrapeaux.php
et afficher les drapeaux retournés par le serveur. (4 points). - Récupérer la réponse du serveur
script.php
et faire la mise à jour du tableau si la réponse est mauvaise ou bonne comme dans la vidéo (incrémentation du compteur et changement de couleur du fond de la cellule concernée) (4 points). - Afficher le président suivant. Il est choisi aléatoirement et ne doit jamais avoir été proposé à l'utilisateur. (1 point).
- Afficher "jeu terminé" quand toutes les associations président/drapeau ont été trouvées par le joueur. (1 point). Sur la vidéo on voit qu'à la fin d'une partie le jeu ne recommence pas automatiquement, j'ai rechargé manuellement la page pour pouvoir jouer à nouveau.
- Récupérer la réponse du serveur
Vous n'êtes pas évalués sur la mise en page du site. Si les blocs ne sont pas placés aux mêmes endroits que sur la vidéo, ce n'est pas grave. L'essentiel c'est que la page soit fonctionnelle.