 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
NixAhnung
Anmeldungsdatum: 07.05.2005 Beiträge: 37
|
Verfasst am: 14.05.2005, 16:55 Titel: Data? |
|
|
Wie funktioniert der Befehl Data und was bringt der überhaubt?
Ich habe mir hier ein Spiel von der Seite runtergeladen BaloonX heißt das und da steht folgendes:
DATA &H0005,&H0007,&H8888,&H8888,&H0000,&H0000,&H0000,&H0000
DATA &H0000,&H0000,&H8888,&H8888,&HD8D8,&HD8D8,&HD8D8,&HD8D8
DATA &H0005,&H0007,&H7171,&H2171,&H88F8,&H8800,&H00F8,&H8800
DATA &H00F8,&H0000,&H7151,&H0151,&H2101,&H2101,&H2121,&H2121
DATA &H000D,&H0007,&HF8FF,&HF8FF,&H0000,&HF8FF,&H889A,&HF8FF
DATA &H7065,&HF8FF,&HA8DA,&HF8FF,&H5025,&HF8FF,&H88DA,&HF8FF
DATA &H7025,&HF8FF,&HB8DA,&HF8FF,&H4025,&HF8FF,&HB888,&HF8FF
DATA &H4077,&HF8FF,&HF8FF,&HF8FF,&H0000,&HF8FF
DATA &H000D,&H0007,&H0300,&HFBFF,&H0000,&HFBFF,&H0200,&HFBFF
DATA &H7177,&HFBFF,&H0300,&HFBFF,&H5045,&HFBFF,&H0300,&HFBFF
DATA &H5075,&HFBFF,&H0300,&HFBFF,&H5015,&HFBFF,&H0200,&HFBFF
DATA &H7177,&HFBFF,&H0300,&HFBFF,&H0000,&HFBFF
DATA &H000D,&H0007,&HF8FF,&H0000,&H0000,&HF8FF,&H8898,&H7067
DATA &H7067,&HF8FF,&HA8DA,&H5025,&H5025,&HF8FF,&HA8DA,&H5025
DATA &H5025,&HF8FF,&HA8DA,&H5025,&H5025,&HF8FF,&H8888,&H7077
DATA &H7077,&HF8FF,&HF8FF,&H0000,&H0000,&HF8FF
DATA &H0009,&H0005,&H801F,&H801F,&H801F,&H801F,&H8086,&H8086
DATA &H8086,&H8086,&H0000,&H0000,&H0000,&H0000,&H8386,&H8386
DATA &H8386,&H8386,&H821F,&H821F,&H821F,&H821F
DATA &H0009,&H0005,&H00E0,&H0080,&H0000,&H00C0,&H0001,&H0000
DATA &H0058,&H0029,&H8061,&H81E1,&H81EF,&H00D2,&H0001,&H0100
DATA &H0158,&H0229,&H00E0,&H0180,&H0100,&H02C0
DATA &H0009,&H0005,&H03FC,&H03FC,&H03FC,&H03FC,&H90B0,&H90B0
DATA &H90B0,&H90B0,&H0000,&H0000,&H0000,&H0000,&H90B0,&H90B0
DATA &H90B0,&H90B0,&H03FC,&H03FC,&H03FC,&H03FC
DATA &H0009,&H0005,&H9C03,&H9000,&H0000,&H9801,&H0040,&H0000
DATA &H0B0D,&H054A,&H0CC3,&H9CC3,&H9DFB,&H9A25,&H0040,&H0000
DATA &H0B0D,&H054A,&H9C03,&H9000,&H0000,&H9801
DATA &H0007,&H0007,&HFEFE,&HFEFE,&HFEFE,&HFEFE,&H8282,&H8282
DATA &H0000,&H0000,&H8282,&H8282,&HFEFE,&HFEFE,&HFEFE,&HFEFE
DATA &H0007,&H0007,&H0000,&H0000,&H0000,&H0000,&H7C7C,&H007C
DATA &H7E02,&H807E,&H0000,&H7C00,&H0000,&H0000,&H0000,&H0000
DATA &H0007,&H0007,&HFEFE,&HFEFE,&HC6C6,&HC6C6,&H8282,&H8282
DATA &H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6,&HFEFE,&HFEFE
DATA &H0007,&H0007,&H0000,&H0000,&H3838,&H0038,&H7C04,&H007C
DATA &H7E02,&H807E,&H3C00,&H403C,&H0000,&H3800,&H0000,&H0000
DATA &H0007,&H0007,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &H0007,&H0007,&H3838,&H0038,&H7C04,&H007C,&H7E02,&H807E
DATA &H7E02,&H807E,&H7E02,&H807E,&H3C00,&H403C,&H0000,&H3800
DATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HF6F6,&HF6F6
DATA &HF6F6,&HF6F6,&HFAFA,&HFAFA
DATA &H0007,&H000D,&H0000,&H0038,&H0000,&H187C,&H0000,&H04FE
DATA &H0000,&H00FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038
DATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H0808,&H0008
DATA &H0808,&H0008,&H0404,&H0004
DATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HF6F6,&HF6F6
DATA &HF6F6,&HF6F6,&HF6F6,&HF6F6
DATA &H0007,&H000D,&H0000,&H0038,&H0000,&H087C,&H0000,&H04FE
DATA &H0000,&H00FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038
DATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H0808,&H0008
DATA &H0808,&H0008,&H0808,&H0008
DATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE
DATA &H0007,&H000D,&H0000,&H0038,&H0000,&H087C,&H0000,&H04FE
DATA &H0000,&H04FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038
DATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H1010,&H0010
DATA &H1010,&H0010,&H1010,&H0010
DATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HDEDE,&HDEDE
DATA &HDEDE,&HDEDE,&HDEDE,&HDEDE
DATA &H0007,&H000D,&H0000,&H0038,&H0000,&H087C,&H0000,&H04FE
DATA &H0000,&H00FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038
DATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H2020,&H0020
DATA &H2020,&H0020,&H2020,&H0020
DATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HDEDE,&HDEDE
DATA &HDEDE,&HDEDE,&HBEBE,&HBEBE
DATA &H0007,&H000D,&H0000,&H0038,&H0000,&H187C,&H0000,&H04FE
und so weiter und so fort.....
Also was bringt das jetzt genau?????? |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 14.05.2005, 17:15 Titel: |
|
|
Durch Data werden Datensätze in dein Programm "eingebettet", d.h. fest integriert. Du kannst sie mit READ lesen.
Genausogut könntest du ein Array erstellen, in dem du diese Daten speicherst:
Daten(0) = &H0005
Daten(1) = &H0007
...
Das ist aber wesentlich mehr Tipparbeit, außerdem muss das Array erst einmal (COMMON) SHARED deklariert werden, damit es in allen Prozeduren (SUBs und FUNCTIONs) verfügbar ist.
Wenn du dir (z.B. in der QB Onlinehilfe) die Syntax zu Read ansiehst, wirst du bemerken, dass du niemals angeben musst, welchen Datensatz du eigentlich lesen willst.
Gelesen wird ein Satz nach dem anderen. Bei der ersten READ-Anweisung der erste, bei der zweiten der zweite, u.s.w.
Wenn du einen Satz mehrmals einlesen möchtest, kannst du RESTORE verwenden. Nach einem RESTORE-Aufruf wird nocheinmal der selbe Datensatz gelesen. Nach 2 RESTOREs der vorletzte, u.s.w.
Ein Datensatz wird duch ein Komma vom nächsten abgetrennt.
In der ersten Zeile sind also 8 Datensätze gespeichert.
Und was genau steht jetzt da?
Gute Frage.
Generell sind es einfache einmal hexadezimale Zahlen; hexadezimal heißt, es gibt nicht nur die Ziffern von 0 - 9, sondern zusätzlich noch A,B,C,D,E und F.
A entspricht also 10 im dezimalen, F = 15.
Damit man nun weiß, ob eine Zahl dezimal oder hexadezimal sein soll, häng man an hex. zahlen einfach ein &H an. Es gibt auch die schreibweisen 0x... und ...h, die aber in QB uninteressant sind; es sin die schreibweisen anderer sprachen.
das ... steht dabei jeweils für die Zahl.
Und wozu das ganze in hex, wenns auch dezimal geht?
Wie du siehst, hat jede Zahl genau 4 Stellen; dem Programmierer ging es also darum, das ganzen optisch schön darzustellen; in der QB-Oberfläche, wo jedes Zeichen genau die selbe breite hat, hat auch jeder solche DATA-Block die selbe Zeilenlänge.
Und auch sonst hilft dieses Zählsystem, bestimmte Zusammenhänge hervorzuheben. Das wirst du später vllt einmal sehen.
Jetzt haben wir immer noch nicht die Bedeutung der DATA's...
Nun, genau sagen kann dir das wohl nur der Programmierer selbst. Oft wird auf diese Art und weise ein Maschinenspracheprogramm eingebunden; das ist ein Programm, das in ASSEMBLER geschrieben wurde, der sprache, die ein Prozessor versteht. solche Programme sind schneller, aber auch sehr viel schwieriger zu programmieren.
Ansonsten ist es möglich, dass er so einfach einige Konstanten untergebracht hat... die werden aber meinstens als dezimal bzw als string gespeichert.
Ich hoffe, das war jetzt verständlich.
Have a nice day
Ciao _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
NixAhnung
Anmeldungsdatum: 07.05.2005 Beiträge: 37
|
Verfasst am: 14.05.2005, 17:33 Titel: |
|
|
Danke  |
|
Nach oben |
|
 |
