Oh Gott, Datasection

Anfängerfragen zum Programmieren mit PureBasic.
Mike0484
Beiträge: 28
Registriert: 26.03.2005 16:10

Oh Gott, Datasection

Beitrag 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:
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag 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

Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Mike0484
Beiträge: 28
Registriert: 26.03.2005 16:10

Beitrag 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
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

So ganz wird mir das auch nicht ersichtlich. Kannst du noch den Code posten, wo er das Zeugs ausliest?
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Mike0484
Beiträge: 28
Registriert: 26.03.2005 16:10

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
Mike0484
Beiträge: 28
Registriert: 26.03.2005 16:10

Beitrag von Mike0484 »

natürlich, werde beim nächsten mal dran denken :mrgreen:
Antworten