salut
j'ai fait des inventaires pour mes jeux, et c'est souvent le même principe.
Ce n'est pas compliqué

.
Tu peux utiliser une list() ou un tableau (array).
En général, j'utilise un tableau, car c'est facile de récupérer son id et de le gérer, on peut aussi le trier facilement, etc...
Un petit exemple vite fait (tu peux juste sélectionner l'objet, mais une fois que tu as son identifiant (id), tu fais ce que tu veux avec :
Code : Tout sélectionner
; exemple jeu : inventaire basic
Structure sObj
name$
id.w ; l'identifiant de ton objet, avec cette id, tu vas chercher dans un fichier texte ses caractéristiques
image.i ; l'image qu'on va utiliser pour cette
nb.w ; le nombre d'objet de cet type qu'on a
Type.a ; le type d'objet (exemple 0 = ressource, 1= arme, 2 = armure, etc...
; tu peux ajouter des caractéristiques pour ton objet si tu veux.
EndStructure
; on créé le tableau pour afficher les objets :
Global Dim MesObjets.sObj(0), NbObj = -1
; je mets nbObj à -&, car un tableau a toujours un element (le 0), or, au départ, nous on n'a aucun objet.
Procedure UpdateInventory()
Shared ObjID
; on update l'inventaire
b=2
s = 64 +b*2 ;(taille de l'icone de l'objet+ l'espace)
; 3 lignes x 6 colonnes = 18
If StartDrawing(CanvasOutput(0))
Box(0,0,6*s,3*s,RGB(100,100,100))
For i=0 To 17
; on calcule la position de l'image
x = Mod(i,6)*s +b
y = (i/6)*s+b
Box(x,y,s-b,s-b,RGB(150,150,150))
Next
; on va dessiner les images
DrawingMode(#PB_2DDrawing_AlphaBlend)
For i=0 To ArraySize(MesObjets())
; on calcule la position de l'image
x = Mod(i,6)*s+b
y = (i/6)*s+b
DrawAlphaImage(ImageID(MesObjets(i)\image), x, y)
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(x+5,y+s-20,Str(MesObjets(i)\nb))
If objID=i
DrawingMode(#PB_2DDrawing_Outlined)
Box(x+b/2,y+b/2,s-b*2,s-b*2,RGBA(100,0,0,200))
EndIf
Next
StopDrawing()
EndIf
EndProcedure
Procedure EventInventory()
Shared ObjID
; b = espace entre 2 case
b=2
s = 64+b*2 ; taille total d'une case
id = objId
If EventType() = #PB_EventType_LeftButtonDown
If StartDrawing(CanvasOutput(0))
x = GetGadgetAttribute(0, #PB_Canvas_MouseX)
y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
; on va vérifier si on a cliqué sur un objet
If x<=6*s And y<=3*s
; on vérifie l'id de l'objet
Id = x/s+ (y/s)*6
EndIf
StopDrawing()
; s'il a changé, on va update
If objid<>Id
ObjID = id
UpdateInventory()
EndIf
EndIf
ElseIf (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(0, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
If StartDrawing(CanvasOutput(0))
x = GetGadgetAttribute(0, #PB_Canvas_MouseX)
y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
; tu peux bouger l'objet ou faire ce que tu veux
StopDrawing()
EndIf
EndIf
EndProcedure
Procedure AddObjectToInventaire(id, nb)
; on verifie si on a l'objet dans l'inventaire
For i=0 To ArraySize(MesObjets())
ok = 0
If id = MesObjets(i)\id
; on l'a déjà
ok = 1
MesObjets(i)\nb + nb
Break
EndIf
Next
; si on ne l'a pas, on ajoute l'objet et son nombre
If ok = 0
; on ajoute l'obvjet
NbObj+1
i = NbObj
ReDim MesObjets(i)
With MesObjets(i)
\id = id
\nb = nb
; je créé l'image pour l'inventaire, mais on devrait utiliser l'icone de l'objet (un png par exemple)
s=64
\image = CreateImage(#PB_Any, s,s, 32, #PB_Image_Transparent)
If StartDrawing(ImageOutput(\image))
DrawingMode(#PB_2DDrawing_AlphaBlend)
Circle(s/2,s/2,S/2-2, RGBA(100+Random(155),100+Random(155),100+Random(155),255))
StopDrawing()
EndIf
EndWith
EndIf
EndProcedure
w=1024
h=768
If OpenWindow(0, 0, 0, w, h, "Inventory", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 10, w, h)
For i = 0 To 15
AddObjectToInventaire(i, 1+Random(4))
Next
UpdateInventory()
Repeat
Event = WaitWindowEvent(1)
If Event = #PB_Event_Gadget
Select EventGadget()
Case 0
EventInventory()
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
par contre, peut etre que ce mesasge aurait été mieux dans "jeu" ou dans "débutant" (c'est pour les questions)
A+