Menu
Coddy logo textTech

Récapitulatif - Système d'inventaire

Fait partie de la section Programmation orientée objet 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 ! Tu vas créer une hiérarchie de types d'objets et une classe gestionnaire pour les organiser : réunissant l'héritage, le polymorphisme et la composition dans un seul projet cohérent.

Tu organiseras ton 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). Inclus une méthode :getInfo() qui renvoie une chaîne au format "{name}: {value} gold".
  • Weapon.lua : un objet spécialisé qui hérite de Item. Les armes possèdent un attribut damage supplémentaire. Redéfinis :getInfo() pour renvoyer "{name}: {value} gold, {damage} damage".
  • Potion.lua : un autre objet spécialisé qui hérite de Item. Les potions possèdent un attribut healAmount. Redéfinis :getInfo() pour renvoyer "{name}: {value} gold, heals {healAmount} HP".
  • Inventory.lua : une classe gestionnaire qui stocke une collection d'objets. Inclus 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 renvoie la somme des valeurs de tous les objets.
  • main.lua : rassemble tout ! Crée un inventaire et remplis-le avec des objets en fonction des entrées reçues. Ensuite, liste tous les objets et affiche la valeur totale de l'inventaire sur la dernière ligne.

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

Tu recevras 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 deuxième objet ("weapon" ou "potion")
  5. Nom du deuxième objet
  6. Valeur du deuxième objet (un nombre)

Pour les armes, utilise des dégâts fixes de 25. Pour les potions, utilise une valeur de soin fixe de 50.

Après avoir ajouté les deux objets, appelle :listItems() pour afficher les informations de chaque objet, puis affiche 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 le tout

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 second objet
local type2 = io.read()
local name2 = io.read()
local value2 = tonumber(io.read())

-- Valeurs fixes : les armes ont 25 de dégâts, les potions soignent 50 HP

-- TODO: Créer un inventaire

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

-- TODO: Créer le second objet en fonction de type2 ("weapon" or "potion")
-- et l'ajouter à l'inventaire

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

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

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur Lua en ligne