Modifier

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 :

    • le premier retourne toujours SCISSOR
    • le second retourne toujours ROCK
    • le troisième retourne toujours PAPER
  • 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.