# Bataille javale TLDR; ![[Capture d’écran 2026-03-09 à 09.14.39 - Grande.jpeg|401x234]] -- Cette présentation explique en version simplifiée le projet de fin de module Java et Programmation Orientée Objet > [!danger] Énoncé complet > L'énoncé long est celui qui fait foi : > > https://bc.baldir.fr/Cours+-+POO+et+Java/Projet/La+bataille+javale --- ## Rendu - Dépôt github - M'ajouter en contributeur : `marc-bouvier` - Et/ou [[La bataille javale#Si vous choisissez le déploiement maven|déployé sur nexus.baldir.fr ]] - Dernier délai : **Samedi 14 Mars 2026 23h59** - Pénalité de retard : **-2pts** par jour de retard --- ### Note <split left="2" right="1" gap="2"> - 50% : fonctionnalités - fonctionnalités de base - 2 fonctionnalités additionnelles - 25% : interface graphique JavaFx - 25% : qualité de conception et ![[IMG_0724.jpg]] </split> --- ### Critères d'évaluation - Utiliser correctement les concepts de la POO - Architecture flexible et évolutive - Interface graphique dynamique - Il n'y a pas de solution unique : architectures différentes possibles --- ## Fonctionnement <split left="2" right="1" gap="2"> - Je suis votre collègue - Revues de code - Découpez astucieusement le travail ![[IMG_0963.webp|40]] </split> --- ### Choix techniques - JavaFx : au choix - [[7.1 - Introduction à JavaFx|Programmatiquement]] - [[7.3 - Canvas|Canvas]] - [[7.2 - FXML|FXML]] - [[7.4 - Fxgl|FXGL]] - Bibliothèques externes : me demander --- ### Qualité Vous serez évalué sur la **qualité de votre code** et la mise en place de bonnes pratiques vues lors de votre formation. -- - Des noms de variables, de fonctions et de classes claires - Utiliser la convention `camelCase` et `PascalCase` dans les cas appropriés - Des fonctions pas trop longues (au delà de 50 lignes ça commence à faire beaucoup) - Une indentation correcte - Un code correctement organisé - Mise en forme du code uniforme dans le projet (accolades, saut de ligne, conventions de codage) - Des commentaires si besoin -- > [!warning] > Des **petits écarts** peuvent être **tolérés**, cependant si aucun effort n’est réalisé ou si certaines pratiques ne sont pas mises en place, > > vous pourrez **perdre jusqu’à 5 points** sur votre note finale **même si votre projet fonctionne parfaitement**. > > ![[david-goodenough.webp|261x170]] --- ### Extensibilité Vous devrez **penser le système flexible** afin de pouvoir facilement ajouter - de **nouvelles actions possibles** - de **nouvelles règles** sans avoir à répéter trop de code. ![[conception-diagrammes.webp|261]] --- ## Fonctionnalités <split left="2" right="3" gap="2"> - Faites les fonctionnalités de base - Au moins 2 fonctionnalités additionnelles - Bonus si fonctionnalités difficiles - Bonus si plus de fonctionnalités > [!danger] ☢️ Ne soyez pas trop gourmand-es > ![[Étudiant-e qui a choisi de faire trop de fonctionnalités.webp|400x225]] > *Étudiant-e qui a choisi de faire trop de fonctionnalités* </split> --- ### Vaisseaux - Porte-avions (5 cases) - Cuirassé (4 cases) - Destroyer (3 cases) - Sous-marin (3 cases) - Patrouilleur (2 cases) ![[image-11.png|600]] --- ### Grille <split left="2" right="1" gap="2"> - Taille : `10x10` - Horizontalement : de `1` à `10` - Verticalement : de `A` à `J` ![[placement_correct.webp|433]] </split> --- ## Phase de placement **Grille océan** : les vaisseaux du joueur ![[placement_correct.webp|331x311]] - Horizontalement - Verticalement -- ### Placements incorrects - Les vaisseaux **ne peuvent pas** être placés en diagonale - Les vaisseaux **ne peuvent pas** se chevaucher - Les vaisseaux **ne doivent pas** dépasser la grille océan - On ne peut placer qu'**un vaisseau de chaque type** par joueur -- ### Fin de la phase de placement Quand les 2 joueurs ont placé tous leurs vaisseaux --- ## Phase de bataille Lors la bataille les joueurs jouent l'un après l'autre. -- ### "IA" de l'ordinateur - **Placement** - L'IA place les vaisseaux de façon aléatoire en respectant les règles de placement - **Phase de bataille** - L’IA choisit ses attaques aléatoirement en respectant les règles de tir - Tirer à un endroit où il n'a pas déjà tiré --- ### Tour de bataille Chaque joueur, l'un après l'autre - Viser une case - Tirer Fin de tour de bataille : quand les 2 joueurs ont joué -- ### Tour de bataille - exemple Tour 1 : - Joueur 1 tire en A-1 - Joueur 2 tire en E-8 Tour 2 : - Joueur 1 tire en A-2 - Joueur 2 tire en D-4 --- ### Grille radar Les tirs que le joueur a envoyés à l'adversaire ![[grille_radar_rate.webp]] - En rouge : quand touché - En blanc : quand à l'eau --- ### Tir raté (à l'eau) <split left="2" right="1" gap="2"> - Position annoncée **n’est pas occupée par un vaisseau** sur la grille océan de l’adversaire, **le tir est raté**. - **L'attaquant** insère **une torpille blanche** dans le trou correspondant sur **sa grille-radar**. ![[grille_radar_rate.webp]] </split> -- ### Tir raté - exemple Exemple : C’est au tour de J1. - J1 annonce : « F-4 ». - J2 réponds : « Manqué. » - J1 place une torpille verte à la position F-4 de sa grille-radar. ![[grille_radar_rate.webp]] --- ### Tir réussi (touché) <split left="2" right="1" gap="2"> - Position annoncée occupée par un vaisseau sur la grille océan de l’adversaire, le tir est réussi : **ce vaisseau est touché**. - L'attaquant insèrant **une torpille rouge** dans le trou correspondant sur **sa grille-radar**. - L’adversaire insère **une torpille rouge** dans le trou correspondant de son vaisseau touché sur **sa grille océan**. ![[grille_ocean_touche.webp]] </split> -- ### Tir réussi (touché) - exemple Exemple: C'est au tour de J1. - J1 Annonce : "D-4" - J2 répond : " Touché." - J1 place la torpille rouge à la position D-4 de sa grille radar - J2 place une torpille rouge sur D-4 de sa grille océanique. ![[grille_ocean_touche.webp]] --- ### Couler Dès que **tous les trous d’un vaisseau** sont occupés par une torpille rouge, **ce vaisseau est coulé**. L’adversaire **révèle la nature du vaisseau coulé** (destroyer, patrouilleur, etc.). -- ### Couler - exemple Exemple: C'est au tour de J1. J2 a un sous-marin (de taille 3) déjà touché en D-3 et D-4. Il reste donc à le toucher en D-5 pour le couler. - J1 Annonce : "D-5" - J2 répond : " Touché-coulé : sous-marin" - J1 place la torpille rouge à la position D-5 de sa grille radar - J2 place une torpille rouge sur D-5 de sa grille océan. --- ## Fin de partie La partie est terminée lorsqu'un joueur coule le dernier vaisseau de la flotte adverse --- ## Interface graphique ![[interface-graphique.webp|320x270]] -- ### Astuce > [!tip] Concevez sur papier ou outils de design > N'hésitez pas à dessiner et concevoir vos interfaces en dehors de l'écosystème java pour vous assurez qu'elles sont cohérentes. > > Je vous invite à consulter votre collègue enseignant pour feed-back de votre conception d'interface. --- ## Ecrans et menus - Un menu d’accueil et crédits - Une interface de jeu permettant de faire un combat contre l'ordinateur (CPU) - la phase de placement - la phase de bataille - résultat de la partie quand elle est terminée -- ### Menu d'accueil Le menu d’accueil est **un écran de présentation** avec **un bouton** permettant de **lancer une nouvelle partie**. Vous devez aussi afficher dans un texte ou dans un écran à part **les crédits** du projet avec le **nom et prénom** des membres du projet -- ### Interface de placement Avant de démarrer un combat, vous devez afficher **une interface pour placer les 5 vaisseaux** en respectant les règles de placement. L’interface doit permettre : - d'afficher la grille océan (mes vaisseaux) - de placer ses vaisseaux - d'empêcher les placements incorrects - de voir ses vaisseaux placés sur la grille océan - de démarrer le combat si la flotte est au complet -- ### Interface de combat Vous affrontez un autre joueur au tour par tour. L’écran doit afficher les éléments suivants: - la grille océan (mes vaisseaux) - la grille radar (mes tirs) - Le numéro du tour courant - Un historique du combat Actions possibles - Viser - Tirer -- ### Historique de combat L’historique des combats doit afficher les choses suivantes : - Le numéro du tour courant - Quand un vaisseau adverse est coulé et son nom L’affichage du combat doit se mettre à jour à la fin de chaque action. --- ## Écran de fin de partie Quand le dernier vaisseau d'un des joueurs est coulé. - afficher le joueur victorieux Actions - Retourner au menu principal --- ## Fonctionnalités additionnelles Il vous est demandé d’implémenter **au moins 2 fonctionnalités**. Si vous implémentez une **3ème fonctionnalité** et/ou des **fonctionnalités plus difficiles**, des **points supplémentaires** vous seront accordés -- > [!warning] Avant d'envisager les fonctionnalités additionnelles > Assurez-vous que vous avez implémenté le moteur de jeu et l'interface graphique du jeu de base. > > ![[Étudiant-e qui a choisi de faire trop de fonctionnalités.webp|400x225]] > *Étudiant-e qui a choisi de faire trop de fonctionnalités* -- > [!tip] Cela dit... > Il peut être utile de lire en quoi consistent certaines fonctionnalités additionnelles car cela peut vous permettre d'identifier des similiarités et des points d'extension sur le jeu de base. -- ### Liste des fonctionnalités - [Multijoueur via base de données - 🏆🏆](https://bc.baldir.fr/Cours+-+POO+et+Java/Projet/La+bataille+javale#Multijoueur%20via%20base%20de%20donn%C3%A9es%20-%20%F0%9F%8F%86%F0%9F%8F%86) - [Interface supplémentaire en ligne de commandes (TUI) - 🏆🏆](https://bc.baldir.fr/Cours+-+POO+et+Java/Projet/La+bataille+javale#Interface%20suppl%C3%A9mentaire%20en%20ligne%20de%20commandes%20(TUI)%20-%20%F0%9F%8F%86%F0%9F%8F%86) - [Mode salve](https://bc.baldir.fr/Cours+-+POO+et+Java/Projet/La+bataille+javale#Mode%20salve) - [Ravitaillement - 🏆](https://bc.baldir.fr/Cours+-+POO+et+Java/Projet/La+bataille+javale#Ravitaillement%20-%20%F0%9F%8F%86) - [Taille de carte personnalisable](https://bc.baldir.fr/Cours+-+POO+et+Java/Projet/La+bataille+javale#Ravitaillement%20-%20%F0%9F%8F%86) - [Système de récompenses (achievements)](https://bc.baldir.fr/Cours+-+POO+et+Java/Projet/La+bataille+javale#Syst%C3%A8me%20de%20r%C3%A9compenses%20(achievements)) - [Événements aléatoires - 🏆](https://bc.baldir.fr/Cours+-+POO+et+Java/Projet/La+bataille+javale#%C3%89v%C3%A9nements%20al%C3%A9atoires%20-%20%F0%9F%8F%86) - [Musique et effets sonores](https://bc.baldir.fr/Cours+-+POO+et+Java/Projet/La+bataille+javale#Musique%20et%20effets%20sonores) - [Personnalisation des préférences - 🏆](https://bc.baldir.fr/Cours+-+POO+et+Java/Projet/La+bataille+javale#Personnalisation%20des%20pr%C3%A9f%C3%A9rences%20-%20%F0%9F%8F%86) -- ### Légende - 🏆 : **Fonctionnalités difficiles**, non triviales. Peut vous faire gagner un **bonus de points**. - 🏆🏆 : **Fonctionnalités très difficiles**, nécessitent beaucoup d'efforts et de travail. Peut vous faire gagner un **bonus de points conséquent**. - ‼️ A ne considérer si vous avez réussi à terminer les mécaniques de jeu de base et l'interface graphique rapidement. -- ### Matrice de compatibilité **Légende** : - ✅ **Compatibles** : les modes peuvent être **utilisés en même temps** - ❌ **Non compatibles** : les modes ne peuvent pas être **utilisés en même temps** - 🤝 **Complémentaires** : les modes débloquent des **fonctionnalités supplémentaires** ``` Ex. Evénements aléatoires + Récompenses : Evénement "Une journée ensoleillée" déclenche une récompense Ex. Multijoueur via base de données + Récompenses : possibilité de stocker les récompenses en base de données ``` -- <style> #matrice+table{ border-color: black; border-collapse: collapse; border-width: thin; border-style: solid; font-size:x-large; th, td{ border-color: black; border-collapse: collapse; border-width: thin; border-style: solid; font-size:x-large; } } </style> ### Matrice | | Multi-joueur 🏆🏆 | TUI-🏆🏆 | Salve | Ravit-aille-ment 🏆 | Taille de carte custom | Récom-penses | Événe-ments aléa-toires 🏆 | Musi-que et sons | Préfé-rences 🏆 | | ---------------------- | ----------------- | -------- | ----- | ------------------- | ---------------------- | ------------ | -------------------------- | ---------------- | --------------- | | Multijoueur-🏆🏆 | | | | | | | | | | | TUI-🏆🏆 | ✅ | | | | | | | | | | Salve | ✅ | ✅ | | | | | | | | | Ravitaillement-🏆 | ✅ | ✅ | ❌ | | | | | | | | Taille de carte custom | ✅ | ✅ | ✅ | ✅ | | | | | | | Récompenses | ✅🤝 | ✅🤝 | ✅🤝 | ✅ | ✅ | | | | | | Événements-🏆 | ✅ | ✅ | ✅🤝 | ✅ | ✅ | ✅🤝 | | | | | Musique et sons | ✅ | ❌ | ✅ | ✅🤝 | ✅ | ✅🤝 | ✅🤝 | | | | Préférences-🏆 | ✅🤝 | ✅ | ✅ | ✅🤝 | ✅🤝 | ✅🤝 | ✅🤝 | ✅🤝 | |