Seite 1 von 1

Oh Gott, Datasection

Verfasst: 11.04.2005 01:51
von Mike0484
Oh Gott was hab ich mir da wieder vorgenommen :o

Kann mir einer erkläeren wie das mit "Datasection" funzt.
Hilfe hab ich durchstöbert aber das was da steht hilft mir nicht wirklich weiter. Oder noch bessser, giebt es ein Tutorial darüber ?
Ich hoffe ja das es nicht so komplitirt ist wie es aussieht :lamer:

Verfasst: 11.04.2005 02:09
von Hroudtwolf
Eine DataSection enthölt wie der Name schon sagt Daten.

z.B. DATAs

Code: Alles auswählen

for x=1 to 5
Read namen$
debug namen$
next  x

DataSection 
Data.s "Peter","Fritz","Karl","Otto","Friedrich"
EndDataSection



Oder Bilder und Sounds...
Der Vorteil hierbei ist, daß die Dateien in die Exe mit eingebunden werden.

Code: Alles auswählen

CatchImage(1,?Bild);Bild Aus der DataSection holen
CatchSound(1,?ton);Ton Aus der DataSection holen

DataSection 
Bild: IncludeBinary "DeinBild.bmp"
Ton: IncludeBinary "DeinTonDokument.wav"
EndDataSection


Verfasst: 11.04.2005 02:26
von Laurin
Ach iwo. Es ist vielleicht etwas kompliziert beschrieben, aber in der Praxis ist es einfach handzuhaben.

In einer Datasection können eine Reihe von Daten gespeichert werden, ohne Variablen zu verwenden. Die Daten können einzelne Werte, zB Zahlen, sein oder aber auch ganze Dateien. Der Vorteil ist, dass diese Daten (vorallem Dateien) alle konzentriert in deinem Programm vorliegen und nicht erst irgendwo von einer Festplatte geladen werden müssen.

Der Aufbau der Datasection ist simpel:

Code: Alles auswählen

DataSection ; Hinweis für PB, dass ab hier Daten stehen.
Data.l 299, 267, 345 ; eine Reihe von Zahlen
Data.s "Hallo", "Welt" ; zwei Strings
EndDataSection ; Hinweis für PB, dass ab hier wieder normaler Code kommt
Es gibt also einen Anfangsteil (Hier geht es los.), einen Mittelteil (Hier stehen die Daten.) und einen Endteil (Ab hier ist Schluss.).

Um die Daten in einer Datasection abzufragen, braucht man die Befehle Read und Restore. Read liest die Daten aus und rückt automatisch auf das nächste Stück Daten weiter. Restore verändert die Stelle, aber der Daten ausgelesen werden.

Code: Alles auswählen

Read Daten.s
Debug Daten.s

DataSection
Data.s "Hallo Welt!"
EndDataSection
Bei Restore muss man vorher die Stellen angeben, ab der die Daten ausgelesen werden.

Code: Alles auswählen

Restore EineZahl
Read Zahl.l
Debug Zahl.l

Restore EinText
Read Text_erstes_Element.s ; Er liest "Hallo ".
Read Text_zweites_Element.s ; Er liest "Welt!".
Debug Text.s

DataSection
EinText:
Data.s "Hallo ", "Welt!"
EineZahl:
Data.l 999
EndDataSection
Jetzt müsste das Prinzip ersichtlich sein.

Greetz Laurin

Verfasst: 11.04.2005 03:52
von Mike0484
Ok soweit hab ich es verstanden.
Aber wie kommt man dann auf sowas hier ?

Code: Alles auswählen

DataSection

;#
;#
;##
block:
Data.l -4 ; 0 - Anzahl der Varianten
Data.l 2,0,2,1,2,2,3,2
Data.l 1,1,1,2,2,1,3,1 ; 90° Rechtsdrehung
Data.l 1,0,2,0,2,1,2,2 ; ^
Data.l 3,0,3,1,1,1,2,1 ; ^

; #
; #
;##
Data.l -4
Data.l 2,0,2,1,2,2,1,2
Data.l 1,0,1,1,2,1,3,1 ; 90° Rechtsdrehung
Data.l 2,0,3,0,2,1,2,2 ; ^
Data.l 1,1,2,1,3,1,3,2 ; ^


;##
; ##
Data.l -2
Data.l 1,0,2,0,2,1,3,1
Data.l 2,0,2,1,1,1,1,2 ; 90° Drehung

; ##
;##
Data.l -2
Data.l 1,1,2,1,2,0,3,0
Data.l 1,0,1,1,2,1,2,2 ; 90° Drehung

; #
;###
Data.l -4
Data.l 2,1,1,2,2,2,3,2
Data.l 2,0,2,1,2,2,3,1 ; 90° Rechtsdrehung
Data.l 1,1,2,1,3,1,2,2 ; ^
Data.l 2,0,2,1,2,2,1,1 ; ^


;##
;##
Data.l -1
Data.l 1,0,2,0,1,1,2,1


;#
;#
;#
;#
Data.l -2
Data.l 1,0,1,1,1,2,1,3
Data.l 0,1,1,1,2,1,3,1 ; 90° Drehung

EndDataSection

Ist ein teil aus einem Tetris Game
Aber als ich versucht hab nachzufolzihen was der da gemacht hat, hab ich bestimt so :shock: :o :? gekuckt

Edit by Kiffi: Code-Tags gesetzt

Verfasst: 11.04.2005 11:55
von Laurin
So ganz wird mir das auch nicht ersichtlich. Kannst du noch den Code posten, wo er das Zeugs ausliest?

Verfasst: 11.04.2005 12:52
von Mike0484
yep hier ist der teil,
wie gesagt ich komme da garnicht mit.

Code: Alles auswählen


Procedure stein_laden(art.l,spin.l,laden.l)
  ; Steinfeld2 in Steinfeld1 schreiben
  For x = 0 To 3
    For y = 0 To 3
      If laden
        Steinfeld(x,y)=Steinfeld2(x,y)
        Steinfeld2(x,y)=0 ; Steinfeld2 zum neubeschreiben löschen
        steinspin=1
      Else
        Steinfeld(x,y)=0
      EndIf 
    Next
  Next
  
  
  ; Block laden
  Restore block
  Repeat
    Read var
    If var < 0 ; var<0 = Trennzeichen und -Anzahl der Varianten
      varcount+1
    EndIf
    If varcount = art
      spintemp = 1 
      
      ; Anzahl der Varianten des Blocks. Ist der angegebene spin höher als die
      ; verfügbaren Varianten -var, wird dies geregelt.
      If spin > -var
        spin=(spin-1)%-var+1
      EndIf 
      
      ; Bis zur ausgewählten Variante gehen
      If spintemp <> spin 
        Repeat
          For i = 0 To 7
            Read x
          Next
          spintemp + 1
        Until spintemp = spin
      EndIf 
      
      ; Neuen Stein einlesen
      For i = 0 To 3
        Read x
        Read y
        If laden
          Steinfeld2(x,y)=1
        Else
          Steinfeld(x,y)=1
        EndIf
      Next
      
      Break
    EndIf
  ForEver 
EndProcedure

Edit by Kiffi: Code-Tags gesetzt

Verfasst: 11.04.2005 13:06
von Kiffi
> yep hier ist der teil,

@Mike0484: Kannst Du Dir bitte angewöhnen, Code-Tags zu setzen?
Ich habe keinen Bock, den ganzen Tag Deine Postings zu korrigieren.

Grüße ... Kiffi

Verfasst: 11.04.2005 13:43
von Mike0484
natürlich, werde beim nächsten mal dran denken :mrgreen: