Académique Documents
Professionnel Documents
Culture Documents
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
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 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 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 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
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 () {
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 () {
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 () {
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 () {
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 () {
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 () {
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 }
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 ;
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;
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
}
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’à ... ?
222 // Ici la fonction joueEmplacement va Ãa tre appelee et si c’est touche renvoie plus que zero
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...
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 ?