Un Takenoko en Java avec une API rest
Presentation • API • Architecture • Lancer une partie • Plan de route • La boite • Conception
L'équipe
Le projet consiste à réaliser en Java une version numérique du jeu takenoko créé par Antoine Bauza. Version textuel n'étant pas destinée à être jouée par des êtres humains mais par des robots jouants de façon autonome.
API First conception : https://github.com/uca-m1informatique-softeng/topinambours-takenoko/blob/master/doc/etude.md
Le projet se compose d'une partie client et d'une partie serveur containérisés grâce à Docker. Cette approche permet d'avoir plus de souplesse concernant le passage à l'échelle de l'application.Ainsi, avec notre architecture, il serait possible d'ajouter une couche entre client et le serveur, voir ici un système de matchmaking et une autorité se chargeant de créer les parties. Ainsi un joueur peut jouer une partie sans pour autant spécifier une instance de partie. Du côté serveur il est imaginable de proposer une grappe de Game Provider afin d'augmenter le nombre de parties jouables simultanément avec des systèmes pouvant surveiller l'utilisation des serveurs afin d'ajuster les ressources à mettre en œuvre pour les clients.
Une solution existe déjà pour ajouter ces abstractions : kubernetes
Remplacer <Version>
par le numéro de version ou bien par le tag latest
pour obtenir les dernière images stables.
# Serveur
$ docker pull topinambours/takenoko:<Version>-server
# Client
$ docker pull topinambours/takenoko:<Version>-client
$ docker run --network host topinambours/takenoko:<Version>-server <port> <gameSize>
- Paramètres serveur
port
Port sur lequel la partie est accessiblegameSize
Le nombre de participants à la partie
Une partie démarre une fois le nombre maximal de participants atteint.
Example d'utilisation :
$ docker run --network host topinambours/takenoko:latest-server 8080 3
Fournira une instance de partie de pouvant accueillir 3
joueurs qui sera accessible depuis le port 8080
.
$ docker run --network host topinambours/takenoko:<Version>-client <port> <server_host> <user_id>
- Paramètres client
port
Port sur lequel le joueur joueserver_host
Adresse de la partie ex : http://127.0.0.1:8080user_id
Identifiant unique (dans le cadre d'une unique instance)
Example d'utilisation :
$ docker run --network host topinambours/takenoko:<Version>-client 8081 http://127.0.0.1:8080 15
Fournit un client avec pour id 15
accessible depuis son adresse via le port 8081
et contactera le serveur localisé à l'adresse http://127.0.0.1:8080
pour joueur sa partie.
- Version 0.1 : Redémarrage du projet from scratch avec un takenoko minimaliste pour son adaptation à l'API REST.
- Version 0.2 : Ajout de l'irrigation dans le takenoko. Ce qui comprend l'ajout d'un nouveau système de coordonnées ainsi qu'une maj de l'API-Rest. De plus, une modification des tuiles s'impose ainsi qu'une stratégie de base.
- Version 0.3 : Ajout du panda dans le takenoko.Ce qui comprend l'ajout d'un nouveau objectif principale avec son lot de cartes objectifs pandas. De plus, les bambous vont être revus ainsi qu'une stratégie de base ajoutée. Pour finir, toutes ces modifications seront accessibles via l'API-Rest.
- Version 0.4 : Les plateaux entre le joueur et le serveur sont maintenant synchronisés. C'est-à-dire que maintenant le joueur à la possibilité de pull les différences de plateau entre 2 moments données, par exemple, entre son précédent tour et celui qu'il est en train de préparer. L'utilité principale étant la possibilité au joueurs d'avoir accès à plus d'informations l'aidant à la conception de stratégie plus perfectionnées.
- Version 0.5 : Recast general pour correctif : correction du plateau permettant d'avoir correctement les datas via l'API; correction des codes d'erreur http; correction d'une faille sécurité permettant de poser des tuiles sur des emplacements illegaux.
- Version 0.6 : Patch de sécurité au niveau de l'api visant notamment à protéger les parties contre des éléments extérieurs via le système d'authentification. Toute requête post n'étant pas ou mal authentifié est maintenant refusée. Pour finir, les accès sont maintenant logs