Eine Map erstellen mit DATA und laden mit RESTORE !

Previous topic - Next topic

Schranz0r

So, Willkommen zu einen weiteren kleinen Tutorial von -> hmm... mir :D

Heute will ich euch zeigen, wie man eine simple Map erstellt mit DATA und es mit RESTORE läd!
Sinn und Zweck von dieser Methode ist es, ohne externe Dateien simple Maps erstellen zu können.

Wie immer rede ich nicht um den heißen Brei und komm gleich zur Sache ;)

Zuerst brauchen wir ein kleines Bildchen/Sprite:

Code (glbasic) Select

// Wandsprite
DRAWRECT 0,0,32,32, RGB(0xc8, 0xc8, 0xc8)
DRAWRECT 2,2,30,30, RGB(0x7d, 0x7d, 0x7d)
DRAWRECT 2,2,28,28, RGB(0xf3, 0xf3, 0xf3)
GRABSPRITE 1, 0,0,32,32  // Spritenummer 1

LOCAL TileX = 32 // Spritebreite
LOCAL TileY = 32 // Spritehöhe


Das Ergebnis ist ein Kachelartitiges Sprite, das wir super für unsere kleine Testmap benutzen können!

So jetzt brauchen wir noch ein Map-array:

Code (glbasic) Select
GLOBAL map[]
DIM map[20][15]


Nun kommt der Trick an der ganzen Sache ( Bin mir sicher, dass manche den Befehl noch garnicht kennen :D ).
Die Mapdaten angeben:

Code (glbasic) Select
STARTDATA map1:
DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1
DATA 1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1
DATA 1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
ENDDATA


Da wir jetzt die Mapdaten haben, müssen wir diese natürlich beim Start des Programmes/Spieles auslesen:
( ABER VORSICHT( is cool man :D )! : Man MUSS in X-Richtung auslesen, so ergibt sich folgender Code:

Code (glbasic) Select
RESTORE map1
FOR y = 0 TO 14
FOR x = 0 TO 19
READ map[x][y] // Daten in der Map speichern!
NEXT
NEXT



Hmm, nu?
Ich gehe mal davon aus, das jeder weiss wie man eine Map anzeigt aus einem Array... oder?

Hier mal der ganze Code:

Code (glbasic) Select
DRAWRECT 0,0,32,32, RGB(0xc8, 0xc8, 0xc8)
DRAWRECT 2,2,30,30, RGB(0x7d, 0x7d, 0x7d)
DRAWRECT 2,2,28,28, RGB(0xf3, 0xf3, 0xf3)
GRABSPRITE 1, 0,0,32,32

LOCAL TileX = 32
LOCAL TileY = 32

GLOBAL map[]
DIM map[20][15]

RESTORE map1
FOR y = 0 TO 14
FOR x = 0 TO 19
READ map[x][y]
NEXT
NEXT


WHILE TRUE

FOR x = 0 TO 19
FOR y = 0 TO 14

SELECT map[x][y]
CASE 0
// Draw nothing!
CASE 1
// Zeichne die Kachel an Position x * Kachelbreite, y * Kachelhöhe
DRAWSPRITE 1,x*TileX,y*TileY
ENDSELECT

NEXT
NEXT


SHOWSCREEN
WEND
END




STARTDATA map1:
DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1
DATA 1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1
DATA 1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
ENDDATA


Hoffe ihr könnt damit was anfangen, wenn nicht, dann einfach überlesen :P
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Quentin

yep. DATA ist super, um mal auf die Schnelle was zu testen. Viel praktischer als mit Dateien zu hantieren.
Schön erklärt.