Files
TermNSI/POO/Evaluation_POO_Piles_Files.ipynb
T
2024-11-22 08:18:20 +01:00

7.2 KiB

Évaluation sur la Programmation Orientée Objet, les Piles et les Files

Durée : 1h à 1h30


Consignes :

  1. Cette évaluation est individuelle.
  2. Chaque réponse doit être correctement commentée.
  3. Soignez la lisibilité et la clarté de votre code.

Partie 1 : Programmation Orientée Objet (10 points)

Contexte :

Un développeur de RPG (jeu de rôle) souhaite modéliser les personnages jouables de son jeu ainsi que leurs inventaires.

Travail à faire :

Implémente les classes suivantes :

  1. Classe Personnage :

    • Attributs :
      • nom (chaîne)
      • niveau (entier, par défaut 1)
      • vie (entier, par défaut 100)
      • inventaire (liste, vide par défaut)
    • Méthodes :
      • __init__ : initialise un personnage.
      • ajouter_objet(objet) : ajoute un objet dans l’inventaire.
      • afficher_inventaire() : affiche les objets dans l’inventaire.
      • subir_degats(points) : réduit les points de vie du personnage (minimum 0).
      • __str__ : affiche les informations du personnage.
  2. Classe Objet :

    • Attributs :
      • nom (chaîne)
      • rarete (chaîne : "commun", "rare", "légendaire")
    • Méthodes :
      • __init__ : initialise un objet.
      • __str__ : affiche les informations de l’objet.

Exemple d'utilisation attendu :

# Création des objets
epee = Objet("Épée magique", "rare")
potion = Objet("Potion de soin", "commun")

# Création du personnage
hero = Personnage("Link")
hero.ajouter_objet(epee)
hero.ajouter_objet(potion)

# Afficher l'inventaire et infliger des dégâts
hero.afficher_inventaire()
hero.subir_degats(30)
print(hero)

Partie 2 : Les piles (5 points)

Contexte :

Un joueur de Tetris souhaite programmer la mécanique d’empilement et de suppression des lignes complètes.

Travail à faire :

Implémente une classe Pile pour modéliser les lignes de Tetris.

  1. Attributs :
    • elements (liste vide au départ)
  2. Méthodes :
    • ajouter_ligne(valeur) : ajoute une ligne de blocs à la pile.
    • supprimer_ligne() : supprime la ligne en haut de la pile.
    • est_vide() : renvoie True si la pile est vide, sinon False.

Exemple d'utilisation attendu :

pile = Pile()
pile.ajouter_ligne("Ligne 1")
pile.ajouter_ligne("Ligne 2")
pile.supprimer_ligne()
print(pile.est_vide())  # Affiche : False

Partie 3 : Les files (5 points)

Contexte :

Un fast-food inspiré du Café Pikachu utilise une file pour gérer les commandes des clients.

Travail à faire :

Écris une classe File pour gérer les commandes.

  1. Attributs :
    • elements (liste vide au départ)
  2. Méthodes :
    • ajouter_commande(valeur) : ajoute une commande en fin de file.
    • traiter_commande() : retire et renvoie la commande en début de file.
    • est_vide() : renvoie True si la file est vide, sinon False.

Exemple d'utilisation attendu :

file = File()
file.ajouter_commande("Commande Pikachu Pancakes")
file.ajouter_commande("Commande Evoli Latte")
print(file.traiter_commande())  # Affiche : "Commande Pikachu Pancakes"
print(file.est_vide())  # Affiche : False

Partie 4 : POO – Gestion d'une arène de combat (10 points)

Contexte :

Tu es chargé(e) de coder un simulateur d’arène de combat. Deux créatures s’affrontent jusqu’à ce que l’une d’elles n’ait plus de points de vie. Chaque créature possède des attaques spécifiques et un nombre de points de vie limité.


Travail à faire :

Implémente les classes suivantes :

  1. Classe Creature :

    • Attributs :
      • nom (chaîne)
      • vie (entier, par défaut 50)
      • force (entier, par défaut 10)
    • Méthodes :
      • __init__ : initialise une créature.
      • attaquer(cible) : réduit les points de vie de la créature cible en fonction de la force de l'attaquant.
      • est_vivant() : renvoie True si les points de vie sont supérieurs à 0, sinon False.
      • __str__ : affiche les informations de la créature.
  2. Classe Combat :

    • Attributs :
      • creature1 (objet de type Creature)
      • creature2 (objet de type Creature)
    • Méthodes :
      • __init__ : initialise un combat entre deux créatures.
      • lancer_combat() : lance une boucle où chaque créature attaque l'autre jusqu'à ce qu'une des deux ne soit plus vivante. Affiche le déroulement du combat.

Exemple d'utilisation attendu :

# Création des créatures
pikachu = Creature("Pikachu", vie=35, force=12)
dracaufeu = Creature("Dracaufeu", vie=50, force=15)

# Lancement du combat
combat = Combat(pikachu, dracaufeu)
combat.lancer_combat()

Résultat attendu :

Le programme affiche un résumé des attaques et indique quelle créature a gagné :

Pikachu attaque Dracaufeu (-12 PV).
Dracaufeu attaque Pikachu (-15 PV).
Pikachu attaque Dracaufeu (-12 PV).
Dracaufeu attaque Pikachu (-15 PV).
Pikachu est KO ! Dracaufeu remporte le combat.

Barème :

  • Classe Creature : 6 points
    • Implémentation des attributs et méthodes.
  • Classe Combat : 4 points
    • Lancer une boucle et afficher le déroulement du combat.