Jeu du Plus ou Moins, en réseau.
Réalisez 2 programmes console, client et serveur, à l'aide du framework Qt. Le serveur attend un ou plusieurs clients et une fois connectés, choisi un nombre aléatoire pour chacun que ce dernier doit ensuite trouver.
- Les deux programmes doivent résider dans le même dépôt Git mais chacun disposer de son dossier
- Les deux programmes doivent pouvoir être build à la suite en une seule commande
- Le type de socket à utiliser est WebSocket non-sécurisée (
QWebSocket
) - Les données réseau doivent transiter au format
JSON
- Seule la programmation évènementielle est autorisée (l'utilisation de thread/fork/...est INTERDITE)
- Toutes les erreurs doivent être gérées gracieusement
- Aucun autre framework ou librairie n'est autorisé
Option | Type | Défaut | Description |
---|---|---|---|
-h --host |
String | localhost |
Host name du serveur à contacter. |
-p --port |
Nombre | 4242 |
Port sur lequel se connecter. |
-n --name |
String | Identité du client (désactivée si --auto utilisée). |
|
-a --auto |
Trouve le nombre aléatoire à la place de l'humain. |
Option | Type | Défaut | Description |
---|---|---|---|
-p --port |
Nombre | 4242 |
Port sur lequel attendre les clients. |
-l --limit |
Nombre | -1 |
Limite de tentatives par partie (-1 pour illimitées). |
-b --bounds |
String | 1,100 |
Bornes de l'intervalle (entiers signés, X et Y inclus). |
-
À chaque tentative du client, le serveur indique si le nombre a trouver est supérieur ou inférieur au nombre tenté, ou si une erreur s'est produite.
-
Si le client dépasse le nombre de tentatives possibles, la partie s'arrête et le serveur indique quel était le nombre à trouver.
-
Le serveur doit garder un historique des parties jouées par les humains, même une fois relancé :
- Nom du joueur
- Date de début de partie
- Date de fin de partie
- Nombre de tentatives
- Statut de la partie (gagnée, perdue, abandonnée)
-
Le serveur doit transmettre en fin de partie les 5 meilleurs scores du joueur s'il est humain et non anonyme.
Seront évalués les critères suivants :
- Capacité du serveur à gérer plusieurs clients en parallèle
- Gestion des différentes erreurs classiques (serveur introuvable, connexion perdue, format invalide, ...)
- Propreté, lisibilité et cohérence du code et de son style
- Qualité du design et de l'architecture du code
- Capacité à proposer à l'utilisateur final une expérience agréable