Giter VIP home page Giter VIP logo

inf4043-letter-game-poinsignon-teissier's Introduction

TP Architecture Logicielle / Inf4043 - 2017 - Jeux de lettres

Compilation & Démarrage

Pour compiler et lancer le projet avec Maven, utilisez les commandes ci-dessous en étant dans le dossier "LetterGame"

mvn package
java -jar target/LetterGame-1.0.jar

Pour jouer, entrer un nom de joueur ou BOT et appuyez sur le touche ENTRÉE

Règles du jeu, objectif du jeu et modalités de rendu

https://github.com/MLabusquiere/TP_4A_2017_Letter_Game

Fonctionnalités développées

  • Une première étape consiste à pouvoir jouer à plusieurs (2, 3, 4 joueurs avec ou sans bot) autour d'un même écran.

alt tag

  • Une interface en ligne de commande offre la possibilité d'améliorer un mot ou de le voler.

alt tag

  • Une intelligence artificielle permet de jouer contre l'ordinateur. Elle privilégie les mots les plus longs du dictionnaire et favorise dans l'ordre le vol, la création à partir du pot commun et l'amélioration de ces propres mots. Le choix a été fait de la rendre difficile à battre, mais il est possible de lui conférer une attitude plus humaine en lui donnant un pourcentage d'échecs (au lieu de trouver systématiquement des mots) ou de privilégier des mots plus courts.

alt tag

Description de l'architecture

Le projet contient 8 packages distincts qui assurent le fonctionnement de l'application.

  • Main initialise et lance le jeu.
  • Bag gère les interactions liées au sac comme prendre une lettre du sac. Les tirages sont associés avec des fréquences adaptées à la langue de Molière.
  • Bowl à la gestion des lettres du pot commun.
  • Dictionary vérifie si un mot existe dans le dictionnaire, enlève les accents des chaînes de caractère.
  • Game permet les interactions des joueurs sur le modèle hot seat où les joueurs interagissent à tour de rôle.
  • Move contient des interactions spécifiques comme le vol de mot, la complétion de mot, des affichages graphiques.
  • Player comprend les éléments liés aux joueurs (ordre de passage, comparaison de score) et également l'IA.
  • Util contient des éléments utilisés dans d'autres packages comme la comparaison de la longueur des mots (et par extension permet la comparaison par le score).
  • Des test unitaires ont été réalisés avec l'utilisation de JUnit et la librairie AssertJ

Illustration des principes SOLID/Design Pattern

###Singleton Pour assurer qu'il n'existe qu'une seule instance de la classe et de fournir un moyen d'obtenir cette instance unique nous avons mis en oeuvre le pattern Singleton. Nous avons créé un attribut statique qui va permettre de stocker l’unique instance de la classe, nous avons ensuite testé cet attribut.

public static final Bowl getInstance() {     
if (instance == null)       
instance = new Bowl();
return instance;
}

###Factory Method La classe correspondant à AMove va être fortement couplée à tous les types de mouvement (c'est un problème si l'on ajoute ou supprime des mouvements). Le pattern a été utilisé pour découpler les différents types de mouvement à instancier (que l'on connaisse leur type par avance ou pas). Enfin, nous avons déclaré la méthode comme « final » afin que ses sous-classes ne puissent pas la redéfinir.

public static final AMove factory(String type) {   
try {
Class<?> moveClass = Class.forName("fr.esiea.poinsignon.teissier.move." + type);

if (moveClass != AMove.class && AMove.class.isAssignableFrom(moveClass))         
return (AMove)moveClass.newInstance();
}
catch (Exception e) {     }

throw new RuntimeException(type + " is not an available move");
}

###Flyweight L'instanciation de toute la panoplie des lettres ayant des accents est très gourmande en mémoire. Au lieu de manipuler tous ces objets, nous avons utilisé le pattern Flyweight.

String original = "aáeéiíoóöőuúüűAÁEÉIÍOÓÖŐUÚÜŰ";

###SOLID - Single Responsibility Principle Dans le cadre d'une démarche SOLID, nous avons fait en sorte que certaines classes comme "ADctionnary" soient à responsabilité unique, cette classe ne fait qu'une unique chose : gérer la relation des mots inscrits par rapport au dictionnaire. On gagne en souplesse et l'ensemble est moins sensible au changement.

inf4043-letter-game-poinsignon-teissier's People

Contributors

dposign avatar cteissier avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.