Vous êtes sur la page 1sur 63

Mini-projet Bataille navale en Javascool

Éléments de solution - une proposition

Lycée Marcel Rudloff - Strasbourg

Octobre 2017
Objectifs
Une bataille navale en console ?

| | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | |x| | | | | | | | | |
|x| | | | | | | | | | | |x| | | | | | | | |
| |x| | | | | | | | | | |O|x| | | | | | | |
| |O|x| | | | | | | | | |O| | |x| | | | | |
| |O| | | | | | | | | | |O| | |o|o| | | | |
| |O| | |o| | | | | | | |O| | |x| | | | | |
| |O| | |x| | | | | |
| | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | Vous avez joue en F7
Vous avez joue en E6 Torpilleur coule !
Dans l’eau ! Bravo Capitaine Marchant !
Objectifs
Une bataille navale en console ?

| | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | |
|x| | | | | | | | | | | | | | | | | | | | |
| |x| | | | | | | | | |x| | | | | | | | | |
| |O|x| | | | | | | | | |x| | | | | | | | |
| |O| | | | | | | | | | |O|x| | | | | | | |
| |O| | |o| | | | | | | |O| | |x| | | | | |
| |O| | |x| | | | | | | |O| | |O|O| | | | |
| | | | | | | | | | | | |O| | |x| | | | | |
| | | | | | | | | | | | | | | | | | | | | |
Vous avez joue en E6 | | | | | | | | | | |
Dans l’eau !
Bon conseils généraux...
pour mener un projet informatique

Bien se mettre d’accord pour les variables


• Comment les différentes parties interagissent
• Des variables globales ?
• Souvent plus facile,
• déconseillé plus tard mais pas en terminale !

Décomposer en différentes tâches


• Diviser pour mieux régner !
• Une fonction par tâche :
• plus facile à coder,
• plus facile de répartir le travail.
Bon conseils généraux...
pour mener un projet informatique

Bien se mettre d’accord pour les variables


• Comment les différentes parties interagissent
• Des variables globales ?
• Souvent plus facile,
• déconseillé plus tard mais pas en terminale !

Décomposer en différentes tâches


• Diviser pour mieux régner !
• Une fonction par tâche :
• plus facile à coder,
• plus facile de répartir le travail.
Bon conseils généraux...
pour mener un projet informatique

Bien se mettre d’accord pour les variables


• Comment les différentes parties interagissent
• Des variables globales ?
• Souvent plus facile,
• déconseillé plus tard mais pas en terminale !

Décomposer en différentes tâches


• Diviser pour mieux régner !
• Une fonction par tâche :
• plus facile à coder,
• plus facile de répartir le travail.
Bon conseils généraux...
pour mener un projet informatique

Bien se mettre d’accord pour les variables


• Comment les différentes parties interagissent
• Des variables globales ?
• Souvent plus facile,
• déconseillé plus tard mais pas en terminale !

Décomposer en différentes tâches


• Diviser pour mieux régner !
• Une fonction par tâche :
• plus facile à coder,
• plus facile de répartir le travail.
Bon conseils généraux...
pour mener un projet informatique

Bien se mettre d’accord pour les variables


• Comment les différentes parties interagissent
• Des variables globales ?
• Souvent plus facile,
• déconseillé plus tard mais pas en terminale !

Décomposer en différentes tâches


• Diviser pour mieux régner !
• Une fonction par tâche :
• plus facile à coder,
• plus facile de répartir le travail.
Bon conseils généraux...
pour mener un projet informatique

Bien se mettre d’accord pour les variables


• Comment les différentes parties interagissent
• Des variables globales ?
• Souvent plus facile,
• déconseillé plus tard mais pas en terminale !

Décomposer en différentes tâches


• Diviser pour mieux régner !
• Une fonction par tâche :
• plus facile à coder,
• plus facile de répartir le travail.
Bon conseils généraux...
pour mener un projet informatique

Bien se mettre d’accord pour les variables


• Comment les différentes parties interagissent
• Des variables globales ?
• Souvent plus facile,
• déconseillé plus tard mais pas en terminale !

Décomposer en différentes tâches


• Diviser pour mieux régner !
• Une fonction par tâche :
• plus facile à coder,
• plus facile de répartir le travail.
Bon conseils généraux...
pour mener un projet informatique

Bien se mettre d’accord pour les variables


• Comment les différentes parties interagissent
• Des variables globales ?
• Souvent plus facile,
• déconseillé plus tard mais pas en terminale !

Décomposer en différentes tâches


• Diviser pour mieux régner !
• Une fonction par tâche :
• plus facile à coder,
• plus facile de répartir le travail.
Bon conseils généraux...
pour mener un projet informatique

Bien se mettre d’accord pour les variables


• Comment les différentes parties interagissent
• Des variables globales ?
• Souvent plus facile,
• déconseillé plus tard mais pas en terminale !

Décomposer en différentes tâches


• Diviser pour mieux régner !
• Une fonction par tâche :
• plus facile à coder,
• plus facile de répartir le travail.
Bon conseils généraux...
pour mener un projet informatique

Bien se mettre d’accord pour les variables


• Comment les différentes parties interagissent
• Des variables globales ?
• Souvent plus facile,
• déconseillé plus tard mais pas en terminale !

Décomposer en différentes tâches


• Diviser pour mieux régner !
• Une fonction par tâche :
• plus facile à coder,
• plus facile de répartir le travail.
Choix des variables globales
Ici il été suggéré ...

On proposait ici ceci initialement :


2 void main () {
int cases [][] = {
4 {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

6 , {
0, 0, 0, 2, 2, 0, 0, 0, 0, 0} • 2 représenterait
8 , {
0, 1, 0, 0, 0, 0, 0, 0, 0, 0} un torpilleur,
10 , {

12 , {
0, 0, 0, 0, 3, 0, 4, 4, 4, 4}
• 3 et 6 des
14 , {
0, 0, 0, 0, 3, 0, 0, 0, 0, 0}
sous-marins,
0, 0, 0, 0, 3, 0, 0, 0, 0, 0}
16 , { • 4 un cuirassé,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
18 , {
0, 0, 0, 0, 0, 0, 0, 0, 0, 1} • 5 le porte-avions.
20 , {
0, 5, 5, 5, 5, 5, 0, 0, 0, 0} • 1 un coup dans
22 , {

24 ,}
0, 0, 0, 0, 0, 6, 6, 6, 0, 0} l’eau
;
• 0 ... rien a priori
Choix des variables globales
Ici il été suggéré ...

On va plutôt choisir :
et « remplir » le tableau :
2 /* ************** ** ** ** *
• 2 torpilleur,
* VARIABLES GLOBALES * • 3 et 6 sous-marins,
4 ************* ** ** ** ** */
• 4 cuirassé,
6 int taille =10;
int cases [][] = new int [ taille ][ taille ]; • 5 porte-avions.
• 0 l’eau

• On rajoutera 10 si le coup est joué


• On mettra à 20 si le navire est coulé
• L’affichage de la cases[y][x] ne se fera que si le tableau
contient à cet endroit un nombre supérieur ou égal à 10.
Choix des variables globales
Ici il été suggéré ...

On va plutôt choisir :
et « remplir » le tableau :
2 /* ************** ** ** ** *
• 2 torpilleur,
* VARIABLES GLOBALES * • 3 et 6 sous-marins,
4 ************* ** ** ** ** */
• 4 cuirassé,
6 int taille =10;
int cases [][] = new int [ taille ][ taille ]; • 5 porte-avions.
• 0 l’eau

• On rajoutera 10 si le coup est joué


• On mettra à 20 si le navire est coulé
• L’affichage de la cases[y][x] ne se fera que si le tableau
contient à cet endroit un nombre supérieur ou égal à 10.
Choix des variables globales
Ici il été suggéré ...

On va plutôt choisir :
et « remplir » le tableau :
2 /* ************** ** ** ** *
• 2 torpilleur,
* VARIABLES GLOBALES * • 3 et 6 sous-marins,
4 ************* ** ** ** ** */
• 4 cuirassé,
6 int taille =10;
int cases [][] = new int [ taille ][ taille ]; • 5 porte-avions.
• 0 l’eau

• On rajoutera 10 si le coup est joué


• On mettra à 20 si le navire est coulé
• L’affichage de la cases[y][x] ne se fera que si le tableau
contient à cet endroit un nombre supérieur ou égal à 10.
Choix des variables globales
Ici il été suggéré ...

On va plutôt choisir :
et « remplir » le tableau :
2 /* ************** ** ** ** *
• 2 torpilleur,
* VARIABLES GLOBALES * • 3 et 6 sous-marins,
4 ************* ** ** ** ** */
• 4 cuirassé,
6 int taille =10;
int cases [][] = new int [ taille ][ taille ]; • 5 porte-avions.
• 0 l’eau

• On rajoutera 10 si le coup est joué


• On mettra à 20 si le navire est coulé
• L’affichage de la cases[y][x] ne se fera que si le tableau
contient à cet endroit un nombre supérieur ou égal à 10.
Décomposer en fonctions et en tâches
Diviser pour mieux régner !
void main () {
240 initialisationG ri ll e () ; // mise a zero
remplissageGri ll e () ; // placement des bateaux
242 affichage () ; // la grille

244 String nomJoueur = readString ( " Comment vous appelez - vous , Moussaillon ? ") ;
int nombreCoups = joue ( nomJoueur ) ; // la partie proprement dite
246 ecranFin ( nombreCoups , nomJoueur ) ; // comme son nom l’indique
}

void affichage () {

38 void initialisation Gr il le () {

48 void remplissageGril le () {

int joue ( String nom ) {

void ecranFin ( int n , String nom ) { // comme son nom l’indique


Décomposer en fonctions et en tâches
Diviser pour mieux régner !
void main () {
240 initialisationG ri ll e () ; // mise a zero
remplissageGri ll e () ; // placement des bateaux
242 affichage () ; // la grille

244 String nomJoueur = readString ( " Comment vous appelez - vous , Moussaillon ? ") ;
int nombreCoups = joue ( nomJoueur ) ; // la partie proprement dite
246 ecranFin ( nombreCoups , nomJoueur ) ; // comme son nom l’indique
}

void affichage () {

38 void initialisation Gr il le () {

48 void remplissageGril le () {

int joue ( String nom ) {

void ecranFin ( int n , String nom ) { // comme son nom l’indique


Décomposer en fonctions et en tâches
Diviser pour mieux régner !
void main () {
240 initialisationG ri ll e () ; // mise a zero
remplissageGri ll e () ; // placement des bateaux
242 affichage () ; // la grille

244 String nomJoueur = readString ( " Comment vous appelez - vous , Moussaillon ? ") ;
int nombreCoups = joue ( nomJoueur ) ; // la partie proprement dite
246 ecranFin ( nombreCoups , nomJoueur ) ; // comme son nom l’indique
}

void affichage () {

38 void initialisation Gr il le () {

48 void remplissageGril le () {

int joue ( String nom ) {

void ecranFin ( int n , String nom ) { // comme son nom l’indique


Décomposer en fonctions et en tâches
Diviser pour mieux régner !
void main () {
240 initialisationG ri ll e () ; // mise a zero
remplissageGri ll e () ; // placement des bateaux
242 affichage () ; // la grille

244 String nomJoueur = readString ( " Comment vous appelez - vous , Moussaillon ? ") ;
int nombreCoups = joue ( nomJoueur ) ; // la partie proprement dite
246 ecranFin ( nombreCoups , nomJoueur ) ; // comme son nom l’indique
}

void affichage () {

38 void initialisation Gr il le () {

48 void remplissageGril le () {

int joue ( String nom ) {

void ecranFin ( int n , String nom ) { // comme son nom l’indique


Décomposer en fonctions et en tâches
Diviser pour mieux régner !
void main () {
240 initialisationG ri ll e () ; // mise a zero
remplissageGri ll e () ; // placement des bateaux
242 affichage () ; // la grille

244 String nomJoueur = readString ( " Comment vous appelez - vous , Moussaillon ? ") ;
int nombreCoups = joue ( nomJoueur ) ; // la partie proprement dite
246 ecranFin ( nombreCoups , nomJoueur ) ; // comme son nom l’indique
}

void affichage () {

38 void initialisation Gr il le () {

48 void remplissageGril le () {

int joue ( String nom ) {

void ecranFin ( int n , String nom ) { // comme son nom l’indique


Décomposer en fonctions et en tâches
Diviser pour mieux régner !
void main () {
240 initialisationG ri ll e () ; // mise a zero
remplissageGri ll e () ; // placement des bateaux
242 affichage () ; // la grille

244 String nomJoueur = readString ( " Comment vous appelez - vous , Moussaillon ? ") ;
int nombreCoups = joue ( nomJoueur ) ; // la partie proprement dite
246 ecranFin ( nombreCoups , nomJoueur ) ; // comme son nom l’indique
}

void affichage () {

38 void initialisation Gr il le () {

48 void remplissageGril le () {

int joue ( String nom ) {

void ecranFin ( int n , String nom ) { // comme son nom l’indique


Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Soyons plus clairs
Organisation du programme - répartition du travail

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Affichage
Grâce à une structure switch ... case

/* ************
10 * FONCTIONS *
************ */
12
// Affichage de la grille du joueur avec ses coups traites
14
void affichage () {
16 clear () ; //Nettoie la console
for ( int y =0; y < taille ; y ++) { // On parcourt les ordonnees ...
18 for ( int x =0; x < taille ; x ++) { // Et les abscisses
print ( " | " );
20 switch ( cases [y ][ x ]) {
case 10 : print ( " x ") ; // Dans l’eau
22 break ;
case 12 : case 13 : case 14 : case 15 : case 16 : print ( " o ") ; //
Touche
24 break ;
case 20 : print ( " O ") ; // Coule
26 break ;
default : print ( " ") ; //Pas encore joue
28 break ;
}
30 }
print ( " | ") ; //derniere barre
32 println () ; // et retour a la ligne
}
34 }
Initialisation
Un des deux rôles annoncés pour ce mini-projet
36 // Met des zeros partout !

38 void initialisation Gr il le () {
for ( int y =0; y < taille ; y ++) {
40 for ( int x =0; x < taille ; x ++) {
cases [ y ][ x ] =0;
42 }
}
44 }

46 // On va remplir les bateaux

48 void remplissageGril le () {

50 //On applique ce code pour les bateaux de longueurs 2 a 5 et 6 qui sera ramene a 3
for ( int b =2; b <=6; b ++) {
52
//on ramene a la bonne longueur b contient toujours le chiffre 6
54 int longueur = b;
if ( longueur ==6) longueur =3;
56
//Comme si le placement ne marchait pas : il faut rentrer dans la boucle
58 boolean placeOK = false ;

60 //On continue tant que ce n’est pas place


while ( ! placeOK ) {
62
//tirage au sort de la case de debut
64 int x = random (0 , 10) ;
int y = random (0 , 10) ;
Initialisation
Suite de la fonction void remplissageGrille() boucle while (!placeOK)
//tirage au sort de l’orientation : 0 horizontal et 1 vertical
68 int orientation = random (0 , 2) ;

70
/* Cette variable cumul doit rester a zero pour qu ’ on puisse placer le
bateau
72 * En effet , ceci correspondrait a un emplacement libre
*/
74 int cumul =0;

76 //Reste-t-on dans la grille ?


if ((( orientation ==0) && ( y + longueur >= taille ) ) || (( orientation
==1) && ( x + longueur >= taille ) ) ) {
78 cumul =42; // si on sort de la grille
//donc on sortira de la boucle sans encombre
80 }

82 //On parcourt l’emplacement du bateau


if ( cumul ==0) {
84 if ( orientation ==0) { //horizontal
for ( int i =0; i < longueur ; i ++) { //tout le bateau de longueur
longueur
86 cumul += cases [y + i ][ x ];
}
88 } else { //vertical
for ( int i =0; i < longueur ; i ++) { //tout le bateau de longueur
longueur
90 cumul += cases [y ][ x + i ];
}
92 }
}
Initialisation
Suite de la fonction void remplissageGrille() boucle while (!placeOK)
//Si l’emplacement est libre, on place
96 if ( cumul ==0) {
if ( orientation ==0) {
98 //horizontal
for ( int i =0; i < longueur ; i ++) {
100 //tout le bateau de longueur longueur
cases [ y + i ][ x ] = b;
102 //le code du bateau
}
104 } else {
//vertical
106 for ( int i =0; i < longueur ; i ++) {
//tout le bateau de longueur longueur
108 cases [ y ][ x + i ] = b;
}
110 }

112 //C’est bon pour ce bateau


placeOK = true ;
114
/* Notez bien qu ’ on aurait pu traiter horizontal et vertical d ’un coup
116 * avec un cases [ y + (1 - i ) * orientation ][ x + i * orientation ] = b ;
*/
118 }
}
120 }
}

Ouf ! Les bateaux sont placés !


Initialisation
Un exemple pour mieux comprendre !
On rentre pour 2 en x=4 y=4
horizontal -> 0
On rentre pour 3 en x=4 y=6
horizontal -> 0
On rentre pour 4 en x=8 y=4
vertical -> 42 |0|0|0|0|0|0|0|0|0|0|
On rentre pour 4 en x=5 y=0 |0|0|0|0|0|0|0|0|0|0|
vertical -> 0
On rentre pour 5 en x=5 y=8 |0|0|0|0|6|6|6|0|0|0|
horizontal -> 42 |0|0|0|0|0|0|0|0|0|0|
On rentre pour 5 en x=5 y=0
horizontal -> 4 |0|0|0|0|2|2|3|3|3|0|
On rentre pour 5 en x=3 y=8 |4|0|0|0|0|0|0|0|0|0|
vertical -> 3
On rentre pour 5 en x=7 y=3 |4|0|0|0|0|0|0|0|0|0|
horizontal -> 0
On rentre pour 6 en x=4 y=9
|4|0|0|5|5|5|5|5|0|0|
horizontal -> 42 |4|0|0|0|0|0|0|0|0|0|
On rentre pour 6 en x=9 y=2
vertical -> 42
|0|0|0|0|0|0|0|0|0|0|
On rentre pour 6 en x=3 y=6
vertical -> 3
On rentre pour 6 en x=2 y=4
horizontal -> 0
La partie commence
Revenons à notre main()

void main () {
240 initialisationG ri ll e () ; // mise a zero
remplissageGri ll e () ; // placement des bateaux
242 affichage () ; // la grille

244 String nomJoueur = readString ( " Comment vous appelez - vous , Moussaillon ? ") ;
int nombreCoups = joue ( nomJoueur ) ; // la partie proprement dite
246 ecranFin ( nombreCoups , nomJoueur ) ; // comme son nom l’indique
}

void ecranFin ( int n , String nom ) { // comme son nom l’indique


234 println ( " Vous à a tes le roi des mers , " + nom + " ! " );
println ( " Vous avez terrasse un ordinateur sans defense en " + n + " coups ! ")
;
236 // ON pourrait rajouter du ASCII art
}
Pour y voir plus clair ...
Retour à l’organisation du programme

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
La partie commence
On joue jusqu’à ... ?

int joue ( String nom ) {


212 int compteurCoups =0 , compteurTouches =0 , coup , ligne , colonne ;
while ( compteurTouches < (2 +3 +3 +4 +5) ) { // quand on a touche 17 fois, c’est
fini ;-)
214 //On joue
coup = saisieBlindeeCa se ( nom ) ; // 42 pour E3 par exemple, et 99 pour J10
216 //Recuperation des coordonnees et comptage du coup
colonne = coup %10; // le chiffre des unites
218 ligne = ( coup - colonne ) /10; // le chiffre des dizaines
compteurCoups ++; // On incremente le nombre de coups pour l’affichage final
220 //println("ligne " + ligne+" et colonne " + colonne); pour le debuggage

222 // Ici la fonction joueEmplacement va Ãa tre appelee et si c’est touche renvoie plus que zero

224 if ( joueEmplacement ( ligne , colonne , nom ) >0) compteurTouches +=1;

226 // Une petite pause pour lire avant d’afficher la grille a jour
sleep (1500) ;
228 affichage () ;
}
230 return compteurCoups ; // le nombre de coups pour l’affichage final
}
La fonction joueEmplacement (et remplacer)
Où on regarde si ce qui est joué est dans l’eau ou pas !
182 void remplacer ( int n ) { // Si c’est coule on met le bateau a 20
for ( int y =0; y < taille ; y ++) {
184 for ( int x =0; x < taille ; x ++) {
if ( cases [ y ][ x ] == n ) cases [ y ][ x ] =20;
186 }
}
188 }

190 int joueEmplacement ( int x , int y , String nom ) { // la saisie blindee a ete effectuee
int b =0;
192 if ( cases [ y ][ x ] >=10) { // Au dessus-de dix : case deja jouee
println ( " Coup deja joue ! Mal vu , " + nom ) ;
194 } else {
if ( cases [ y ][ x ] ==0) {
196 println ( " Dans l ’ eau ! ") ;
cases [ y ][ x ] +=10; // +10 quand c’est joue
198 } else {
b = cases [ y ][ x ];
200 cases [ y ][ x ] +=10;
if ( rechercheBateau ( b) ==0) { // coule ? ...
202 println ( typeBateau ( b ) + " coule ! Bravo " + nom + " ! " );
remplacer (b +10) ; // pour changer le bateau en coule
204 }
else println ( " Touche ! Bravo " + nom + " !" ) ; // juste touche
206 }
}
208 return b ; // Si c’est dans l’eau, on renvoie zero
}
Les fonctions rechercheBateau et typeBateau
Deux petites fonctions sans prétention, mais on « divise pour mieux régner » !

int rechercheBateau ( int b ) { // pour voir si le bateau est coule : encore des b ?
158 int compteur =0;
for ( int y =0; y < taille ; y ++) {
160 for ( int x =0; x < taille ; x ++) {
if ( cases [ y ][ x ] == b ) compteur ++;
162 }
}
164 return compteur ; // si on repond zero c’est coule
}
166
String typeBateau ( int b ) { // Assez clair
168 String reponse = " " ;
switch (b ) {
170 case 2 : reponse = " Torpilleur " ;
break ;
172 case 4 : reponse = " Croiseur ";
break ;
174 case 5 : reponse = " Porte - Avions ";
break ;
176 default : reponse = " Sous - Marin " ;
break ;
178 }
return reponse ;
180 }
La (dernière, ouf !) fonction saisieBlindee
D’abord un « prototypage » pour être bien clair...

/* Cette fonction saisieBlindeeCa se accepte le nom du joueur comme argument


124 * Le joueur saisit un chiffre et une lettre comme D2 J4 ou A9
* mais peut aussi saisir C10
126 * On teste donc si la chaine saisie avec readString fait deux ou trois lettres
* Et si ces lettres respectent les codes
128 * Le code ASCII d ’un A fait 65 , donc en enlevant 65 on a une lettre entre 0 et
9
* Le code ASCII d ’un 0 fait 49 , donc en enlevant 49 on recupere le chiffre
130 *
* Ensuite cette fonction transmet ligne *10 + colonne , donc 42 pour E3
132 */
La (dernière, ouf !) fonction saisieBlindee
Enfin le corps de la fonction !

int saisieBlindeeC ase ( String nom ) {


136 String saisie = " " ;
int colonne , ligne , reponse = -42;
138 while ( reponse <0) {
saisie = readString ( " Ou voulez - vous jouer " + nom + " ? A1 a J10 !! " );
140 if ( saisie . length () ==2) { // deux caracteres
colonne = saisie . charAt (1) -49;
142 ligne = saisie . charAt (0) -65;
if ( colonne >=0 && colonne <10 && ligne >=0 && ligne <10) {
144 reponse = ligne *10 + colonne ;
}
146 } else if ( saisie . length () ==3 && saisie . charAt (1) == ’1 ’ && saisie . charAt
(2) == ’0 ’) {
ligne = saisie . charAt (0) -65; // trois caracteres finissant par 10
148 if ( ligne >=0 && ligne <10) {
reponse = ligne *10 +9;
150 }
} // Si rien n’est valide, reponse fait toujours 0 et on entre a nouveau dans la boucle
152 }
println ( " Vous avez joue en " + saisie ) ;
154 return reponse ;
}
Tout compris ? ? ?
Retour à l’organisation du programme

main 2 initialiseGrille

3
11 remplissageGrille
ecranFin

affichage

joue 7 typeBateau
5

9
saisieBlindee
6

joueEmplacement
10

8
rechercheBateau remplacer
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Jouer vraiment contre l’ordinateur ?


• Il faut une deuxième grille int cases2 [][]
• Un « tour de jeu » pour alterner.
• Pas si difficile, mais à réorganiser

Jouer à deux en réseau ?


• Plus dur, notions d’IP, de client-serveur
• Créer des threads...
• Pour utilisateurs très avertis !
• Dur en JavaScool !
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Jouer vraiment contre l’ordinateur ?


• Il faut une deuxième grille int cases2 [][]
• Un « tour de jeu » pour alterner.
• Pas si difficile, mais à réorganiser

Jouer à deux en réseau ?


• Plus dur, notions d’IP, de client-serveur
• Créer des threads...
• Pour utilisateurs très avertis !
• Dur en JavaScool !
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Jouer vraiment contre l’ordinateur ?


• Il faut une deuxième grille int cases2 [][]
• Un « tour de jeu » pour alterner.
• Pas si difficile, mais à réorganiser

Jouer à deux en réseau ?


• Plus dur, notions d’IP, de client-serveur
• Créer des threads...
• Pour utilisateurs très avertis !
• Dur en JavaScool !
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Jouer vraiment contre l’ordinateur ?


• Il faut une deuxième grille int cases2 [][]
• Un « tour de jeu » pour alterner.
• Pas si difficile, mais à réorganiser

Jouer à deux en réseau ?


• Plus dur, notions d’IP, de client-serveur
• Créer des threads...
• Pour utilisateurs très avertis !
• Dur en JavaScool !
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Jouer vraiment contre l’ordinateur ?


• Il faut une deuxième grille int cases2 [][]
• Un « tour de jeu » pour alterner.
• Pas si difficile, mais à réorganiser

Jouer à deux en réseau ?


• Plus dur, notions d’IP, de client-serveur
• Créer des threads...
• Pour utilisateurs très avertis !
• Dur en JavaScool !
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Jouer vraiment contre l’ordinateur ?


• Il faut une deuxième grille int cases2 [][]
• Un « tour de jeu » pour alterner.
• Pas si difficile, mais à réorganiser

Jouer à deux en réseau ?


• Plus dur, notions d’IP, de client-serveur
• Créer des threads...
• Pour utilisateurs très avertis !
• Dur en JavaScool !
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Jouer vraiment contre l’ordinateur ?


• Il faut une deuxième grille int cases2 [][]
• Un « tour de jeu » pour alterner.
• Pas si difficile, mais à réorganiser

Jouer à deux en réseau ?


• Plus dur, notions d’IP, de client-serveur
• Créer des threads...
• Pour utilisateurs très avertis !
• Dur en JavaScool !
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Jouer vraiment contre l’ordinateur ?


• Il faut une deuxième grille int cases2 [][]
• Un « tour de jeu » pour alterner.
• Pas si difficile, mais à réorganiser

Jouer à deux en réseau ?


• Plus dur, notions d’IP, de client-serveur
• Créer des threads...
• Pour utilisateurs très avertis !
• Dur en JavaScool !
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Jouer vraiment contre l’ordinateur ?


• Il faut une deuxième grille int cases2 [][]
• Un « tour de jeu » pour alterner.
• Pas si difficile, mais à réorganiser

Jouer à deux en réseau ?


• Plus dur, notions d’IP, de client-serveur
• Créer des threads...
• Pour utilisateurs très avertis !
• Dur en JavaScool !
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Des images pour l’interface graphique ? Du son ?


• Pour les images, on utilise la bibliothèque swing
• Mais ce n’est pas évident !
• Pour utilisateurs avertis !
• Ce sera plus facile en python avec pyGame
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Des images pour l’interface graphique ? Du son ?


• Pour les images, on utilise la bibliothèque swing
• Mais ce n’est pas évident !
• Pour utilisateurs avertis !
• Ce sera plus facile en python avec pyGame
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Des images pour l’interface graphique ? Du son ?


• Pour les images, on utilise la bibliothèque swing
• Mais ce n’est pas évident !
• Pour utilisateurs avertis !
• Ce sera plus facile en python avec pyGame
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Des images pour l’interface graphique ? Du son ?


• Pour les images, on utilise la bibliothèque swing
• Mais ce n’est pas évident !
• Pour utilisateurs avertis !
• Ce sera plus facile en python avec pyGame
Ouvertures : comment prolonger ce travail ?
Ou donner du travail pour un trinôme ?

Des images pour l’interface graphique ? Du son ?


• Pour les images, on utilise la bibliothèque swing
• Mais ce n’est pas évident !
• Pour utilisateurs avertis !
• Ce sera plus facile en python avec pyGame

Vous aimerez peut-être aussi