POO La Belote
La belote est un jeu qui se joue avec 32 cartes, chaque carte ayant une hauteur et une couleur. Les différentes hauteurs sont dans l'ordre 7, 8, 9, 10, Valet, Dame, Roi, As et les différentes couleurs sont « pique », « carreau », « cœur », « trèfle ».
On modélise un paquet de cartes, en programmation orientée objet, par deux classes: une classe Carte et une classe Paquet.
Les classes Carte et Paquet
Les classes Carte et Paquet sont définies ainsi :
classDiagram
direction RL
Paquet o-- Carte
class Paquet{
list contenu
__init__()
cart_pos()
taille()
ajoute_carte()
}
class Carte {
__init__()
int hauteur
couleur_carte()
hauteur_carte()
int couleur
}
| méthode |
explication |
| init |
prend un entier h et un entier c et crée la carte correspondante |
| couleur_carte |
renvoie la couleur de la carte |
| hauteur_carte |
renvoie la hauteur de la carte |
| méthode |
explication |
| init |
crée un paquet vide |
| carte_pos |
prend un entier n et renvoie la carte Ă l'indice n |
| taille |
renvoie le nombre de cartes |
Dans la classe Carte, les hauteurs et les couleurs sont repérées par les codes suivants :
| Python |
|---|
| HAUTEURS = {
1: 'As', 7: '7', 8: '8', 9: '9', 10: '10',
11: 'Valet', 12: 'Dame', 13: 'Roi'
}
COULEURS = {1 : "pique", 2 : "cœur", 3: "carreau", 4 : "trèfle"}
|
Exemple d'utilisation
| Python |
|---|
| >>> jeu = Paquet()
>>> jeu.ajoute_carte(Carte(1, 3)) # Ajout de l'as de carreau
>>> c1 = jeu.carte_pos(0)
>>> c1.couleur_carte()
'carreau'
>>> c1.hauteur_carte()
'As'
>>> jeu.taille()
1
|
Avant chaque manche, on choisit une couleur d'atout parmi les quatre couleurs.
Chaque carte rapporte des points. Ces points dépendent de la hauteur de la carte, mais aussi du fait que la couleur soit l'atout ou non.
Les points hors atout sont les suivants :
| 7 |
8 |
9 |
10 |
Valet |
Dame |
Roi |
As |
| 0 |
0 |
0 |
10 |
2 |
3 |
4 |
11 |
Les points Ă l'atout sont les suivants :
| 7 |
8 |
9 |
10 |
Valet |
Dame |
Roi |
As |
| 0 |
0 |
14 |
10 |
20 |
3 |
4 |
11 |
Calculs de points
On considère un paquet contenant les cartes suivantes : As de cœur (
), 7
, 9 de trèfle (
), 9 de pique (
), Valet
, Valet
, Dame de carreau (
) et Roi
.
Si on choisit carreau comme atout, le décompte des points est le suivant :
As  |
7  |
9  |
9  |
Valet  |
Valet  |
Dame  |
Roi  |
Total |
| 11 |
0 |
0 |
0 |
2 |
2 |
3 |
4 |
22 |
Si on choisit trèfle comme atout on obtient par contre :
As  |
7  |
9  |
9  |
Valet  |
Valet  |
Dame  |
Roi  |
Total |
| 11 |
0 |
14 |
0 |
20 |
2 |
3 |
4 |
54 |
Les points des cartes sont stockés dans deux dictionnaires VALEURS et VALEURS_ATOUT. Le dictionnaire VALEURS_ATOUT est à compléter.
Écrire la fonction calculer_points qui :
- prend en paramètres un objet
jeu de la classe Paquet décrivant un jeu de cartes ainsi qu'une chaîne de caractères atout indiquant la couleur d'atout
- et renvoie le total de points des cartes dans ce jeu.
On garantit que la variable jeu contient des cartes bien formées (couleur et hauteur valides) et que la valeur de atout fait partie de ('pique', 'cœur', 'carreau', 'trèfle').
Exemples
| Python |
|---|
| >>> jeu = Paquet()
>>> jeu.ajoute_carte(Carte(1, 2))
>>> jeu.ajoute_carte(Carte(7, 2))
>>> jeu.ajoute_carte(Carte(9, 4))
>>> jeu.ajoute_carte(Carte(9, 1))
>>> jeu.ajoute_carte(Carte(11, 4))
>>> jeu.ajoute_carte(Carte(11, 2))
>>> jeu.ajoute_carte(Carte(12, 3))
>>> jeu.ajoute_carte(Carte(13, 3))
>>> calculer_point(jeu, "carreau")
22
>>> calculer_point(jeu, "trèfle")
54
|
.128013cm,s7- 3k/8R=t14T5Oy_i92S0+vD)hVfEobLan6p{AlgPU[u]e}r:j.d(w050)0Z0o0M0w0S0e0h0b0S0M0e0e0n010o0w0P010406050e0X0c0c0M0#0u040z0J0S0X0 0J0N050k16181a1c140P04051s1l1v0k1s140)0w0C0@0_0{0}0_0N0T0X0M0T0Z0g0P0u0o0F1j0h0F0w0T0F0S1X0F0o12050/0K0S0Z1E0`0|011W1Y1!1Y0o1*1,1(0o0#1t1S0@1f0e0P0M0N0}0y011.1G010H0;0Z0N0M0c0Z1(23252a1:2d1,2g2i120a0h0U0#0J0P0J0e0w1i0N0h0-210#0#0Z0b2D1l2l0N1t0k1S2Q1}1 1~1)0)2n1H0w0N2f2A1(1B1D0^1/2!2$0N0J2*1(0P2J1t2O2Q2`15242E2,2b2:0#190S1(0M1V2J0H0}030v0v0b2;0Z1!2/0J0g0i0g0p120h0p1l0M2{2~132}2m301:323436380Z3a013c3e3g3i2%3l0g28040h0y3s3u253w2O2Z013B0M351t370F393b3d3f0-3L2:3N0i3p0i3T2N3v143X3z0}3!3$053(3*3H3,3K2#3M3m0q3p0q3^1m3`3x2 1F3A0J333#3D3)3F3+3J3.473:3m0s3p0s4d2`3{2~3Y3 4n433I3-3h4t3k3m0O3p0O4z4f3|4i3~4k3C3%3E3G4H463j3N0f3p0f4Q3V4B3y4T3Z4V4m4X4o4Z454s4$3m0l3p0l4+2P4-4h2-4:4l40424p444r4J4{0g0x3p0x503W4C3}554W414Y4q4I3/4L3n0A120p0A5i524D4;575p5a5r4K3N0p3o045J5z4g5B564F594!4`483n3P0p3S0k3t3_4,5O5l4E4?4G4_5c5V0p3=5L3@5!3U515(4/5*5o4@5q4#5/4a5L4c5@5$5_4S545|584^5b5s5I4w5L4y654e5%68315C5R6c5G5d0p4N5L4P6j4A5`696o5+5S5-6e3m0p4(5L4*6x4R5k5{6B5}5,6d5H6G4}5L4 6L6l6N6A5Q6C6q604u3n5f5L5h6Y676!6n6$6Q6D6S5d0y5v046{5N6m4j6?6b5 5U6*0y5K776 6;715n735F6)5t0y3P7i5i1w2^1l2*2T0)1 2Y5l4I2)1C1t2@0Z2_3v661t4I7B2m0w0)0}3d2O5I3D7I7K6_5/292r0Z7Q6r7S2Q5#703~120G0R0L0I0V0m0z7D0h6z2b0J120n7/7;1:11040Q7D7`0}0e3P010R0e017 7#017|0$7_890c0w5w3r6k2P808a120d8d7b81834(888q8m048c8j3Q8l8f125y8z8l7|8o8z7:898212014}8u4.548b8p8R2b8C048E2|898H8U532b8M04015f8Q8(7{128y2`8K8v8X8Z7C8#8n8%3Y8*015x878F8|8x8~5l8X5x8.3Y8$8J8l900G3#0.938!8v8T9e8e8g6}9b5l9d8?9f830D2h2j9s4/9n9v9p125?9l8V8:048I9E8v900m0J8g9B8S8;974/8X649I8/0}7|0!7D14944C7P017L2~3N3P5o9-6E6T3O7T9z7W7g9;1(65890N7%7)7+7-0v0R0r0t0V0r9W547?047^9o9m127~8z9*9!0h9@0v7M3m5;9?7J9.7R6*3=0h7U9}755tav5@0haJ8@9J8r8N859k8{ak96ajaM01998iap9t8}an9barat0g62awaE5.6*4aaC9|ay7Xa/a03taKaL9#01908t9+aV9D3va|3Y8_9T2b9u4fb12Ea(9:4v7Oax9^5d4wa;2ia-6F0g6g3Ta{9w8N8Pbc9c9VaUa}b7bxa!9L9)a%biasbf0g6ua,a?9~4M9{bnbOaF3NbMaIaKbu8+8-bD9Cbz9NaV999ZaRb2a#6ybxbe254%bhbo9_4(bm7VbTa.5t6IbsbY8L8392b89K8=b48B9q9ab$9UbFa$b;bIa)6VbNbj5V4}b|b_5dclbXaJbZ019h1,1%c79$b(ca9F6}8`3V8Gb/bbapb=0N3N6,cmaz5t5fcqb~bpcQcub55l909y2scB8wc93Vc!9X9q9Hb-a}ba5%ci7Qa)924Xara@5t92cVcn6*c{c2cvc48N9Q9Sceb9cDc,cb12b,cI959McLc;aqcjbK5Jb^cW9_dqd1cS5I5K3^959(chcMdob?6G9=37c}bP5WbRb}d2c 9=5@aodmcN5IavdIbIc~dVdMcr5/aH3tdSdi9,dEcO6Ga+dXd$d3a:aDds6sa+a18v0j120-0Hc)0+3pc)0N0H120b3#0b0X1,0#0v2z2#0oc)7|0*e5120%0Z0XejcKdea2120M0o0J1her040Ec+5_c^ayc`brd;d_5/bld^dO6fa_3Qc38va304eg0N0o0eae7=7@e!1:bCb:dDc_dpbMeJeO6G4NdvdZe;eQbt89d~040H4ke%7$040wf0010Je3f21kbA4D0K120#251NeAeldb3Aenepc)ag0(em040/0;1,fh0EeCbGeF9/dF3nc1e/dw6Gb{eNfFfCe_a{eSaVeUe90#0o0Zf4agaib)a}eUeoeqfj0}fofqfQfSef2Afhfqf3f$8w0Efye+eGdpclfEe@3ncpfIf}0pcta`fMd6d}120we1fa5)e81afSfn12fpf;fPey1,0Xeef*fTf;ekf?gb4/fVfWcEeTevexezgrddeEf^fAd.6+dre:gJe?dK0pcYg4g5e`gzeV9ReXeZguafe$gZ3112eWeYfU120Bf4eU7(7*7,0za8aaaceA0Wf)gegqaZgvghfq0F0M1hepgog}fv0Yf@dTd-9;6|cRf}6{d#eK76hfcZgTaVe|3h0eg~dmbEeD3wfzbJfB77gKfJhBgNbU3mhB7ZeRgSfNfYg(gWg*g$1:fVg.hOehgYfX3Yagg-hRf1g:a67.gD04g{gjgdfRhtd+aVf(h.04h3h5gn3eh8h+0*0EhadChce,hAdHdnd=7h28hFb 9;dQgRc-54e|2J0ognf9hYgcgVhWhbcI0k7F7m7A7o7x1l0o7riA2W2R0M1+ix0k7p9*0-fs0=04.
# Tests(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)