TP Java n° 2
Transcription
TP Java n° 2
E2I4 HF - Java 2011-2012 TP Java n° 2 La Bataille de l’E2i Corrigé / * * C e t t e c l a s s e m o d e l i s e une c a r t e de j e u de bataille . */ p u b l i c c l a s s Carte { /* * Numero de l a c a r t e de 1 a 12 ( 1 = 2 . . 11= r o i 12=as ) */ p r i v a t e in t rang ; /* * Couleur de l a c a r t e : c o e u r c a r r e a u t r e f f l e p i q u e */ private String couleur ; /* * C o n s t r u c t e u r a p a r t i r d ’ un rang e t d ’ une c o u l e u r . @param r l e rang de l a n o u v e l l e c a r t e @param s l a c o u l e u r de l a c a r t e */ Carte ( in t r , S t r i n g s ) { rang=r ; couleur = s ; } /* * C o n s t r u c t e u r par d e f a u t : c r e e un as de c o e u r . */ Carte ( ) { t h i s ( 1 , ”Coeur ”) ; } /* * Permet de c o n n a i t r e l e rang de l a c a r t e @return l e rang de l a c a r t e */ i n t getRang ( ) { return rang ; } /* * Permet de c o n n a i t r e l a c o u l e u r de l a c a r t e @return l a c o u l e u r de l a c a r t e */ String getCouleur () { return c o u l e u r ; } /* * C o n s t r u i t une c h a i n e de c a r a c t e r e s q u i r e p r e s e n t e la carte . @return l a r e p r e s e n t a t i o n t e x t e de l a c a r t e */ public String toString () { -1- E2I4 HF - Java 2011-2012 S t r i n g a f f=n u l l ; switch ( rang ) { case 1 2 : a f f=”As ” ; break ; case 0 : case 1 : case 2 : case 3 : case 4 : case 5 : case 6 : case 7 : case 8 : a f f=” ”+( rang +2) ; break ; case 9 : a f f=”V a l e t ” ; break ; case 1 0 : a f f=”Dame” ; break ; case 1 1 : a f f =”Roi ” ; } return a f f+” de ”+c o u l e u r ; } /* * Compare l e rang de l a c a r t e a v e c c e l u i d ’ une a u t r e e t d e t e r m i n e s i l a c a r t e a un rang p l u s f o r t . @param c La c a r t e a v e c l a q u e l l e on va comparer @return v r a i s i l a c a r t e e s t p l u s f o r t e que c , f a u x dans l e cas c o n t r i a r e */ p u b l i c b o o l e a n plusForteQue ( Carte c ) { return rang>c . getRang ( ) ; } /* * Compare l e rang de l a c a r t e a v e c c e l u i d ’ une a u t r e e t d e t e r m i n e s i l a c a r t e a l e meme rang que c e l l e c i . @param c La c a r t e a v e c l a q u e l l e on va comparer @return v r a i s i l e rang de l a c a r t e e s t l e meme que c e l u i de c , f a u x dans l e cas c o n t r i a r e */ p u b l i c b o o l e a n egaleA ( Carte c ) { return rang==c . rang ; } } / * * La c l a s s e Paquet m o d e l i s e un p a q u e t d e s c a r t e s * / p u b l i c c l a s s Paquet { / * * Les c a r t e s du p a q u e t * / p r i v a t e Carte p i l e [ ] ; private / * * Le nombre de c a r t e s c o n t e n u e s dans l e t a b l e a u * / in t n c a r t e s ; / * * C o n s t r u c t e u r de Paquet v i d e . C r e a t i o n d ’ un p a q u e t de 52 c a r t e s maximum v i d e au d e p a r t * / Paquet ( ) { p i l e=new Carte [ 5 2 ] ; n c a r t e s =0; } / * * C o n s t r u c t e u r de Paquet a p a r t i r d ’ un t a b l e a u de c a r t e s . -2- E2I4 HF - Java 2011-2012 C r e a t i o n d ’ un p a q u e t de 52 c a r t e s maximum en y i n c l u a n t l e s c a r t e s c o n t e n u e s dans un t a b l e a u * / Paquet ( Carte [ ] mapile , in t nc ) { p i l e=new Carte [ 5 2 ] ; f o r ( in t i =0; i <nc ; i ++) p i l e [ i ]= m a p i l e [ i ] ; n c a r t e s=nc ; } / * * R e m p l i s s a g e d ’ un j e u c o m p l e t de 52 c a r t e s . C e t t e f o n c t i o n i n i t i a l i s e l e p a q u e t de maniere a a v o i r un j e u c o m p l e t d e s c a r t e s s a n s r e p e t i t i o n e t ordonne . S i l e paquet c o n t e n ai t des cartes , e l l e s seront perdues */ p u b l i c void i n i t P a q u e t C o m p l e t ( ) { in t i ; S t r i n g s=n u l l ; f o r ( i =0; i <52; i ++){ i f ( i <13) s=”Coeurs ” ; i f ( i >=13 && i <26) s=”Carreaux ” ; i f ( i >=26 && i <39) s=” T r e f l e s ” ; i f ( i >=39 && i <59) s=”P i q u e s ” ; p i l e [ i ]=new Carte ( i %13, s ) ; n c a r t e s ++; } } /* * B a t t r e l e p a q u e t . On echange de maniere a l e a t o i r e l e s c a r e t s du p a q u e t * / p u b l i c void b a t t r e ( ) { Carte temp ; in t i , j =0,k=0; f o r ( i =0; i <500; i ++){ j =( in t ) ( Math . random ( ) * n c a r t e s ) ; k=( in t ) ( Math . random ( ) * n c a r t e s ) ; temp=p i l e [ j ] ; p i l e [ j ]= p i l e [ k ] ; p i l e [ k]=temp ; } } / * * R e t i r e r l a p r e m i e r e c a r t e du p a q u e t . @return La p r e m i e r e c a r t e ou n u l l s i l e p a q u e t e s t v i d e */ p u b l i c Carte p i o c h e ( ) { i f ( n c a r t e s >0){ n c a r t e s −−; return p i l e [ n c a r t e s ] ; } else return n u l l ; } / * * A j o u t e r un c a r t e au d e b u t du p a q u e t . @param c La c a r t e a a j o u t e r @return v r a i s i l a c a r t e a e t e a j o u t e e c o r r e c t e m e n t , f a u x dans l e c a s c o n t r a i r e ( p a q u e t p l e i n ) */ p u b l i c b o o l e a n a j o u t e ( Carte c ) { i f ( n c a r t e s <51){ p i l e [ n c a r t e s ]= c ; n c a r t e s ++; return t r u e ; } -3- E2I4 HF - Java 2011-2012 else return f a l s e ; } / * * A j o u t e r un c a r t e a l a f i n du p a q u e t . @param c La c a r t e a a j o u t e r @return v r a i s i l a c a r t e a e t e a j o u t e e c o r r e c t e m e n t , f a u x dans l e c a s c o n t r a i r e ( p a q u e t p l e i n ) */ p u b l i c b o o l e a n a j o u t e A l a F i n ( Carte c ) { n c a r t e s ++; i f ( n c a r t e s <51){ f o r ( in t j=n c a r t e s ; j >0; j −−) p i l e [ j ]= p i l e [ j − 1 ] ; p i l e [0]= c ; return t r u e ; } else return f a l s e ; } /* * T e s t e r s i l e p a q u e t e s t v i d e */ public boolean estVide ( ) { i f ( n c a r t e s ==0) return t r u e ; else return f a l s e ; } / * * Combien de c a r t e s c o n t i e n t l e p a q u e t * / p u b l i c in t getNCartes ( ) { return n c a r t e s ; } / * * A f f i c h e l e contenu du p a q u e t dans une c h a i n e * / public String toString () { in t i ; S t r i n g a f f=” ” ; i f ( n c a r t e s ==0) return ”Paquet Vide ! ” ; f o r ( i =0; i <n c a r t e s ; i ++){ a f f=a f f+p i l e [ i ] . t o S t r i n g ( )+”\n ” ; } return a f f ; } } c l a s s TPaquet{ p u b l i c s t a t i c void main ( S t r i n g a r g s [ ] ) { // Premier e x e r c i c e c r e e r e t a f f i c h e r deux c a r t e s Carte c1= new Carte ( 3 , ”P i q u e s ”) ; Carte c2 = new Carte ( 1 , ”Coueurs ”) ; System . out . p r i n t l n ( c1 ) ; System . out . p r i n t l n ( c2 ) ; c2=c1 ; System . out . p r i n t l n ( c2 ) ; // Deuxieme e x e r c i c e : Creer e t a f f i c h e r un p a q u e t c o m p l e t Paquet j e u= new Paquet ( ) ; jeu . initPaquetComplet ( ) ; System . out . p r i n t ( j e u ) ; -4- E2I4 HF - Java 2011-2012 System . out . p r i n t ( ”Je b a t s l e s c a r t e s . . . \ n ”) ; jeu . battre () ; System . out . p r i n t ( j e u ) ; Carte c=j e u . p i o c h e ( ) ; System . out . p r i n t l n ( ”Ma p i o c h e : ”+c ) ; // T r o i s i e m e e x e r c i c e : p r e m i e r j e u a v e c une s e u l e p i o c h e in t s c o r e 1 =0, s c o r e 2 =0; b o o l e a n j o u e r=t r u e ; Paquet l a P i o c h e = new Paquet ( ) ; laPioche . initPaquetComplet ( ) ; laPioche . battre () ; while ( j o u e r ) { Carte c j 1= l a P i o c h e . p i o c h e ( ) ; i f ( c j 1==n u l l ) break ; Carte c j 2= l a P i o c h e . p i o c h e ( ) ; i f ( c j 2==n u l l ) break ; i f ( c j 1 . plusForteQue ( c j 2 ) ) s c o r e 1 +=2; e l s e i f ( ! c j 1 . egaleA ( c j 2 ) ) s c o r e 2 +=2; else { s c o r e 1 ++; s c o r e 2 ++; } System . out . p r i n t l n ( c j 1+” e t ”+c j 2 ) ; } i f ( s c o r e 1 >s c o r e 2 ) System . out . p r i n t l n ( ”Joueur 1 gagne avec ”+s c o r e 1+” p o i n t s ”) ; else System . out . p r i n t l n ( ”Joueur 2 gagne avec ”+s c o r e 2+” p o i n t s ”) ; // Quatrieme e x e r c i c e : j e u a v e c b a t a i l l e System . e x i t ( 0 ) ; } } p u b l i c c l a s s Joueur { /* * La main du j o u e u r ( son p a q u e t d e s c a r t e s ) */ Paquet mamain ; / * * Le nombre de p o i n t s */ i n t monscore ; / * * Le nom du j o u e u r */ S t r i n g nom ; / * * C o n s t r u c t e u r par d e f a u t -5- E2I4 HF - Java 2011-2012 */ Joueur ( ) { mamain= new Paquet ( ) ; monscore =0; nom=”anonyme ” ; } /* * C o n s t r u c t e u r @param n l e nom Joueur ( S t r i n g mamain= new monscore =0; nom=n ; a v e c un nom du j o u e u r * / n){ Paquet ( ) ; } / * * a j o u t e r une c a r t e a sa main */ p u b l i c void a j o u t e ( Carte c ) { mamain . a j o u t e ( c ) ; } / * * a j o u t e r une c a r t e a l a f i n de sa main */ p u b l i c void ramasse ( Carte c ) { mamain . a j o u t e A l a F i n ( c ) ; } /* * T e s t e r s i l e j o u e u r a e n c o r e d e s c a r t e s */ p u b l i c b o o l e a n aDesCartes ( ) { return ! mamain . e s t V i d e ( ) ; } / * * Combien de c a r t e s a l e j o u e u r * / p u b l i c in t combienDeCartes ( ) { return mamain . getNC ar te s ( ) ; } / * * Jouer une c a r t e de sa main */ p u b l i c Carte j o u e ( ) { return mamain . p i o c h e ( ) ; } / * * Gagner d e s p o i n t s @param n l e nombre de p o i n t s g a g n e s */ p u b l i c void gagne ( in t n ) { monscore+=n ; } / * * Perdre d e s p o i n t s @param n l e nombre de p o i n t s p e r d u s */ p u b l i c void p e r d s ( in t n ) { monscore−=n ; } / * * Annoncer son s c o r e @return Le s c o r e du j o u e u r */ p u b l i c in t g e t S c o r e ( ) { return monscore ; } -6- E2I4 HF - Java 2011-2012 / * * Donner un r e p r e s e n t a t i o n t e x t u e l l e du j o u e u r @return La c h a i n e q u i c o n t i e n t l a d e s c r i p t i o n du j o u e u r */ public String toString () { return ”Je s u i s l e j o u e u r ”+nom+ ”\nJ ’ a i l e s s c a r t e s s u i v a n t e s : \ n\n ”+mamain . t o S t r i n g ( )+ ”\n e t mon s c o r e e s t : ”+monscore ; } } / * * La b a t a i l l e a v e c deux j o u e u r s * @author J . S i l v a * @version 0.1 */ class IfiBataille { private private private private Joueur Joueur Paquet Paquet ja ; jb ; table ; jeuComplet ; / * * C r e a t i o n d e s j o u e u r s de l a p i o c h e e t de l a t a b l e */ public I f i B a t a i l l e () { j a= new Joueur ( ”A”) ; j b= new Joueur ( ”B”) ; t a b l e= new Paquet ( ) ; jeuComplet= new Paquet ( ) ; jeuComplet . i n i t P a q u e t C o m p l e t ( ) ; jeuComplet . b a t t r e ( ) ; System . out . p r i n t l n ( ”\n\n\n V o i c i l e j e u complet \n ”+jeuComplet ) ; } / * * Jouer une p a r t i e */ p u b l i c void j o u e r ( ) { Carte c1 , c2 ; // r e p a r t i t i o n d e s c a r t e s while ( ! jeuComplet . e s t V i d e ( ) ) { j a . a j o u t e ( jeuComplet . p i o c h e ( ) ) ; j b . a j o u t e ( jeuComplet . p i o c h e ( ) ) ; } System . out . p r i n t l n ( j a+”\n\n ”+j b ) ; // j e u while ( j a . aDesCartes ( ) && j b . aDesCartes ( ) ) { c1=j a . j o u e ( ) ; c2=j b . j o u e ( ) ; t a b l e . a j o u t e ( c1 ) ; t a b l e . a j o u t e ( c2 ) ; System . out . p r i n t l n ( ”A: ”+j a . combienDeCartes ( )+ ” B : ”+j b . combienDeCartes ( )+ ” T : ”+t a b l e . getNCar tes ( )+ ” ”+c1+”<−>”+c2 ) ; i f ( c1 . plusForteQue ( c2 ) ) { // j o u e u r A gagne -7- E2I4 HF - Java 2011-2012 while ( ! t a b l e . e s t V i d e ( ) ) j a . ramasse ( t a b l e . p i o c h e ( ) ) ; } i f ( c2 . plusForteQue ( c1 ) ) { // j o u e u r B gagne while ( ! t a b l e . e s t V i d e ( ) ) j b . ramasse ( t a b l e . p i o c h e ( ) ) ; } i f ( c1 . egaleA ( c2 ) ) { // b a t a i l l e ! i f ( j a . aDesCartes ( ) && j b . aDesCartes ( ) ) { table . ajoute ( ja . joue () ) ; table . ajoute ( jb . joue () ) ; } else break ; System . out . p r i n t l n ( ”BATAILLE”) ; } } i f ( j a . aDesCartes ( ) ) { System . out . p r i n t l n ( ”Le j o u e u r A a gagne ! ”) ; j a . gagne ( 1 ) ; } else { System . out . p r i n t l n ( ”Le j o u e u r B a gagne ! ”) ; j b . gagne ( 1 ) ; } } / * * C r e a t i o n e t l an c e me n t du j e u * */ p u b l i c s t a t i c void main ( S t r i n g a r g s [ ] ) { I f i B a t a i l l e monjeu= new I f i B a t a i l l e ( ) ; monjeu . j o u e r ( ) ; System . e x i t ( 0 ) ; } } / * * La b a t a i l l e a v e c deux j o u e u r s * @author J . S i l v a * @version 0.1 */ c l a s s AppBataille { p u b l i c s t a t i c void main ( S t r i n g a r g s [ ] ) { // Premier e x e r c i c e c r e e r e t a f f i c h e r deux c a r t e s Carte c1= new Carte ( 3 , ”P i q u e s ”) ; Carte c2 = new Carte ( 1 , ”Coueurs ”) ; System . out . p r i n t l n ( c1 ) ; System . out . p r i n t l n ( c2 ) ; c2=c1 ; System . out . p r i n t l n ( c2 ) ; // Deuxieme e x e r c i c e : Creer e t a f f i c h e r un p a q u e t c o m p l e t // l e b a t t r e e t l ’ a f f i c h e r a nouveau . P i o c h e r une c a r t e e t // l ’ a f f i c h e r Paquet j e u= new Paquet ( ) ; jeu . initPaquetComplet ( ) ; System . out . p r i n t l n ( j e u ) ; -8- E2I4 HF - Java 2011-2012 System . out . p r i n t ( ”Je b a t s l e s c a r t e s . . . \ n ”) ; jeu . battre () ; System . out . p r i n t ( j e u ) ; Carte c=j e u . p i o c h e ( ) ; System . out . p r i n t l n ( ”Ma p i o c h e : ”+c ) ; // T r o i s i e m e e x e r c i c e : p r e m i e r j e u a v e c une s e u l e p i o c h e in t s c o r e 1 =0, s c o r e 2 =0; b o o l e a n j o u e r=t r u e ; Paquet p i o c h e = new Paquet ( ) ; pioche . initPaquetComplet ( ) ; pioche . battre () ; while ( j o u e r ) { Carte c j 1= p i o c h e . p i o c h e ( ) ; i f ( c j 1==n u l l ) break ; Carte c j 2= p i o c h e . p i o c h e ( ) ; i f ( c j 2==n u l l ) break ; i f ( c j 1 . plusForteQue ( c j 2 ) ) s c o r e 1 +=2; e l s e i f ( ! c j 1 . egaleA ( c j 2 ) ) s c o r e 2 +=2; else { s c o r e 1 ++; s c o r e 2 ++; } System . out . p r i n t l n ( c j 1+” e t ”+c j 2 ) ; } i f ( s c o r e 1 >s c o r e 2 ) System . out . p r i n t l n ( ”Joueur 1 gagne avec ”+s c o r e 1+” p o i n t s ”) ; else System . out . p r i n t l n ( ”Joueur 2 gagne avec ”+s c o r e 2+” p o i n t s ”) ; // Quatrieme e x e r c i c e : j e u a v e c b a t a i l l e s c o r e 1 =0; s c o r e 2 =0; j o u e r=t r u e ; pioche . initPaquetComplet ( ) ; pioche . battre () ; b o o l e a n b a t a i l l e=f a l s e ; in t n p o i n t s =2; while ( j o u e r ) { i f ( ! b a t a i l l e ) n p o i n t s =2; Carte c j 1= p i o c h e . p i o c h e ( ) ; i f ( c j 1==n u l l ) break ; Carte c j 2= p i o c h e . p i o c h e ( ) ; i f ( c j 2==n u l l ) break ; i f ( c j 1 . plusForteQue ( c j 2 ) ) { s c o r e 1+=n p o i n t s ; } e l s e i f ( ! c j 1 . egaleA ( c j 2 ) ) { s c o r e 2+=n p o i n t s ; } else { n p o i n t s +=2; b a t a i l l e=t r u e ; -9- E2I4 HF - Java 2011-2012 } System . out . p r i n t l n ( c j 1+” e t ”+c j 2 ) ; i f ( b a t a i l l e ) System . out . p r i n t l n ( ”BATAILLE ! ”) ; } i f ( s c o r e 1 >s c o r e 2 ) System . out . p r i n t l n ( ”Joueur 1 gagne avec ”+s c o r e 1+” p o i n t s ”) ; else System . out . p r i n t l n ( ”Joueur 2 gagne avec ”+s c o r e 2+” p o i n t s ”) ; // La b a t a i l l e a v e c deux j o u e u r s Joueur j a= new Joueur ( ”A”) ; Joueur j b= new Joueur ( ”B”) ; Paquet t a b l e= new Paquet ( ) ; Paquet j e u c o m p l e t= new Paquet ( ) ; jeucomplet . initPaquetComplet ( ) ; jeucomplet . battre () ; System . out . p r i n t l n ( ”\n\n\n V o i c i l e j e u complet \n ”+j e u c o m p l e t ) ; // r e p a r t i t i o n d e s c a r t e s f o r ( in t k=0; k <26; k++){ ja . ajoute ( jeucomplet . pioche () ) ; jb . ajoute ( jeucomplet . pioche () ) ; } System . out . p r i n t l n ( j a+”\n\n ”+j b ) ; // j e u while ( j a . aDesCartes ( ) && j b . aDesCartes ( ) ) { c1=j a . j o u e ( ) ; c2=j b . j o u e ( ) ; t a b l e . a j o u t e ( c1 ) ; t a b l e . a j o u t e ( c2 ) ; System . out . p r i n t l n ( ”A: ”+j a . combienDeCartes ( )+ ” B : ”+j b . combienDeCartes ( )+ ” T : ”+t a b l e . getNCar tes ( )+ ” ”+c1+”<−>”+c2 ) ; i f ( c1 . plusForteQue ( c2 ) ) { // j o u e u r A gagne while ( ! t a b l e . e s t V i d e ( ) ) j a . ramasse ( t a b l e . p i o c h e ( ) ) ; } i f ( c2 . plusForteQue ( c1 ) ) { // j o u e u r B gagne while ( ! t a b l e . e s t V i d e ( ) ) j b . ramasse ( t a b l e . p i o c h e ( ) ) ; } i f ( c1 . egaleA ( c2 ) ) { // b a t a i l l e ! i f ( j a . aDesCartes ( ) && j b . aDesCartes ( ) ) { table . ajoute ( ja . joue () ) ; table . ajoute ( jb . joue () ) ; } else break ; System . out . p r i n t l n ( ”BATAILLE”) ; } } i f ( j a . aDesCartes ( ) ) { System . out . p r i n t l n ( ”Le j o u e u r A a gagne ! ”) ; j a . gagne ( 1 ) ; } - 10 - E2I4 HF - Java 2011-2012 else { System . out . p r i n t l n ( ”Le j o u e u r B a gagne ! ”) ; j b . gagne ( 1 ) ; } System . e x i t ( 0 ) ; } } - 11 -