Vincent Aranega
Le but de ce projet et de fournir un genre de terrain de jeu pour personnage via un serveur REST. Le serveur sera capable d’accepter plusieurs joueurs en même temps et de gérer les plusieurs actions du joueurs. Le protocole donné repose sur des requêtes POST/GET (donné à la fin du document)
la connexion du joueur (sans authentification),
l’observation d’une pièce (retourner son l’état),
le déplacement d’un joueur vers une pièce adjacente,
l’observation d’un autre joueur/monstre (retourner l’état d’un joueur/monstre),
mener une attaque vers un autre joueur si on est dans la même pièce.
Ce projet et le complément du projet de serveur de jeu MUD-like. Il se découpe en deux parties, l’une reposant sur l’autre. La première partie est la production d’un binding vers le server de jeux qui répond à un protocole en particulier. La second partie du projet et la production d’une client utilisant ce binding et qui propose une interface simple de jeu sous forme textuelle.
Le protocole est le même que pour celle du serveur, seulement quelques actions sont possibles
se connecter au serveur (sans authentification)
observer une pièce dans laquelle on se trouve
observer un autre joueur/monstre
se déplacer dans un autre pièce
mener une attaque vers un autre joueur si on est dans la même pièce
Le but de ce projet, proposé par Adil, est de reproduire l’équivalent du jeu Pyramide où un joueur doit retrouver un mot en se servant des mots proposés par son partenaire. Les mots proposés par le partenaire ne doivent pas être de la même famille que le mot à trouver.
On vous demande d’implémenter un tel jeu avec le choix de la technologie. Il peut-être en full texte (terminal…etc) avec une IA minimale qui se contente de sélectionner un mot et de proposer comme indice des mots dans un ensemble de mots définis à l’avance. Il peut-être en mode web avec une IA minimale aussi. Dans ce cas, vous définirez une API rest pour pouvoir jouer (création d’une partie, gestion des réponses…etc) et une partie front dans la technologie de votre choix (elle peut-être full texte avec des appels réseaux à l’API Rest ou graphique, ou full web).
La manipulation de texte et chaine de caractère d’un point de vue programmatique se fait assez simplement par enchainement de fonctions. En revanche, si des utilisateurs non programmeur veut pouvoir effectuer un ensemble d’opérations sur une chaine ou un texte, ils sont en général bloqués. Pour qu’un utilisateur puisse facilement "composer" la manière dont il veut modifier un texte, il serait intéressant de proposer un moteur flexible de transformation de texte.
On vous propose ici de créer un moteur de transformation de texte qui doit pouvoir être capable de permettre de composer des traitements simple sur des chaines de caractères. Ces traitements sont définis à l’avance par des developeurs. L’utilisateur propose alors un moyen de composer un chemin de modification via un fichier de configuration (YAML, JSON, …). Un texte est ensuite donné à votre moteur avec ce fichier de configuration qui va venir paramétrer une chaine de modification en mémoire.
Aussi, bien que les actions de modifications soient définies à l’avance, il est important que n’importe quel dévelopeur puisse en rajouter facilement. Pensez donc bien à écrire une architecture claire et à fournir des mécanismes simples pour que n’importe qui puisse facilement écrire une nouvelle action de modification (par exemple, dans un langage objet, le dev. n’aurait qu’à implémenter une interface ou hériter d’une classe abstraite).
Content-Type: application/json
POST <url>/connect
POST <url>/<guid>/command
201
POST <url>/connect
{
"guid": <guid>
"totalvie": <integer>
"salle": {
"description": <description (string)>
"passages": [ "N", "E", ... ]
"entites": [ <guid1>, <guid2>, <guid3>, ...]
}
}
GET <url>/<guid>/regarder
{
"description": <description (string)>
"passages": [ "N", "E", ... ]
"entites": [ <guid1>, <guid2>, <guid3>, ...]
}
POST <url>/<guid>/deplacement
{
"direction": "N" | "S" | "E" | "W"
}
{
"description": <description (string)>
"passages": [ "N", "E", ... ]
"entites": [ <guid1>, <guid2>, <guid3>, ...]
}
GET <url>/<guidsource>/examiner/<guiddest>
{
"description": <description>
"type" : "JOUEUR" | "MONSTRE"
"vie": <integer>
"totalvie": <integer>
}
POST <url>/<guidsource>/taper/<guidcible>
{
"attaquant": {
"guid": <guid>
"degats": <integer>
"vie": <integer>
}
"attaque": {
"guid": <guid>
"degats": <integer>
"vie": <integer>
}
}
Si la requete est malformée (pas du json valide, ou bien manque des fields etc): 400
Si l’URL existe pas (commande inconnue, guid inconnu, etc.): 404
code 409 pour tout autre erreur, réponse json :
{
"type": "MORT" | "MUR"
"message:" string
}
Dart, ELM, Go, Kotlin,
Typescript, Rust, Swift, Pharo
C#, Lua, Elixir, Nim, V
Erlang… etc