# 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-🏆 | ✅🤝 | ✅ | ✅ | ✅🤝 | ✅🤝 | ✅🤝 | ✅🤝 | ✅🤝 | |