Menu
Coddy logo textTech

Récapitulatif - Système d'inventaire

Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 67 sur 70.

challenge icon

Défi

Facile

Construisons un système complet de gestion d'inventaire pour un jeu de rôle ! Vous allez créer une hiérarchie de types d'objets et une classe de gestion pour les organiser — en réunissant l'héritage, le polymorphisme et la composition dans un projet cohérent.

Vous organiserez votre code sur cinq fichiers :

  • Item.lua : La classe de base pour tous les objets. Chaque objet possède un name et une value (en pièces d'or). Incluez une méthode :getInfo() qui retourne une chaîne de caractères au format "{name}: {value} gold".
  • Weapon.lua : Un objet spécialisé qui hérite de Item. Les armes ont un attribut supplémentaire damage. Surchargez :getInfo() pour retourner "{name}: {value} gold, {damage} damage".
  • Potion.lua : Un autre objet spécialisé héritant de Item. Les potions ont un attribut healAmount. Surchargez :getInfo() pour retourner "{name}: {value} gold, heals {healAmount} HP".
  • Inventory.lua : Une classe de gestion qui stocke une collection d'objets. Incluez une méthode :addItem(item) pour ajouter n'importe quel type d'objet, une méthode :listItems() qui affiche :getInfo() pour chaque objet (un par ligne), et une méthode :getTotalValue() qui retourne la somme des valeurs de tous les objets.
  • main.lua : Rassemblez tout ! Créez un inventaire et remplissez-le d'objets basés sur les entrées que vous recevez. Ensuite, listez tous les objets et affichez la valeur totale de l'inventaire sur la dernière ligne.

La beauté de cette conception réside dans le polymorphisme en action — votre Inventory n'a pas besoin de savoir s'il stocke une Weapon ou une Potion. Il appelle simplement :getInfo() et chaque objet répond de manière appropriée selon son type.

Vous recevrez six entrées décrivant deux objets à ajouter :

  1. Type du premier objet ("weapon" ou "potion")
  2. Nom du premier objet
  3. Valeur du premier objet (un nombre)
  4. Type du second objet ("weapon" ou "potion")
  5. Nom du second objet
  6. Valeur du second objet (un nombre)

Pour les armes, utilisez un dommage fixe de 25. Pour les potions, utilisez un montant de soin fixe de 50.

Après avoir ajouté les deux objets, appelez :listItems() pour afficher les informations de chaque objet, puis affichez Total: {value} gold sur la dernière ligne.

Par exemple, si les entrées sont weapon, Iron Sword, 150, potion, Health Elixir, et 75, la sortie devrait être :

Iron Sword: 150 gold, 25 damage
Health Elixir: 75 gold, heals 50 HP
Total: 225 gold

Si les entrées sont potion, Mana Potion, 50, weapon, Steel Axe, et 200, la sortie devrait être :

Mana Potion: 50 gold, heals 50 HP
Steel Axe: 200 gold, 25 damage
Total: 250 gold

Essayez vous-même

-- main.lua : Rassembler tous les éléments

local Weapon = require('Weapon')
local Potion = require('Potion')
local Inventory = require('Inventory')

-- Lire les entrées pour le premier objet
local type1 = io.read()
local name1 = io.read()
local value1 = tonumber(io.read())

-- Lire les entrées pour le deuxième objet
local type2 = io.read()
local name2 = io.read()
local value2 = tonumber(io.read())

-- Valeurs fixes : les armes infligent 25 points de dégâts, les potions soignent 50 PV

-- TODO : Créer un inventaire

-- TODO : Créer le premier objet en fonction de type1 ("weapon" ou "potion")
-- et l'ajouter à l'inventaire

-- TODO : Créer le deuxième objet en fonction de type2 ("weapon" ou "potion")
-- et l'ajouter à l'inventaire

-- TODO : Appeler listItems() pour afficher les informations de chaque objet

-- TODO : Afficher "Total: {value} gold" en utilisant getTotalValue()

Toutes les leçons de Object Oriented Programming