Combat RPG

Dans ce jeu de rôle, on souhaite calculer les points de vie (PV) restants d'un personnage après avoir reçu une attaque. Le calcul dépend de la force de l'attaquant, de son arme, et de l'armure du défenseur.

Force de frappe

La puissance d'une attaque dépend de la force naturelle du héros et du bonus apporté par son épée.

La formule est une simple addition :

\[ \text{Puissance} = \text{Force} + \text{Bonus Arme} \]

Écrire la fonction calculer_puissance qui prend en paramètres :

  • force (nombre entier) ;
  • bonus_arme (nombre entier).

Elle renvoie la puissance totale de l'attaque.

Console Python
>>> calculer_puissance(80, 20)
100

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /

.128013lap:f2 icbemtnrP_=y)o(+h/dgS,s1kvwu050A0l0n0c0i0b0E0h0j0b0c0E0E0s010n0i0d010406050E0J0m0m0c0p0t040C0v0b0J0!0v0o050z0+0-0/0;0)0d0405140}170z140)0A0i0H0S0U0W0Y0y0i0B0y0b1l0y0n0%050N0k0b0l1g0V0X011k1m1o1m0n1u1w1s0n0p150n0y1y1i010f0P0l0o0c0m0l010S0@0E0d0c0o0Y0g1s1$1(1P1A1S1w1V1X0%0a0h0q0p0v0d0v0E0i0`0o0h0L1!0p0p0l0j220}1-0o150z1N2f1K1M1L1t0A1/0Y1o0o1U1 1s1d1f0T1z2p0i2r0o0v2v1s0d28152d2f2J0*1%232x1Q2C0p0.0b0%0F2c2N0(2M1.2P1A2R2T0%0g2X1(2f2G0l2f2v2i0A1M2n2$0Y0j2D1Y152=162H2!2e2,342|0L2I2N2o010G0%0L0f35392#1h1A0I0%0h3h333b0o0f0%0j0c0b0j0J1w0p0r0d0J0i0W1(0j0l3p2d3b0$040w3K3a2`010o0%0f0v0p3I3Q3j2y013N0D3h3o3L3S3U040k0{0J0E0r0/1X3!2O3k0Y3N0u0e3h060h433+3R3|3c0%280n0J0p0|0~2Y453#2Q3V3X3Z4f2-4h3{3$0v0%0x3*3q3-0%3:0o3=3@2S3J4n2e0)0z372:18320z302g2@0}2j4R0c1v4K4N1e2Z4N0M0O0Q04.
Réduction des dégâts

L'armure de la cible absorbe une partie du choc. Cette absorption est calculée grâce à un coefficient de réduction.

\[ \text{Absorption} = \text{Armure} \times \text{Coeff} \]

Exemple : Si j'ai 50 points d'armure et un coefficient de 0.5, j'absorbe \(50 \times 0.5 = 25\) points de dégâts.

Écrire la fonction calculer_absorption qui prend en paramètres :

  • armure (entier) ;
  • coeff (nombre flottant, ex: 0.5).

Elle renvoie le nombre de points de dégâts absorbés.

Console Python
>>> calculer_absorption(50, 0.5)
25.0

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /

.128013lap:f2 icbemtnrP_=y)o(h/dgS,s1k-vwu050z0l0n0c0i0b0D0h0j0b0c0D0D0s010n0i0d010406050D0J0m0m0c0p0t040B0v0b0J0!0v0o050y0+0-0/0;0)0d0405140}170y140)0z0i0H0S0U0W0Y0x0i0A0x0b1l0x0n0%050N0k0b0l1g0V0X011k1m1o1m0n1u1w1s0n0p150n0x1y1i010f0P0l0o0c0m0l010S0@0D0d0c0o0Y0g1s1$1(1P1A1S1w1V1X0%0a0h0q0p0v0d0v0D0i0`0o0h0L1!0p0p0l0j220}1-0o150y1N2f1K1M1L1t0z1/0Y1o0o1U1 1s1d1f0T1z2p0i2r0o0v2v1s0d28152d2f2J0*1%232x1Q2C0p0.0b0%0E2c2N0(2M1.2P1A2R2T0%0g2X1(2f2G0l2f2v2i0z1M2n2$0Y0j2D1Y152=162H2!2e2,342|0L2I2N2o010F0%0L0f35392#1h1A0I0%0h3h333b0o0f0%0j0c0b0j0J1w0p0r0L0A0c0n0D3p2d3b0$040w3I3a2`010o0%0d0J0i0W1(0j0l3O3j2y013L0C3h3o3J3Q3S040c0k0D0v0p0d2b0~2Y3q3Q3L0u0e3h060h443,3P3k0Y3d04280n0J0p0|3{2-463$2Q3T3V3X0o3Z3+3}48010v0%0G4r3-4t3/3;3?3^3`2J0)0y372:18320y302g2@0}2j4R3;1w2;1e2Z4N0M0O0Q04.
Dégâts réels

Les dégâts réellement subis par le personnage sont la puissance de l'attaque moins ce qui a été absorbé par l'armure.

\[\text{Dégâts} = \text{Puissance} - \text{Absorption}\]

Écrire la fonction calculer_degats qui prend en paramètres puissance et absorption et renvoie le résultat de la soustraction.

(Pour cet exercice, on considère que l'absorption n'est jamais supérieure à la puissance).

Console Python
>>> calculer_degats(100, 25)
75

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /

.128013lap:f2 icbemtnrP_=y)o(h/dgS,s1k-vwu050z0l0n0c0i0b0D0h0j0b0c0D0D0s010n0i0d010406050D0J0m0m0c0p0t040B0v0b0J0!0v0o050y0+0-0/0;0)0d0405140}170y140)0z0i0H0S0U0W0Y0x0i0A0x0b1l0x0n0%050N0k0b0l1g0V0X011k1m1o1m0n1u1w1s0n0p150n0x1y1i010f0P0l0o0c0m0l010S0@0D0d0c0o0Y0g1s1$1(1P1A1S1w1V1X0%0a0h0q0p0v0d0v0D0i0`0o0h0L1!0p0p0l0j220}1-0o150y1N2f1K1M1L1t0z1/0Y1o0o1U1 1s1d1f0T1z2p0i2r0o0v2v1s0d28152d2f2J0*1%232x1Q2C0p0.0b0%0E2c2N0(2M1.2P1A2R2T0%0g2X1(2f2G0l2f2v2i0z1M2n2$0Y0j2D1Y152=162H2!2e2,342|0L2I2N2o010F0%0L0f35392#1h1A0I0%0h3h333b0o0f0%0j0c0b0j0J1w0p0r0L0A0c0n0D3p2d3b0$040w3I3a2`010o0%0d0J0i0W1(0j0l3O3j2y013L0C3h3o3J3Q3S040c0k0D0v0p0d2b0~2Y3q3Q3L0u0e3h060h443,3P3k0Y3d04280n0J0p0|3{2-463$2Q3T3V3X0o3Z3+3}48010v0%0G4r3-4t3/3;3?3^3`2J0)0y372:18320y302g2@0}2j4R3;1w2;1e2Z4N0M0O0Q04.
Points de vie restants

C'est le moment de tout combiner !

On veut savoir combien de PV il reste au personnage après l'attaque. La fonction finale pv_restants doit prendre en paramètres :

  1. pv_actuels (La vie du personnage avant le coup)
  2. force (La force de l'attaquant)
  3. bonus_arme (Le bonus de l'épée)
  4. armure (L'armure du défenseur)
  5. coeff (Le coefficient de protection)

Objectif : Vous devez calculer la puissance, puis l'absorption, en déduire les dégâts et enfin soustraire ces dégâts aux PV actuels.

⚠️ Impératif : Vous devez réutiliser les fonctions calculer_puissance, calculer_absorption et calculer_degats.

Console Python
>>> pv_restants(200, 80, 20, 50, 0.5)
125.0
Explication : Attaque de 100, Absorption de 25. Dégâts subis = 75. Vie restante = 200 - 75 = 125.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /

.1280133lap4:f2 icbemtnrP_=y)o(h/5dgS,s1k-vwu050C0n0p0d0k0c0G0j0l0c0d0G0G0u010p0k0e010406050G0M0o0o0d0r0v040E0x0c0M0%0x0q050A0.0:0=0@0,0e040517101a0A170,0C0k0K0V0X0Z0#0z0k0D0z0c1o0z0p0*050Q0m0c0n1j0Y0!011n1p1r1p0p1x1z1v0p0r180p0z1B1l010h0S0n0q0d0o0n010V0`0G0e0d0q0#0i1v1)1+1S1D1V1z1Y1!0*0a0j0s0r0x0e0x0G0k0}0q0j0O1%0r0r0n0l25101:0q180A1Q2i1N1P1O1w0C1=0#1r0q1X221v1g1i0W1C2s0k2u0q0x2y1v0e2b182g2i2M0-1*262A1T2F0r0;0c0*0H2f2Q0+2P1;2S1D2U2W0*0i2!1+2$2g2r012+0d2X040b2/2h0,2=2)0#2^2`0f2}2;2Q2?330*0B361b2K102y2l0C1P2q31010l2G1#183h193f2O112#053o0O2L383m0I0*0O0h3d301k1D0L0*0j3I3C3K320h0*0e0K0t2b0G0Q0q0p0G3P2(3R010)040y3(2R3*0q3U3W0d2d0M0n0T3/2?3,0F363O3J2B2@0*0h0x0r0l0n3}3m3 412%3:443=040m0~0M0G0t0=1!4c3*4e3w2:423Q4i0*4q0M2b4s444u2M4x3)4z043o0n0h3H4v2h4g3~0*0w0g36060j4Z4I4h2T3U0M0k3%4Q044#2?0x0*0u4f434%4L2_0l0M1z0r0t0e4)0Z1+4a4E1T3,3.4,4S3m4j47494b594@1D4G2#4.5b0*4l0q4n4p2V5f2O5h0#3,0w4X4!5l3;4A0m4o0K2_4?4y1T4:044=4,5B4K0l4`4|0n4~0d5E480e2e5g5J5i0*585u5$324A2V4C5t3x5v3+0*405O5a5C4L0x4N4P5*4J564U5z4!5`4K0O0D0d3$5I611D5L5N4H664^5R0c4{4}0t686a4+604$5%3-552*4(4*6w5w5@6c6t5,045W5F5H5#6d6B045y4,4Y655=3E042b0p4C0 5_5=4j3V4p3_3{6r5k6i6e0*0J6D393F0n696b6P103z0n2i2J6|3g1h3i2l2o2j5W1z2i3h0,0A0O0Q0S0G04.