Projets 2020 en C3P

Vincent Aranega

#1 Seveur REST de jeu MUD-like

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)

#1 Actions utilisateur

  • 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.

#2 Client REST de jeu MUD-like

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.

#2 Actions utilisateur

  • 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

#3 Jeu Pyramide like (truc sur France 2)

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.

#3 Travail demandé

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).

#4 Moteur de transformation de texte

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.

#4 Travail demandé (1/2)

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.

#4 Travail demandé (2/2)

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).

Protocol MUD

Généralités

Type du contenu des requêtes HTTP

Content-Type: application/json

Formes générales
POST <url>/connect
POST <url>/<guid>/command

Connection

code de retour
201
url
POST <url>/connect
réponse
{
 "guid": <guid>
 "totalvie": <integer>
 "salle": {
    "description": <description (string)>
    "passages": [ "N", "E", ... ]
    "entites": [ <guid1>, <guid2>, <guid3>, ...]
  }
}

Regarder salle

url
GET <url>/<guid>/regarder
reponse
{
 "description": <description (string)>
 "passages": [ "N", "E", ... ]
 "entites": [ <guid1>, <guid2>, <guid3>, ...]
}

Déplacement

url
POST <url>/<guid>/deplacement
requete
{
  "direction":  "N" | "S" | "E" | "W"
}
reponse
{
 "description": <description (string)>
 "passages": [ "N", "E", ... ]
 "entites": [ <guid1>, <guid2>, <guid3>, ...]
}

Examiner

url
GET <url>/<guidsource>/examiner/<guiddest>
reponse
{
 "description": <description>
 "type" : "JOUEUR" | "MONSTRE"
 "vie": <integer>
 "totalvie": <integer>
}

Taper

url
POST <url>/<guidsource>/taper/<guidcible>
reponse
{
  "attaquant": {
    "guid": <guid>
    "degats": <integer>
    "vie": <integer>
  }
  "attaque": {
    "guid": <guid>
    "degats": <integer>
    "vie": <integer>
  }
}

Gestion d’erreurs

  • 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
}

Langages projets

Propositions
  • Dart, ELM, Go, Kotlin,

  • Typescript, Rust, Swift, Pharo

  • C#, Lua, Elixir, Nim, V

  • Erlang…​ etc