{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "75db6ded",
   "metadata": {},
   "source": [
    "\n",
    "# Évaluation sur la Programmation Orientée Objet, les Piles et les Files\n",
    "\n",
    "### Durée : 1h à 1h30\n",
    "\n",
    "---\n",
    "\n",
    "## Consignes :\n",
    "1. Cette évaluation est individuelle.\n",
    "2. Chaque réponse doit être correctement commentée.\n",
    "3. Soignez la lisibilité et la clarté de votre code.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09af4f46",
   "metadata": {},
   "source": [
    "\n",
    "## Partie 1 : Programmation Orientée Objet (10 points)\n",
    "\n",
    "### Contexte :\n",
    "Un développeur de RPG (jeu de rôle) souhaite modéliser les personnages jouables de son jeu ainsi que leurs inventaires.\n",
    "\n",
    "### Travail à faire :\n",
    "Implémente les classes suivantes :\n",
    "\n",
    "1. **Classe `Personnage`** :\n",
    "   - Attributs : \n",
    "     - `nom` (chaîne)\n",
    "     - `niveau` (entier, par défaut 1)\n",
    "     - `vie` (entier, par défaut 100)\n",
    "     - `inventaire` (liste, vide par défaut)\n",
    "   - Méthodes :\n",
    "     - `__init__` : initialise un personnage.\n",
    "     - `ajouter_objet(objet)` : ajoute un objet dans l’inventaire.\n",
    "     - `afficher_inventaire()` : affiche les objets dans l’inventaire.\n",
    "     - `subir_degats(points)` : réduit les points de vie du personnage (minimum 0).\n",
    "     - `__str__` : affiche les informations du personnage.\n",
    "\n",
    "2. **Classe `Objet`** :\n",
    "   - Attributs :\n",
    "     - `nom` (chaîne)\n",
    "     - `rarete` (chaîne : \"commun\", \"rare\", \"légendaire\")\n",
    "   - Méthodes :\n",
    "     - `__init__` : initialise un objet.\n",
    "     - `__str__` : affiche les informations de l’objet.\n",
    "\n",
    "### Exemple d'utilisation attendu :\n",
    "```python\n",
    "# Création des objets\n",
    "epee = Objet(\"Épée magique\", \"rare\")\n",
    "potion = Objet(\"Potion de soin\", \"commun\")\n",
    "\n",
    "# Création du personnage\n",
    "hero = Personnage(\"Link\")\n",
    "hero.ajouter_objet(epee)\n",
    "hero.ajouter_objet(potion)\n",
    "\n",
    "# Afficher l'inventaire et infliger des dégâts\n",
    "hero.afficher_inventaire()\n",
    "hero.subir_degats(30)\n",
    "print(hero)\n",
    "```\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6769bdf1",
   "metadata": {},
   "source": [
    "\n",
    "## Partie 2 : Les piles (5 points)\n",
    "\n",
    "### Contexte :\n",
    "Un joueur de Tetris souhaite programmer la mécanique d’empilement et de suppression des lignes complètes.\n",
    "\n",
    "### Travail à faire :\n",
    "Implémente une classe `Pile` pour modéliser les lignes de Tetris.\n",
    "\n",
    "1. Attributs :\n",
    "   - `elements` (liste vide au départ)\n",
    "2. Méthodes :\n",
    "   - `ajouter_ligne(valeur)` : ajoute une ligne de blocs à la pile.\n",
    "   - `supprimer_ligne()` : supprime la ligne en haut de la pile.\n",
    "   - `est_vide()` : renvoie `True` si la pile est vide, sinon `False`.\n",
    "\n",
    "### Exemple d'utilisation attendu :\n",
    "```python\n",
    "pile = Pile()\n",
    "pile.ajouter_ligne(\"Ligne 1\")\n",
    "pile.ajouter_ligne(\"Ligne 2\")\n",
    "pile.supprimer_ligne()\n",
    "print(pile.est_vide())  # Affiche : False\n",
    "```\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1544315c",
   "metadata": {},
   "source": [
    "\n",
    "## Partie 3 : Les files (5 points)\n",
    "\n",
    "### Contexte :\n",
    "Un fast-food inspiré du **Café Pikachu** utilise une file pour gérer les commandes des clients.\n",
    "\n",
    "### Travail à faire :\n",
    "Écris une classe `File` pour gérer les commandes.\n",
    "\n",
    "1. Attributs :\n",
    "   - `elements` (liste vide au départ)\n",
    "2. Méthodes :\n",
    "   - `ajouter_commande(valeur)` : ajoute une commande en fin de file.\n",
    "   - `traiter_commande()` : retire et renvoie la commande en début de file.\n",
    "   - `est_vide()` : renvoie `True` si la file est vide, sinon `False`.\n",
    "\n",
    "### Exemple d'utilisation attendu :\n",
    "```python\n",
    "file = File()\n",
    "file.ajouter_commande(\"Commande Pikachu Pancakes\")\n",
    "file.ajouter_commande(\"Commande Evoli Latte\")\n",
    "print(file.traiter_commande())  # Affiche : \"Commande Pikachu Pancakes\"\n",
    "print(file.est_vide())  # Affiche : False\n",
    "```\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e12e449",
   "metadata": {},
   "source": [
    "\n",
    "## Partie 4 : POO – Gestion d'une arène de combat (10 points)\n",
    "\n",
    "### Contexte :\n",
    "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é.\n",
    "\n",
    "---\n",
    "\n",
    "### Travail à faire :\n",
    "Implémente les classes suivantes :\n",
    "\n",
    "1. **Classe `Creature`** :\n",
    "   - Attributs :\n",
    "     - `nom` (chaîne)\n",
    "     - `vie` (entier, par défaut 50)\n",
    "     - `force` (entier, par défaut 10)\n",
    "   - Méthodes :\n",
    "     - `__init__` : initialise une créature.\n",
    "     - `attaquer(cible)` : réduit les points de vie de la créature cible en fonction de la force de l'attaquant.\n",
    "     - `est_vivant()` : renvoie `True` si les points de vie sont supérieurs à 0, sinon `False`.\n",
    "     - `__str__` : affiche les informations de la créature.\n",
    "\n",
    "2. **Classe `Combat`** :\n",
    "   - Attributs :\n",
    "     - `creature1` (objet de type `Creature`)\n",
    "     - `creature2` (objet de type `Creature`)\n",
    "   - Méthodes :\n",
    "     - `__init__` : initialise un combat entre deux créatures.\n",
    "     - `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.\n",
    "\n",
    "---\n",
    "\n",
    "### Exemple d'utilisation attendu :\n",
    "```python\n",
    "# Création des créatures\n",
    "pikachu = Creature(\"Pikachu\", vie=35, force=12)\n",
    "dracaufeu = Creature(\"Dracaufeu\", vie=50, force=15)\n",
    "\n",
    "# Lancement du combat\n",
    "combat = Combat(pikachu, dracaufeu)\n",
    "combat.lancer_combat()\n",
    "```\n",
    "\n",
    "---\n",
    "\n",
    "### Résultat attendu :\n",
    "Le programme affiche un résumé des attaques et indique quelle créature a gagné :\n",
    "```\n",
    "Pikachu attaque Dracaufeu (-12 PV).\n",
    "Dracaufeu attaque Pikachu (-15 PV).\n",
    "Pikachu attaque Dracaufeu (-12 PV).\n",
    "Dracaufeu attaque Pikachu (-15 PV).\n",
    "Pikachu est KO ! Dracaufeu remporte le combat.\n",
    "```\n",
    "\n",
    "---\n",
    "\n",
    "### Barème :\n",
    "- **Classe `Creature`** : 6 points\n",
    "  - Implémentation des attributs et méthodes.\n",
    "- **Classe `Combat`** : 4 points\n",
    "  - Lancer une boucle et afficher le déroulement du combat.\n"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
