Lors de la programmation d'un jeu par exemple, on désire créer des personnages (comme Espion, cf ici) et stocker leurs caractéristiques en mémoire. Cependant, Espion n'utilise pas les collections d'objets personnalisés pour la simple et bonne raison que je ne connaissais pas ce procédé lorsque j'ai programmé ce jeu.
L'utilisation d'une collection d'objets personnalisée simplifie grandement la compréhension du code et la rapidité en mémoire. Je vais illustrer ce procédé par la programmation d'un jeu type Espion (mais un peu différent...).
On désire créer les personnages : le héros et les ennemis ainsi :
Héros Ennemi Points de vie Points de vie Position dans le tableau de jeu Position dans le tableau de jeu Possède une arme ? Vitesse de déplacement Quantité de munitions Points accumulés Direction du déplacement On peut stocker dans des variables publiques toutes ces propriétés ainsi : une variable pour chaque propriété du héros, une variable tableau dynamique pour chaque propriétés des ennemis. Cependant, ceci devient très compliqué et une autre méthode s'impose :
On aura besoin de définir un nouveau type de variable pour la direction du héros (haut, bas, gauche ou droite), pour l'arme possédée (aucune, ak47, kalachnikov, deserteagle50, sniper).
Pour cela, on utilise la commande Enum comme suit :
Enum Direct
Haut
Bas
Gauche
Droite
End EnumEnum Arme
Aucune
Couteau
DesertEagle
AK47
M51
Mauser
Rocket
Grenade
End EnumDès lors, quand on définit une variable comme étant de type Arme, on a :
L'intérêt de cette définition de variable n'est alors plus à démontrer ! De plus, si besoin, on peut attribuer une valeur numérique à chaque possibilité dans l'énumération :
Enum Direct
Haut = 0
Bas = 1
Gauche = 2
Droite = 3
End EnumEnum Arme
Aucune = 0
Couteau = 1
DesertEagle = 2
AK47 = 3
M51 = 4
Mauser = 5
Rocket = 6
Grenade = 7
End EnumOn va ensuite définir une collection d'objet personnalisée :
Héros Type var Ennemi Points de vie Entier Points de vie Position dans le tableau de jeu Entier Position dans le tableau de jeu Possède une arme ? Entier (Arme) Vitesse de déplacement Quantité de munitions Entier Points accumulés Entier (Direct) Direction du déplacement Pour cela, on définit comme objets personnalisés Ennemi et Héro comme suit :
Type Hero
PointsDeVie As Integer
Position As Integer
Vitesse As Integer
Direction As Direct
Arme As Arme
End TypeType Ennemi
PointsDeVie As Integer
Position As Integer
Vitesse As Integer
Direction As Direct
End TypeOn peut alors créer autant de héros ou d'ennemis que l'on veut à l'aide de Dim Espion As Hero. On accède ensuite très facilement à ses propriétés ainsi :