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 -