PureBasic     Discussion     Modifier     Historique     Forums     Salon IRC

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

 

Rechercher
Installer l'extension de recherche Plus d'informations

 

Comprendre
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

 

Partager
La connaissance est la seule chose qui s'accroit lorsqu'on la partage. - Sacha Boudjema

 

Créer
L'imagination est plus importante que la connaissance. - Albert Einstein

 

 

Le wiki en images Le wiki en images Image du mois: «Snowball: un prototype de jeu développé avec NeL.