Tiens, essai donc ce code pour voir si ça fait l'affaire.
Et donne des nouvelles.
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure Map
Element.w
Light.w
state.b
Image.w
Delay.l
Info.s
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetMapElement(MapA, Element_Word)
MapA\Element = Element_Word
EndMacro
Macro SetMapLight(MapA, Light_Word)
MapA\Light = Light_Word
EndMacro
Macro SetMapstate(MapA, state_Byte)
MapA\state = state_Byte
EndMacro
Macro SetMapImage(MapA, Image_Word)
MapA\Image = Image_Word
EndMacro
Macro SetMapDelay(MapA, Delay_Long)
MapA\Delay = Delay_Long
EndMacro
Macro SetMapInfo(MapA, Info_String)
MapA\Info = Info_String
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetMapElement(MapA)
MapA\Element
EndMacro
Macro GetMapLight(MapA)
MapA\Light
EndMacro
Macro GetMapstate(MapA)
MapA\state
EndMacro
Macro GetMapImage(MapA)
MapA\Image
EndMacro
Macro GetMapDelay(MapA)
MapA\Delay
EndMacro
Macro GetMapInfo(MapA)
MapA\Info
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Update <<<<<
Macro UpdateMap(MapA, Element_Word, Light_Word, state_Byte, Image_Word, Delay_Long, Info_String)
SetMapElement(MapA, Element_Word)
SetMapLight(MapA, Light_Word)
SetMapstate(MapA, state_Byte)
SetMapImage(MapA, Image_Word)
SetMapDelay(MapA, Delay_Long)
SetMapInfo(MapA, Info_String)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Lecture fichier Binaire <<<<<
Procedure ReadMap(FileID.l, *MapA.Map)
SetMapElement(*MapA, ReadWord(FileID))
SetMapLight(*MapA, ReadWord(FileID))
SetMapstate(*MapA, ReadByte(FileID))
SetMapImage(*MapA, ReadWord(FileID))
SetMapDelay(*MapA, ReadLong(FileID))
SetMapInfo(*MapA, Space(ReadLong(FileID)))
ReadData(FileID, @GetMapInfo(*MapA), Len(GetMapInfo(*MapA)))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Écriture fichier Binaire <<<<<
Procedure WriteMap(FileID.l, *MapA.Map)
WriteWord(FileID, GetMapElement(*MapA))
WriteWord(FileID, GetMapLight(*MapA))
WriteByte(FileID, GetMapstate(*MapA))
WriteWord(FileID, GetMapImage(*MapA))
WriteLong(FileID, GetMapDelay(*MapA))
WriteLong(FileID, Len(GetMapInfo(*MapA)))
WriteData(FileID, @GetMapInfo(*MapA), Len(GetMapInfo(*MapA)))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Lecture d'un tableau dynamique dans le fichier en cours <<<<<
Procedure ReadDynamicArrayOfMap(FileID.l, Array.Map(1))
Array_Max.l = ReadLong(FileID)
Redim Array.Map(Array_Max)
For Index = 0 To Array_Max
ReadMap(FileID, Array(Index))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Écriture d'un tableau dynamique dans le fichier en cours <<<<<
Procedure WriteDynamicArrayOfMap(FileID.l, Array.Map(1))
WriteLong(FileID, (PeekL(@Array() - 8) - 1))
For Index = 0 To (PeekL(@Array() - 8) - 1)
WriteMap(FileID, Array(Index))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Macro de déboguage <<<<<
Macro DebugMap(MapA)
Debug GetMapElement(MapA)
Debug GetMapLight(MapA)
Debug GetMapstate(MapA)
Debug GetMapImage(MapA)
Debug GetMapDelay(MapA)
Debug GetMapInfo(MapA)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.047 secondes <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< On crée un tableau de map <<<<<
Dim TableauMap.Map(3)
Dim TableauMap2.Map(3) ; Lui c'est pour le test de chargement seulement
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< On initalise le tableau de map <<<<<
UpdateMap(TableauMap(0), 55, 1, 0, 25, 150, "Montagne")
UpdateMap(TableauMap(1), 56, 5, 0, 26, 115, "Océan")
UpdateMap(TableauMap(2), 57, 3, 0, 27, 175, "Fleuve")
UpdateMap(TableauMap(3), 58, 2, 0, 28, 132, "Champs")
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< On debug pour voir si l'initialisation à marché <<<<<
Debug "========================================="
Debug "Les données originales"
Debug ""
For Index = 0 To 3
Debug "La map no. = " + Str(Index)
DebugMap(TableauMap(Index))
Debug ""
Next
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Création du fichier data <<<<<
If CreateFile(0, "Maps.data")
WriteDynamicArrayOfMap(0, TableauMap())
CloseFile(0)
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Création du fichier pack <<<<<
If CreatePack("Maps.pack")
AddPackFile("Maps.data", 9)
ClosePack()
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Ouverture du fichier pack <<<<<
If OpenPack("Maps.pack")
Memory = NextPackFile()
MemorySize = PackFileSize()
; On créer le fichier
If CreateFile(0, "Maps2.data")
WriteData(0, Memory, MemorySize)
CloseFile(0)
Success.b = #True
EndIf
If OpenFile(1, "Maps2.data")
ReadDynamicArrayOfMap(1, TableauMap2())
CloseFile(1)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; On a lu les données, on détruit le fichier. On a une
; copie dans le fichier pack, de toute façon.
DeleteFile("Maps2.data")
EndIf
ClosePack()
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< On debug pour voir si la décompression à marché <<<<<
Debug "========================================="
Debug "Décompression du fichier pack"
Debug ""
For Index = 0 To 3
Debug "La map no. = " + Str(Index)
DebugMap(TableauMap2(Index))
Debug ""
Next
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<