Créez une énumération Action qui propose les actions SCISSOR, ROCK et PAPER
Créez une interface Player qui propose les méthodes suivantes :
void play() ; -> détermine l'action du joueur
void setMatchResult(Player opponent, Action action, Result result) ; indique au joueur qui est son adversaire et la dernière action qu'il a joué
Action getLastAction(); -> retourne la dernière action du joueur
Créez une interface Result qui propose les méthodes suivantes :
boolean isDraw(); -> indique si le résultat du match est un match nul
Player getWinner(); -> retourne le joueur qui a gagné
Player getLoser(); -> retourne le joueur qui a perdu
List<Player> getPlayers(); -> retourne la liste des joueurs
Créez une interface Referee qui propose les méthodes suivantes :
void referee(Player p1, Player p2);
Result getLastResult(); -> retourne le dernier résultat calculé par l'arbitre
Créez une interface PlayerFactory qui propose la méthode suivante
Player create() -> crée un Player
Créez une interface RefereeFactory qui propose la méthode suivante
Referee create() -> Créez un Referee
Implémentez trois Player et les PlayerFactory qui vont avec :
Implémentez un Referee et le RefereeFactory qui va avec. Cet arbitre utilise les règles standards SCISSOR < ROCK < PAPER < SCISSOR
Implémentez un Referee et le RefereeFactory qui va avec. Cet aribre utilise vos règles, il a même le droit de tricher.
Implémentez un Player et le PlayerFactory qui va avec. Ce joueur utilise la stratégie que vous souhaitez.
Faites affronter votre joueur avec l'un des autres joueurs précédemment implémenté.
Faites affronter votre joueur avec un arbitre et un autre joueur de deux autres étudiants.
Créez une interface Rank qui propose les méthodes suivantes :
Player getPlayer() -> Retourne le joueur associé au classement.
int getScore() -> Retourne le score du joueur
Créez une interfance Ranking qui propose la méthode suivante :
List<Rank> getRanks(); -> Retourne une liste contenant le classement de chaque joueur
Créez une interface Tournament qui propose les méthodes suivantes :
void start() throws NoRefereeException, NoEnoughPlayerException; -> Démarre le tournoi. Cette méthode doit lancer une exception s'il n'y a pas d'arbitre ou s'il n'y a pas assez de joueurs.
Ranking getRanking() -> Retourne le classement du tournoi
Créez une interface TournamentFactory qui propose la méthode suivante :
Tournament create(); -> Crée un nouveau tournoi
Implémentez un Tournament et le TournamentFactory qui va avec. Le tournoi fonctionne de la manière suivante : -1 pour le perdant, 0 si match nul, +1 pour le gagnant. Chaque joueur doit affrontrer tous les autres joueurs une fois (et ne doit pas s'affronter lui-même).
Testez votre tournoi avec quelques joueurs et affichez le classement.
Ajoutez les joueurs d'autres élèves et lancez votre tournoi.