Devilkevin aka Kerstin

Anmeldungsdatum: 11.11.2004 Beiträge: 2532 Wohnort: nähe Mannheim
|
|
Nach oben |
|
 |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 14.05.2005, 20:31 Titel: |
|
|
hm dazu hab ich auch nochmal ne Frage:
Man liest das ganze also mit READ aus.
Aber wie arbeitet man genau damit und wo wird die Data, Read Methode preferiert? |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 15.05.2005, 13:15 Titel: Ein Beispiel! |
|
|
Ich denke mal, da ist ein Beispiel die beste Erklärung:
Code: |
DECLARE SUB PsetTransA (x, y, col)
DATA 0, 0, 0, 0, 0, 0, 0, 0
DATA 0, 0, 0, 1, 1, 0, 0, 0
DATA 0, 0, 1, 0, 0, 1, 0, 0
DATA 0, 0, 1, 0, 0, 1, 0, 0
DATA 0, 1, 0, 0, 0, 0, 1, 0
DATA 0, 1, 1, 1, 1, 1, 1, 0
DATA 0, 1, 0, 0, 0, 0, 1, 0
DATA 0, 0, 0, 0, 0, 0, 0, 0
SCREEN 12
PsetTransA (100, 100, 15)
'----
SUB PsetTransA (x, y, col)
FOR yp = 1 TO 8
FOR xp = 1 TO 8
READ tmp
IF tmp THEN PSET (x + xp, y + yp), col
NEXT
NEXT
FOR dummy = 1 TO 64
RESTORE
NEXT
|
In diesem Codebeispiel wird zuerst eine Bitmap von 8x8 Pixeln per DATA ins Programm eingebunden.
In der SUB wird dann Pixel für Pixel eingelesen. Wenn das Pixel ungleich 0 ist, (IF tmp THEN...), dann wird ein Pixel gezeichnet, ansonsten bleibt es transparent.
Eigentlich würde es sich lohnen, die Font-Data in eine externe Datei auszulagern; manchmal möchte man aber genau das vermeiden, z.B. weil die Daten nicht allzu leicht veränderbar sein sollen.
Eine besondere Bedeutung hat DATA/READ bei Maschinenspracheprogrammen; diese können so ganz bequem gespeichert und eingegeben werden. Anschließend muss man sie nur noch mit READ in ein Array laden, und per CALL ABSOLUTE aufrufen.
Allerdings wird davon eher abgeraten; praktischer ist es, das Assemblerprogramm einfach zur OBJ und dann zur LIB/QLB zu machen.
Die kann man zwar nur ab QB4.5 (vllt auch schon 3.0) einsetzen, sind aber wesentlich bequemer einsetzbar, da sie als "echte SUBs" behandelt werden.
Ich selbst muss sagen, dass ich DATA praktisch nie gebraucht habe.
Kleine Datenmengen kann man direkt in die entsprechenden Variablen schreiben, und bei größeren Datenmengen ist es sowiso sinnvoller, das ganze in eine Datei zu packen.
Aber wie so vieles: Das ist jedem selbst überlassen. _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 15.05.2005, 14:45 Titel: |
|
|
Ähmm, wozu ist denn das
Code: |
FOR dummy = 1 TO 64
RESTORE
NEXT
|
gut?
Reicht da einmal nicht?!
jb |
|
Nach oben |
|
 |
Stephan

Anmeldungsdatum: 05.10.2004 Beiträge: 358 Wohnort: Hessen - 20km Nördlich von Frankfurt am Main
|
Verfasst am: 15.05.2005, 14:53 Titel: |
|
|
Jap, ein Restore reicht voll aus,
und wenn man z.b. mehrere DATA Felder hat, kann man es auch so machen
Code: |
dt1:
DATA 1,2,3,4,5,6,7
dt2:
DATA 1234235,234,243,234,235,34,532
dt3:
DATA 1234,42,5243,5,43,324,5,7,89
RESTORE dt2
|
die Datas sind jetzt unwichtig, wichtig ist nur, das man hierbei sieht,
das der Nächste READ Befehl die daten einliest,
die nach dem Label dt2 stehen. _________________ 'Wir schätzen die Zeit erst, wenn uns nicht mehr viel davon geblieben ist.'
Leo Tolstoi |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|