PureBasic:Les datas comment ça marche
Un article de Games Creators Network.
PureBasic:Les datas comment ça marche
<< Précédent | Sommaire | Suivant >>
Sommaire |
[modifier] Introduction
PureBasic autorise l'utilisation de données pour stocker des blocs d'informations prédéfinies dans votre programme. Ceci est utile pour disposer de valeurs par défaut (messages textuels par exemple) ou dans un jeu pour définir le cheminement prédéfini d'un sprite.
[modifier] Premier exemple
;Les datas permettent de stocker des données dans le programme ;On peut remplacer les datas par un fichier , c'est juste une autre façon d'accéder à des données. For a = 1 To 4 Read Texte$ Debug Texte$ Next For a = 1 To 4 Read Nombre Debug Nombre Next ;Maintenant si je veux lire à nouveau les données Fruits , ;j'ai besoin de me replacer en début de zone avec la commande Restore ;Essayez de la supprimer, quel est le message d'erreur ? Restore Fruits For a = 1 To 4 Read Texte$ Debug Texte$ Next DataSection Fruits: Data.s "Banane", "Ananas", "Pomme", "Poire" Valeurs: Data.l 34, 56, 78, 98 EndDataSection
[modifier] Deuxième exemple
Vous pouvez utiliser les datas pour construire simplement un niveau dans un jeu. Par exemple pour un casse briques. Chaque data représente l'emplacement d'une brique et son numéro correspond soit à un sprite, ou dans notre exemple à une couleur.
;Construction d'un niveau pour un casse briques
OpenConsole()
EnableGraphicalConsole(1)
For ligne = 1 To 4
For colonne = 1 To 6
Read Sprite
If Sprite
ConsoleLocate(colonne, ligne)
ConsoleColor(0,Sprite)
Print(" ")
EndIf
Next colonne
Next ligne
Input()
DataSection
; Renseignez ici les données pour la construction du niveau
Data.l 3,3,2,2,3,3
Data.l 0,3,8,7,3,0
Data.l 0,3,7,8,3,0
Data.l 0,0,2,2,0,0
EndDataSection
[modifier] Accès à la mémoire des datas
Il est parfaitement possible de modifier les datas à tout moment dans le programme.
Il suffit d'utiliser les commandes qui agissent sur la mémoire comme PokeL() si les datas sont des longs , ou PokeQ() si c'est des quads(64 bits) ou encore PokeF() pour des flottants, je n'énumère pas ici toute la liste mais sachez qu'il y en a d'autres, consultez la documentation.
La commande PokeL() a besoin d'une adresse, et d'une valeur.
L'adresse d'un label s'écrit ?Label , dans l'exemple qui suit le label est 'valeurs'.
Donc il faut écrire :
- PokeL(?Valeurs, Nombre) pour modifier la valeur de la première donnée.
Pour modifier la valeur de la troisème donnée, vous pouvez écrire :
- PokeL(?Valeurs + SizeOf(Long) * 2, Nombre)
Debug "Datas avant modification" ;Affiche les datas For a = 1 To 4 Read Nombre Debug Nombre Next ; Modifie la première DATA PokeL(?Valeurs, 45) Debug "Changement de la première donnée" ;Et affiche à nouveau le résultat Restore Valeurs For a = 1 To 4 Read Nombre Debug Nombre Next ;Pour changer la deuxième donnée PokeL(?Valeurs + SizeOf(Long), 99) Debug "Changement de la deuxième donnée" ;Et affiche à nouveau le résultat Restore Valeurs For a = 1 To 4 Read Nombre Debug Nombre Next DataSection Valeurs: Data.l 34, 56, 78, 98 EndDataSection
Et bien sûr on peut obtenir le même résultat en utilisant un pointeur.
Define *Pointeur.long *Pointeur = ?Valeurs ; Le pointeur pointe sur le label Valeurs Debug "Datas avant modification" ;Affiche les datas For a = 1 To 4 Read Nombre Debug Nombre Next ; Modifie la première DATA *Pointeur\l = 45 ; Modifie le contenu de l'adresse pointée par *Pointeur Debug "Changement de la première donnée" ;Et affiche à nouveau le résultat Restore Valeurs For a = 1 To 4 Read Nombre Debug Nombre Next ;Pour changer la deuxième donnée *Pointeur + SizeOf(Long) ; Déplace le *pointeur de la taille d'une donnée , ici c'est des long *Pointeur\l = 99 Debug "Changement de la deuxième donnée" ;Et affiche à nouveau le résultat Restore Valeurs For a = 1 To 4 Read Nombre Debug Nombre Next DataSection Valeurs: Data.l 34, 56, 78, 98 EndDataSection

