Primo, je ne suis pas trop sûr de comprendre le pourquoi d'avoir 3 structures différentes avec les champs identiques.
Deusio, je vois pas l'intérêt d'utiliser des variables globales pour donner un nom pour les différents indices de tableau. Les constantes sont plus appropriées pour cette tâche.
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Ar-S - Projet Ogma
; Nom du fichier : Ogma.pb
; Version du fichier : 1.0.0
; Programmation : En cours
; Programmé par : Guimauve
; Date : 20-06-2011
; Mise à jour : 20-06-2011
; Code PureBasic : 4.50
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Constantes de dimensionnement <<<<<
Enumeration
#OGMA_ETAT_DODO
#OGMA_ETAT_NEUTRE
#OGMA_ETAT_CONTENT
#OGMA_ETAT_TRISTE
#OGMA_ETAT_COLERE
; AJOUTER D'AUTRE ÉTATS SI NÉCESSAIRE
; AVANT LA CONSTANTE #OGMA_ETAT_MAX.
; CELA VA AJUSTER LA TAILLE DES TABLEAUX
; AUTOMATIQUEMENT.
#OGMA_ETAT_MAX
EndEnumeration
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration des Structures <<<<<
Structure Info
Couleur.l
PosX.l
PosY.l
TailleX.l
TailleY.l
Rayon.l
EndStructure
Structure Ogma
Tete.Info[#OGMA_ETAT_MAX]
Yeux.Info[#OGMA_ETAT_MAX]
Bouche.Info[#OGMA_ETAT_MAX]
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetInfoCouleur(InfoA)
InfoA\Couleur
EndMacro
Macro GetInfoPosX(InfoA)
InfoA\PosX
EndMacro
Macro GetInfoPosY(InfoA)
InfoA\PosY
EndMacro
Macro GetInfoTailleX(InfoA)
InfoA\TailleX
EndMacro
Macro GetInfoTailleY(InfoA)
InfoA\TailleY
EndMacro
Macro GetInfoRayon(InfoA)
InfoA\Rayon
EndMacro
Macro GetOgmaTete(OgmaA, EtatID)
OgmaA\Tete[EtatID]
EndMacro
Macro GetOgmaYeux(OgmaA, EtatID)
OgmaA\Yeux[EtatID]
EndMacro
Macro GetOgmaBouche(OgmaA, EtatID)
OgmaA\Bouche[EtatID]
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetInfoCouleur(InfoA, P_Couleur)
GetInfoCouleur(InfoA) = P_Couleur
EndMacro
Macro SetInfoPosX(InfoA, P_PosX)
GetInfoPosX(InfoA) = P_PosX
EndMacro
Macro SetInfoPosY(InfoA, P_PosY)
GetInfoPosY(InfoA) = P_PosY
EndMacro
Macro SetInfoTailleX(InfoA, P_TailleX)
GetInfoTailleX(InfoA) = P_TailleX
EndMacro
Macro SetInfoTailleY(InfoA, P_TailleY)
GetInfoTailleY(InfoA) = P_TailleY
EndMacro
Macro SetInfoRayon(InfoA, P_Rayon)
GetInfoRayon(InfoA) = P_Rayon
EndMacro
Macro SetOgmaTete(OgmaA, EtatID, P_Tete)
GetOgmaTete(OgmaA, EtatID) = P_Tete
EndMacro
Macro SetOgmaYeux(OgmaA, EtatID, P_Yeux)
GetOgmaYeux(OgmaA, EtatID) = P_Yeux
EndMacro
Macro SetOgmaBouche(OgmaA, EtatID, P_Bouche)
GetOgmaBouche(OgmaA, EtatID) = P_Bouche
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Update <<<<<
Macro UpdateOgmaTeteInfo(OgmaA, EtatID, P_Couleur, P_PosX, P_PosY, P_TailleX, P_TailleY, P_Rayon)
SetInfoCouleur(GetOgmaTete(OgmaA, EtatID), P_Couleur)
SetInfoPosX(GetOgmaTete(OgmaA, EtatID), P_PosX)
SetInfoPosY(GetOgmaTete(OgmaA, EtatID), P_PosY)
SetInfoTailleX(GetOgmaTete(OgmaA, EtatID), P_TailleX)
SetInfoTailleY(GetOgmaTete(OgmaA, EtatID), P_TailleY)
SetInfoRayon(GetOgmaTete(OgmaA, EtatID), P_Rayon)
EndMacro
Macro UpdateOgmaYeuxInfo(OgmaA, EtatID, P_Couleur, P_PosX, P_PosY, P_TailleX, P_TailleY, P_Rayon)
SetInfoCouleur(GetOgmaYeux(OgmaA, EtatID), P_Couleur)
SetInfoPosX(GetOgmaYeux(OgmaA, EtatID), P_PosX)
SetInfoPosY(GetOgmaYeux(OgmaA, EtatID), P_PosY)
SetInfoTailleX(GetOgmaYeux(OgmaA, EtatID), P_TailleX)
SetInfoTailleY(GetOgmaYeux(OgmaA, EtatID), P_TailleY)
SetInfoRayon(GetOgmaYeux(OgmaA, EtatID), P_Rayon)
EndMacro
Macro UpdateOgmaBoucheInfo(OgmaA, EtatID, P_Couleur, P_PosX, P_PosY, P_TailleX, P_TailleY, P_Rayon)
SetInfoCouleur(GetOgmaBouche(OgmaA, EtatID), P_Couleur)
SetInfoPosX(GetOgmaBouche(OgmaA, EtatID), P_PosX)
SetInfoPosY(GetOgmaBouche(OgmaA, EtatID), P_PosY)
SetInfoTailleX(GetOgmaBouche(OgmaA, EtatID), P_TailleX)
SetInfoTailleY(GetOgmaBouche(OgmaA, EtatID), P_TailleY)
SetInfoRayon(GetOgmaBouche(OgmaA, EtatID), P_Rayon)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Initialisation des données <<<<<
Declare.Ogma MonOgma
UpdateOgmaTeteInfo(MonOgma, #OGMA_ETAT_DODO, RGB(255,255, 20), 25, 25, 64, 64, 32)
UpdateOgmaTeteInfo(MonOgma, #OGMA_ETAT_NEUTRE, RGB(255, 255, 000), 25, 25, 64, 64, 32)
UpdateOgmaTeteInfo(MonOgma, #OGMA_ETAT_CONTENT, RGB(255,255, 000), 25, 25, 64, 64, 32)
UpdateOgmaTeteInfo(MonOgma, #OGMA_ETAT_TRISTE, RGB(128, 142, 141), 25, 25, 64, 64, 32)
UpdateOgmaTeteInfo(MonOgma, #OGMA_ETAT_COLERE, RGB(255, 000, 000), 25, 25, 64, 64, 32)
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<