From 466baebfc84ba25f8bcf7e0f5bd68c1c72cef4a8 Mon Sep 17 00:00:00 2001 From: Jules Fouchy Date: Mon, 4 Nov 2024 21:42:47 +0100 Subject: [PATCH] TD7 S1: Add a second Struct exercise --- content/TDs/S1/07_Struct.md | 86 +++++++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 3 deletions(-) diff --git a/content/TDs/S1/07_Struct.md b/content/TDs/S1/07_Struct.md index ab80647a..0e794361 100644 --- a/content/TDs/S1/07_Struct.md +++ b/content/TDs/S1/07_Struct.md @@ -2,9 +2,9 @@ title: TD7 - Structures --- -## Exercice 1 +## Exercice 1 : déplacements -Vous êtes le pilote d'un sous-marin, vous avez reçu des ordres de mouvements sous la forme d'une instruction et d'une distance à parcourir. Vous devez écrire un programme qui permet de calculer la position du sous-marin après avoir effectué les mouvements reçus. +Vous êtes le pilote d'un sous-marin, vous avez reçu des ordres de mouvement sous la forme d'une instruction et d'une distance à parcourir. Vous devez écrire un programme qui permet de calculer la position du sous-marin après avoir effectué les mouvements reçus. Votre position initiale est `(0, 0)` et vous pouvez vous déplacer dans les directions suivantes: `Up`, `Down`, `Forward`, `Backward`. @@ -58,4 +58,84 @@ std::vector moves = { :::info Exercice inspiré de de l'édition **2021** de l'**advent of code**: https://adventofcode.com/2021/day/2 -::: \ No newline at end of file +::: + +## Exercice 2 : combats de Pokémons + +Un pokémon a un Nom, des Points de Vie, une Attaque et une Vitesse. Un combat entre deux Pokémons se déroule ainsi: +- À chaque tour, le pokémon avec la plus grande vitesse commence (si égalité, on choisit au hasard lequel de deux commence ce tour) +- Le pokémon attaquant réduit les Points de Vie de l'autre d'un montant égal à son attaque. Puis, si le deuxième pokémon n'est pas encore KO (Points de Vie encore > 0), il attaque à son tour + +Faites une structure représentant un Pokémon, puis écrivez une fonction faisant le combat entre deux Pokémons.
+Par exemple: + +```cpp +Pokemon pokemon1{.nom = "Poke1", .points_de_vie = 50, .attaque = 10, .vitesse = 8}; +Pokemon pokemon2{.nom = "Poke2", .points_de_vie = 30, .attaque = 20, .vitesse = 3}; +combat(pokemon1, pokemon2); +``` + +doit afficher : +``` +Tour 1: +Poke1 attaque, il reste 20 PV à Poke2. +Poke2 attaque, il reste 30 PV à Poke1. + +Tour 2: +Poke1 attaque, il reste 10 PV à Poke2. +Poke2 attaque, il reste 10 PV à Poke1. + +Tour 3: +Poke1 attaque, il reste 0 PV à Poke2. +Poke2 est KO, il ne peut pas attaquer. + +Poke1 gagne! +``` + +Un dresseur a un Nom et 6 pokémons. Dans un combat entre deux dresseurs, ils font combattre leurs pokémons les uns après les autres, jusqu'à ce que tous les pokémons d'un des dresseurs soient KOs.
+Par exemple: + +```cpp +Dresseur dresseur1{.nom = "Dresseur1", .pokemons = { + Pokemon{.nom = "Dresseur1_Poke1", .points_de_vie = 5, .attaque = 10, .vitesse = 8}, + Pokemon{.nom = "Dresseur1_Poke2", .points_de_vie = 5, .attaque = 10, .vitesse = 8}, + Pokemon{.nom = "Dresseur1_Poke3", .points_de_vie = 5, .attaque = 10, .vitesse = 8}, + Pokemon{.nom = "Dresseur1_Poke4", .points_de_vie = 5, .attaque = 10, .vitesse = 8}, + Pokemon{.nom = "Dresseur1_Poke5", .points_de_vie = 5, .attaque = 10, .vitesse = 8}, + Pokemon{.nom = "Dresseur1_Poke6", .points_de_vie = 5, .attaque = 10, .vitesse = 8}, +}}; +Dresseur dresseur2{.nom = "Dresseur2", .pokemons = { + Pokemon{.nom = "Dresseur2_Poke1", .points_de_vie = 20, .attaque = 10, .vitesse = 3}, + Pokemon{.nom = "Dresseur2_Poke2", .points_de_vie = 20, .attaque = 10, .vitesse = 3}, + Pokemon{.nom = "Dresseur2_Poke3", .points_de_vie = 20, .attaque = 10, .vitesse = 3}, + Pokemon{.nom = "Dresseur2_Poke4", .points_de_vie = 20, .attaque = 10, .vitesse = 3}, + Pokemon{.nom = "Dresseur2_Poke5", .points_de_vie = 20, .attaque = 10, .vitesse = 3}, + Pokemon{.nom = "Dresseur2_Poke6", .points_de_vie = 20, .attaque = 10, .vitesse = 3}, +}}; +combat(dresseur1, dresseur2); +``` + +doit afficher : +``` +Tour 1: +Dresseur1_Poke1 attaque, il reste 10 PV à Dresseur2_Poke1. +Dresseur2_Poke1 attaque, il reste 0 PV à Dresseur1_Poke1. + +Dresseur2_Poke1 gagne! + +Tour 2: +Dresseur1_Poke2 attaque, il reste 0 PV à Dresseur2_Poke1. +Dresseur2_Poke1 est KO, il ne peut pas attaquer. + +Dresseur1_Poke2 gagne! + +Tour 3: +Dresseur1_Poke2 attaque, il reste 10 PV à Dresseur2_Poke2. +Dresseur2_Poke2 attaque, il reste 0 PV à Dresseur1_Poke2. + +Dresseur2_Poke2 gagne! + +etc... + +Dresseur 2 a gagné! +``` \ No newline at end of file