Skip to content
This repository has been archived by the owner on May 12, 2021. It is now read-only.

topinambours/rest-takenoko

Repository files navigation


Takenoko
Takenoko

Un Takenoko en Java avec une API rest

PresentationAPIArchitectureLancer une partiePlan de routeLa boiteConception

Presentation

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

API First conception : https://github.com/uca-m1informatique-softeng/topinambours-takenoko/blob/master/doc/etude.md

Architecture globale du projet

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

Installer les containers

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

Lancer une partie

1. Lancer une instance serveur

$ docker run --network host topinambours/takenoko:<Version>-server <port> <gameSize>
  • Paramètres serveur
    • port Port sur lequel la partie est accessible
    • gameSize 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.

2. Lancer des instances clients

$ docker run --network host topinambours/takenoko:<Version>-client <port> <server_host> <user_id>
  • Paramètres client
    • port Port sur lequel le joueur joue
    • server_host Adresse de la partie ex : http://127.0.0.1:8080
    • user_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.

Plan de route

  • 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

La boite

Nombre Nom Image
1 Figurine Jardinier
1 Figurine Panda
1 Carte Empereur
20 Bâtonnet irrigation
8 (4*4) Jetons action
1 Dé spécial
26 (9 + 7 + 10) Socle de bambou
64 (21 + 17 + 26) sections de bambou
9 (3 + 3 + 3) Tuiles aménagement
15 Cartes objectif panda
15 Cartes objectif parcelle
15 Cartes objectif jardinier
1 Tuile étant tuile de départ
27 Tuiles parcelle
11 Tuiles vertes
7 Tuiles roses
9 Tuiles jaunes

Notes de conception

Système de coordonnées

Représentation des arrêtes