Vous venez d'ĂȘtre contactĂ© par Blizzard.
L'entreprise est sur le point de créer plusieurs jeux et vous a sélectionné pour créer un systÚme de classement et match-making universel.
Au dĂ©part chaque joueur est considĂ©rĂ© comme ayant le mĂȘme niveau que les autres, puis son niveau augmentera ou descendra selon ses victoires, dĂ©faites et match null.
Chaque joueur commence avec 1200 points. 2700 points et plus représente les meilleurs, 1200 et en dessous sont les débutants.
Chaque tranche de 200 points est un niveau de 1200 Ă 2200, puis tranche de 100 points est un niveau de 2200 Ă 2500.
Un dernier gap de 200 points conclu la grille.
Afin de connaßtre la probabilité qu'un joueur A gagne face à un joueur B, il faut appliquer la formule suivante :
avec Rb le niveau du joueur B et Ra le niveau du joueur A.
lorsqu'un joueur gagne il obient 1.
Lorsqu'un joueur perds il obtient 0.
En cas d'égalité, chaque joueur obtient 0,5.
pour corriger le niveau d'un joueur, en fonction de l'issue d'un match, il faut appliquer sur chaque joueur la formule suivante :
avec R le niveau du joueur, x le résultat du match et y la probabilité attendue.
Afin de tester votre algorithme, vous pouvez utiliser les données suivantes:
Joueur A avec un ratio de 1700, est un joueur averti
Joueur B avec un ratio de 2500, est un joueur expert
Joueur C avec un ratio de 1200, est un joueur qui a gagné quelques parties
Joueur D avec un ratio de 1800, est un joueur averti mais un peu plus
probabilité du joueur A face au joueur B: 0.0099009900990099
probabilité du joueur B face au joueur A: 0.99009900990099
probabilité du joueur C face au joueur A: 0.053240215202022
probabilité du joueur A face au joueur C: 0.94675978479798
probabilité du joueur D face au joueur A: 0.57146311740838
probabilité du joueur A face au joueur D: 0.42853688259162
Avec 1 pour la certitude de gagner, et 0 la certitude de perdre.
Admettons que A gagne face Ă B contre toute attente. Il faudrait corriger leur niveaux respectifs.
Le nouveau niveau du joueur A est: 1700 + 32 * (1 - 0.0099009900990099)
soit 1731.68288
Le nouveau niveau du joueur B est: 2500 + 32 * (1 - 0.0099009900990099)
soit 2468.31712
Réaliser un systÚme de matchmaking.
- En tant que joueur je peux m'enregistrer avec mon pseudo qui doit ĂȘtre unique, et un mot de passe qui devra ĂȘtre sĂ©curisĂ©
- En tant que joueur je peux me connecter avec mon pseudo et mon mot de passe
- En tant que joueur une fois connecté, je suis redirigé vers une page d'accueil qui affiche :
- mon classement
- la liste les 10 meilleurs joueurs
- la liste de mes matchs en attente de saisie score avec un bouton qui me redirige vers la page de match
- un bouton "Lancer un match" visible uniquement si je n'ai pas de match en attente de saisie
- En tant que joueur lorsque je lance un match, je suis redirigé vers une page d'attente de match
- Si au minimum 2 joueurs Ă©tant dans la mĂȘme tranche de niveau sont en attente de match, crĂ©er un match et rediriger les joueurs sur une page pour le match. Si aucun autre joueur n'est disponible pour la mĂȘme tranche de niveau, attendre 5 secondes et rĂ©essayer. AprĂšs 20 secondes essayer de trouver des joueurs en incluant les joueurs du palier supĂ©rieur, toujours avec les joueurs du mĂȘme niveau en prioritĂ©
- Depuis la page du match, les joueurs peuvent cliquer sur le joueur gagnant. AprÚs le clic, les joueurs sont redirigés vers la page d'accueil
- Si les 2 joueurs ont cliquĂ© sur la mĂȘme chose, alors pas d'ambiguĂŻtĂ©, sauvegarder le rĂ©sultat du match et appliquer la mise Ă jour du niveau du joueur. En cas de diffĂ©rence, il y a un litige, appliquer un match nul.
Le PHP doit ĂȘtre Ă©crit en Objet.
Vous pouvez utiliser un framework PHP (symfony, laravel, api-platform), Ă condition de vous contraindre d'utiliser au minimum 2 design pattern issu de https://refactoring.guru/design-patterns/catalog
Rédiger un fichier README.md à la racine de votre projet qui explique comment installer, lancer et utiliser votre projet.
Respecter la spécification REST, HTTP, URL, vu durant les cours.
Utiliser des design patterns. Vous pouvez vous aider de https://refactoring.guru/design-patterns/catalog
Le choix de la base de données.
Le choix d'un framework css (bulma, foundation, tailwind, vanillacss) + éventuellement d'un thÚme/template graphique gratuit tout fait pour gagner du temps ici (le fonctionnel avant le beau, n'y passez pas trop de temps, en vrai je m'en moque tant que les fonctionnalités sont là ).
Le choix de la technologie front (vuejs, sveltjs, alpinejs, vanillajs).
Ce n'est pas prĂ©vu dans cette version, mais gardez en tĂȘte dans votre conception, que l'an prochain il faudra ajouter le fait qu'on puisse avoir plusieurs leagues/championnats, et que les joueurs pourront choisir dans quelle league/championnat s'inscrire, et potientiellement avoir un match par league en attente.