TP3
Dans ce TP3, on vous demande de finaliser votre implémentation :
- Finalisez votre implémentation du modèle et du contrôleur, si ce n’est pas déjà fait.
- Appliquez le patron de concéption Commande afin de générer des objets
Commandqui reflètent les choix de jeu valides à chaque point de décision. En plus des commandes déjà implémentées (Retirer une carte de la pile, Rejeter une carte, Révéler une carte non dévoilée), vous devrez implémenter :- Prendre une carte de la pile de défausse (dans le buffer)
- Remplacer une carte non dévoilée/dévoilée du joueur avec le buffer
- L'option d'éliminer une colonne ayant 3 cartes disponibles.
- Faites évoluer vos commandes pour supporter les opérations d’annulation (l’interface interprète
ucomme une demande d’annulation). Notez que l’annulation n’est pas permise si la commande précédente a révélé de nouvelles informations, p. ex. a dévoilé une carte. - Assurez-vous que le jeu soit entièrement jouable jusqu’à la fin. (Pas nécessaire d'implémenter plusieurs répetitions/séances,
roundindique le tour d'une séance.) - Respectez rigoureusement le motif MVC : il ne doit absolument y avoir aucune logique (p. ex. une fabrique de modèles) dans le composant Modèle.
- Prise en charge du choix dynamique de la taille du jeu (prise en charge du passage de différents
ModelPresetàController) :
controller.initializeModel(ModelPreset.XYZ, players);,XYZétant le préréglage souhaité.
Votre implémentation doit refléter fidèlement les règles du jeu. Prendre des raccourcis, p. ex. révéler une carte au hasard plutôt que de permettre un choix à l’utilisateur, ou dévier des séquences de commandes attendues entraînera une réduction sévère des points.
Le code est une condition préliminaire à la notation
Votre note est basée sur votre capacité à expliquer et raisonner avec votre code soumis lors de l’examen oral subséquent. Un code fonctionnel est une condition préliminaire pour passer l’examen oral : Bien que les fonctionnalités manquantes entraînent une réduction de points, aucun point n’est accordé uniquement pour la soumission du code.
Illustrations
Dans cette section, vous trouverez quelques illustrations du comportement attendu dans certaines situations.
Disponibilité de l’annulation
Une annulation est possible lorsque la commande exécutée précédemment n’a pas révélé d’information non dévoilée. Elle est offerte dans la console par une option u.
Round: 1
Deck (80): [??]
Discard ( 1): [ 4]
Cache: [--]
Max (18) Ryan (15) Maram (3) QUENTIN (18)
[??] [??] [12] [??] [??] [ 6] [??] [ 1] [??] [ 7] [??] [??]
[??] [ 6] [??] [??] [??] [ 9] [ 2] [??] [??] [??] [11] [??]
0: Take discarded card. 1: Take deck card.
Enter choice:
0
Le joueur a sélectionné 0, ce qui a placé une carte déjà dévoilée provenant de la poubelle dans le buffer. L’exécution de cette commande n’a révélé aucune nouvelle information. Elle peut être annulée (undo).
Round: 1
Deck (80): [??]
Discard ( 0): [--]
Cache: [ 4]
Max (18) Ryan (15) Maram (3) QUENTIN (18)
[??] [??] [12] [??] [??] [ 6] [??] [ 1] [??] [ 7] [??] [??]
[??] [ 6] [??] [??] [??] [ 9] [ 2] [??] [??] [??] [11] [??]
u: Undo 0: Replace (0/0) 1: Replace (1/0) 2: Replace (2/0)
3: Replace (0/1) 4: Replace (1/1) 5: Replace (2/1)
Enter choice:
u
Comme vous pouvez le voir, les actions suivantes incluaient u : annuler, parce que la commande précédente peut être annulée. Annuler la commande ramène le modèle à l’état précédent, c’est-à-dire que la carte du buffer est remise au sommet de la pile de défausse, permettant ainsi au joueur d’ajuster son action :
Round: 1
Deck (80): [??]
Discard ( 1): [ 4]
Cache: [--]
Max (18) Ryan (15) Maram (3) QUENTIN (18)
[??] [??] [12] [??] [??] [ 6] [??] [ 1] [??] [ 7] [??] [??]
[??] [ 6] [??] [??] [??] [ 9] [ 2] [??] [??] [??] [11] [??]
0: Take discarded card. 1: Take deck card.
Utilisez un historique de commandes.
Des annulations en cascade peuvent survenir et doivent être prises en charge — il ne suffit pas de ne conserver qu’une seule annulation. Vous disposez déjà de la bonne structure de données pour stocker un historique chronologique des commandes exécutées : une stack.
Indisponibilité de l’annulation
L’annulation est interdite lorsque la commande exécutée précédemment a révélé de nouvelles informations aux joueurs.
Illustration : Lorsqu’un joueur prend une carte du paquet, de nouvelles informations sont révélées (la valeur de la carte du dessus, maintenant placée dans le buffer). Il n’est pas permis d’annuler la commande
Revealcorrespondante : le joueur doit soit accepter et placer la carte du buffer, soit la rejeter.
Round: 1
Deck (80): [??]
Discard ( 1): [12]
Cache: [--]
Max (6) RYAN (18) Maram (15) Quentin (14)
[??] [ 6] [ 0] [??] [??] [ 9] [??] [??] [11] [??] [??] [??]
[??] [??] [??] [??] [??] [ 9] [ 4] [??] [??] [??] [ 7] [ 7]
0: Take discarded card. 1: Take deck card.
Enter choice:
1
1, ce qui a placé une carte auparavant non dévoilée provenant de la pile de cartes fraîches dans le buffer. L’exécution de cette commande a révélé de nouvelles informations. Elle ne peut pas être annulée.
Round: 1
Deck (79): [??]
Discard ( 1): [12]
Cache: [ 6]
Max (6) RYAN (18) Maram (15) Quentin (14)
[??] [ 6] [ 0] [??] [??] [ 9] [??] [??] [11] [??] [??] [??]
[??] [??] [??] [??] [??] [ 9] [ 4] [??] [??] [??] [ 7] [ 7]
0: Reject card 1: Replace (0/0) 2: Replace (1/0) 3: Replace (2/0)
4: Replace (0/1) 5: Replace (1/1) 6: Replace (2/1)
Enter choice:
u : undo, car la commande précédente ne peut pas être annulée.
Interfaces
Vous travaillerez avec les mêmes interfaces fournies précédemment. Aucune modification de votre pom.xml n’est requise ni autorisée (sauf pour des plugins optionnels pour la documentation du code, les tests ou le packaging, pour les courageux).
La documentation des interfaces reste disponible en ligne.
Déclaration de contribution
Incluez un fichier PDF contenant les informations et la déclaration suivantes :
Informations
Pour chaque membre de l’équipe :
- Le pourcentage du travail auquel il ou elle a contribué.
- 2 classes / méthodes pour lesquelles il ou elle se déclare expert désigné.
Déclaration
Incluez cette déclaration dans votre soumission, signez-la à la main, prenez une photo et ajoutez-la à votre soumission.
Nous déclarons par la présente n’avoir utilisé aucune intelligence artificielle générative pour produire le contenu de ce TP, et n’avoir copié aucun code provenant d’autres sources sans en indiquer la provenance dans les commentaires du programme.
Nous comprenons que l’inclusion de contenu généré par IA ou la copie de code étranger sans mention appropriée constitue une faute académique grave qui sera signalée à la commission universitaire du plagiat, ce qui pourrait mener à notre expulsion du programme d’études.
- Signature : ____
- Signature : ____
-
Signature : ____
-
Date : ____
Soumission
La soumission est due pour vendredi 05-12-2025 samedi 06-12-2025, 23h59 par courriel à schiedermeier.maximilian@uqam.ca.
- Sujet : TP3
- Contenu :
- Un seul fichier zip contenant : projet Maven
pom.xml- dossier
src
- Déclaration de contribution, signée.
- Un seul fichier zip contenant : projet Maven
Ne soumettez pas votre dossier
target.
Réductions de points
Bien que votre note soit basée sur votre capacité à expliquer votre code, vous pouvez perdre des points (c.-à-d. que la note maximale que vous pouvez obtenir est réduite) si certaines exigences sont ignorées par votre solution :
Réductions liées à l’implémentation
- Pas de Maven : -100 %, à éviter absolument.
- Commandes non entièrement implémentées : -100 %, à éviter absolument.
- Pas de déclaration de contribution : -100 %, à éviter absolument.
- Interfaces fournies modifiées et/ou non utilisées.
- Le code ne compile pas avec
mvn clean compile, version 24 : -100 %, à éviter absolument. - Le code plante à l’exécution avec
mvn exec:java, version 24 : -100 %, à éviter absolument. - Le jeu ne peut pas être joué / pas d’interaction avec le joueur : -100 %, à éviter absolument.
- Dépendances non JDK supplémentaires ajoutées / bibliothèques tierces utilisées (sauf interfaces fournies) : -100 %, à éviter absolument.
- Commandes incorporant de l’aléatoire / comportement implicite pour remplacer les choix du joueur : -30 %
- Machine d’état incorrecte, c.-à-d. séquence de commandes incohérente avec les règles du jeu : -30 %
- Annulation non implémentée, incomplète ou incorrecte : -30 %
- Logique encore dans le modèle : -20 %
- Implémentation trop compliquée : -5 % par méthode de plus de 25 lignes (les commentaires ne comptent pas)
Réductions liées à la soumission
- Soumission tardive : -30 % à partir de la date limite, puis -20 % pour chaque retard supplémentaire de 24 h.
- La soumission contient des fichiers inutiles/cachés ou des fichiers binaires (
.class) : -5 % par fichier inutile.
DIVERS
Questions
- Pour les questions relatives aux exigences du TP, veuillez utiliser le forum Mattermost.
- Ne partagez pas de code ni de parties de votre solution sur Mattermost.
Suggestions
Bien que cela ne soit pas une exigence stricte ni directement lié à des points bonus, il est toujours bon d’améliorer l’humeur du professeur avec quelques bonnes pratiques :
- Vérifiez votre soumission avant de l’envoyer :
- Envoyez-la d’abord à un membre de l’équipe. Laissez-le extraire le ZIP, compiler le code, etc., sur une autre machine.
- Si tout fonctionne, transférez ensuite le courriel au professeur.
- Formatez votre code : utilisez le formateur de code d’IntelliJ, afin que votre code soit plus lisible.
- Revisitez les laboratoires : certaines parties des solutions de ce TP ont été subtilement couvertes dans les laboratoires. Si vous pensez qu’une solution de labo peut être réutilisée, indiquez-le dans un commentaire dans votre code.
- Commentez votre code : utilisez Javadoc
/** ... */pour les méthodes, et des commentaires réguliers//en ligne.
Habituez-vous aux commentaires et conventions de nommage en anglais
Vous avez le droit de commenter en français, et la langue utilisée pour vos commentaires n’aura absolument aucun impact sur votre note.
Cependant, gardez à l’esprit que l’informatique est une discipline internationale et que, sur le long terme, vous devrez probablement commenter en anglais. Autant vous y habituer tôt.
Même chose pour les noms de variables et de méthodes : adoptez les noms en anglais, cela facilite énormément la collaboration à long terme.
J’ai déjà travaillé dans une équipe internationale où chaque stagiaire ajoutait des commentaires et des noms dans sa langue maternelle : anglais, allemand, français, espagnol, voire chinois. Sans surprise, cela a nui au projet.