- Analyse :
- comprendre le jeu, le spécifier, le déroulement (ex. Diagramme de navigation), commencer à identifier les données (dictionnaire de données, MCD)
- Conception :
- Navigation sur le système : comment le jeu se déroule sur le site web (quelles URL, quelles données à chaque URL)
- Implémentation :
- Implémenter un composant routeur (URL associée à du code à executer (controller)) ;
- Implémenter une boucle complète de jeu (navigation)
Accéder a des démos sur des aspects spécifiques (et clefs !) du projet et détails d'implémentation en PHP.
- PHP 8+ et le module
pdo_mysql; - Un serveur MySQL avec un utilisateur ;
- Créer un fichier
.envà la racine du projet et y renseigner vos credentials:
cp .env.dist .env- Exécuter le script
database/schema.sql. - Pour ajouter des images à la base :
- Créer un dossier
imagesà la racine du projet et y placer des images ; - Pour chaque image, insérer un enregistrement en base de données :
- Créer un dossier
INSERT INTO image (path, latitude, longitude, annee)
VALUES('chute-berlin.jpg', 52.5, 13.4, 1989);Lancer le site web, avec le serveur intégré de PHP :
php -S localhost:8000 -t publicSe rendre à l'URL http://localhost:8000 avec votre navigateur favori.
Fournir un jeu de données test (en base + images) à utiliser pour tester facilement le projet.
- Image : id, localisation (?), année, description, nom (path)
| Libellé | code | Type | Commentaire/Contrainte |
|---|---|---|---|
| Nom de l'image dont il faut deviner année et localisation | path |
AN | Unique. Chaîne de caractères écrite en kebab-case. Comprend l'extension du fichier. Par ex chute-du-mur.png. Formats acceptés : png, jpeg, jpg, webp |
Légende :
- AN : AlphaNumérique ;
- N : Numérique ;
- B : Booléen
- D : Datetime
- Mettre en place une gestion d'erreurs ;
- Intégration CSS propre et agréable ;
- Ajouter la carte interactive pour proposer l'emplacement géographique (longitude et latitude) ;
- Refactoriser/restructurer le code. Le code est volontairement laissé en l'état. Essayer de trouver des abstractions utiles (fonctions, namespaces, classes si POO, etc.) pour restructurer le code.
- Ne pas donner accès à toutes les images. Pour le moment les images sont dans le répertoire
public. Elles sont facilement accessibles par les clients avant de commencer une partie. Elles devraient uniquement être accessibles à chaque round. Pour cela, il faut créer un contrôleur en charge de fournir une image liée à un round sur une URL custom (par ex. fournirGET round/image?step=1) [x] - Avancé : Fixer la navigation. Le site casse dès que l'on rafraîchit la ressource /round. Par exemple, si on utilise le bouton Revenir en arrière (Back) du navigateur la session continue d'aller au round suivant, des GET répétées sur même
/roundfait avancer le jeu et l'image, etc. (GETdoit être sûre et idempotente !). Pour cela, utiliser le pattern PRG ; [x]
- TimeGuessr, le jeu officiel à cloner