Warum funktioniert dieser einfache code nicht?

Previous topic - Next topic

Metamorphose

Hallo.
versuche ganz simpel mit einem dim von 13x13 eine map zu zeichnen, anhand des einsteiger-tutorials von glbasic.
ich meine es so:

111
121
111

1 ist gras, 2 ist erde. dann sollte er mir überall wo im dim 1 ist ein gras hinzeichnen und wo ein 2 ist erde. habe versucht das auf 13x13 zu machen mit einer spritegrösse von 50. der code kompiliert, doch bleibt das glbasic-fenster nur ein wimpernschlag offen. ohne die abfrage des dims funzt es. warum gibts keinen fehler aus und was mache ich falsch?

Code (glbasic) Select

SETSCREEN 1280, 720, 0

GLOBAL wx, wy, wt //13x13 felder mit wt als spätere abfrage was für eine eigenschaft
wx=13; wy=13; wt=1 //wird hier kurz deklariert, dass ers für das dim verwenden kann


LOADSPRITE "media/grass.png", 1
LOADSPRITE "media/erde.png", 2

DIM welt[wx][wy] //also welt[13][13]



WHILE TRUE

FOR wx=1 TO 13
FOR wy=1 TO 13

IF welt[wx][wy]=1 THEN DRAWSPRITE 1, wx*50, wy*50 //hier ist vermutlich der wurm drin. 50 ist die spritegrösse
IF welt[wx][wy]=2 THEN DRAWSPRITE 2, wx*50, wy*50



NEXT
NEXT


SHOWSCREEN

WEND

lalagames - www.metamo.ch/lalagames/
Keine K?nstler Online - www.keinekuenstler.ch
M?rchenwelt PNP-RPG - www.metamo.ch/maerchenwelt

Schranz0r

Jo, Hi :D



Also, grundsätzlich erstmal zu Arrays:

Code (glbasic) Select
// Openarray im gewünschten "scope" erstellen. GLOBAL würde ich für eine Map immer machen...
GLOBAL welt[] 

// dem Array eine größe zuweisen
REDIM welt[12][12]   // 12 spalten und zeilen!


// array random befüllen <--- das hast du vegessen :D
// wird beim zeichen auch so genommen die loops

FOR x = 0 TO 11  // 12 Spalten weil von 0 - 11 = 12
   FOR y = 0 TO 11
      welt[x][y]= 1+RND(1) // 1 oder 2
   NEXT
NEXT



So nun zu deinem Problemen:

- Du hast dein Array nicht befüllt, sprich es ist leer überall 0
- rücke deinen Code ein damit du nicht durcheinander kommst!
- dein Fenster geht immer schnell zu weil den Array ausserhalb des Dimbereichs ist( schalte den Debug-Modus ein, der Käfer oben in der IDE links neben dem Compilebutton
- arrays starten bei 0 und nicht bei 1 ( FOR x = 0 TO wx-1 // wx ist 13 bei dir aber wir zählen von 0 also wx-1 )


Hier ein simples Beispiel:
Code (glbasic) Select

GLOBAL map[]
REDIM map[10][10]



FOR x = 0 TO 9
FOR y = 0 TO 9

map[x][y]= 1+RND(1) // 1 oder 2

NEXT
NEXT




WHILE TRUE

FOR x = 0 TO 9
FOR y = 0 TO 9

SELECT map[x][y]
CASE 1
DRAWRECT x*32, y*32,32,32, RGB(0x00, 0x80, 0x00) //gras
CASE 2
DRAWRECT x*32, y*32,32,32, RGB(0xff, 0xff, 0x00) //sand
ENDSELECT

NEXT
NEXT

SHOWSCREEN
WEND
END

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

Metamorphose

das hat mich jetzt mal wirklich weitergebracht.
danke schranz0r
lalagames - www.metamo.ch/lalagames/
Keine K?nstler Online - www.keinekuenstler.ch
M?rchenwelt PNP-RPG - www.metamo.ch/maerchenwelt

Schranz0r

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

Metamorphose

#4
ich bins nochmals.

habe nun schranz0rs code verwendet und oben rechts einer auswahl mit leveltiles zum anklicken hingetan.
nun sollte man dort draufklicken (maptile verändert sich) und dann ins level (also der bereich von 0-900x0x700) klicken, dass sich map(x:y) verändert, also zB map2x4=2 (durch maptype). ausprobiert, funzt nicht. hier mal der code:
Code (glbasic) Select

SETSCREEN 1280, 720, 0

GLOBAL map[]
GLOBAL mx, my, b1, b2
GLOBAL mxi%, myi%
GLOBAL maptype

REDIM map[18][14]

LOADSPRITE "media/cursor.png", 1
LOADSPRITE "media/nix.png", 51
LOADSPRITE "media/links.png", 52
LOADSPRITE "media/oben.png", 53
LOADSPRITE "media/rechts.png", 54
LOADSPRITE "media/unten.png", 55

LOADFONT "font.png", 1
SETFONT 1

FOR x = 0 TO 17
FOR y = 0 TO 13

map[x][y]= 1 //1 ist nichts, einfach dass man blank weiss hat

NEXT
NEXT




WHILE TRUE

//mausvaries in 50er teilen und begrenzung
mxi%=mx/50; myi%=my/50 ; IF mxi%>18 THEN mxi%=18; IF myi%>14 THEN myi%=14



//MAPabfrage
FOR x = 0 TO 17
FOR y = 0 TO 13

SELECT map[x][y]
CASE 1
DRAWSPRITE 51, x*50, y*50 //51 nix
CASE 2
DRAWSPRITE 52, x*50, y*50 //52 links
CASE 3
DRAWSPRITE 53, x*50, y*50 //53 oben
CASE 4
DRAWSPRITE 54, x*50, y*50 //54 rechts
CASE 5
DRAWSPRITE 55, x*50, y*50 //55 unten
ENDSELECT
NEXT
NEXT






//auswahl der maptypes
IF mx>950 AND mx<1000 AND my>100 AND my<150 AND b1=1 THEN maptype = 0
IF mx>950 AND mx<1000 AND my>160 AND my<210 AND b1=1 THEN maptype = 1
IF mx>950 AND mx<1000 AND my>220 AND my<270 AND b1=1 THEN maptype = 2
IF mx>950 AND mx<1000 AND my>280 AND my<330 AND b1=1 THEN maptype = 3
IF mx>950 AND mx<1000 AND my>340 AND my<390 AND b1=1 THEN maptype = 4

DRAWSPRITE 51, 950, 100 ; PRINT "Nichts", 1010, 120, 1
DRAWSPRITE 52, 950, 160 ; PRINT "Linke Wand", 1010, 180, 1
DRAWSPRITE 53, 950, 220 ; PRINT "Oben Wand", 1010, 240, 1
DRAWSPRITE 54, 950, 280 ; PRINT "Rechts Wand", 1010, 300, 1
DRAWSPRITE 55, 950, 340 ; PRINT "Unten Wand", 1010, 360, 1

PRINT "Auswahl: "+maptype, 950, 450, 1
PRINT "Maus "+mxi%+"x"+myi%, 950, 470, 1




//map ändern - ACHTUNG hier liegt ev der hund begraben
IF mx<900 AND my<700 AND b1=1

FOR x = 0 TO 17
FOR mxi% = 0 TO 17
FOR y = 0 TO 13
FOR myi% = 0 TO 13

IF maptype=0 THEN map[x][y]= 1
IF maptype=1 THEN map[x][y]= 2
IF maptype=2 THEN map[x][y]= 3
IF maptype=3 THEN map[x][y]= 4
IF maptype=4 THEN map[x][y]= 5

NEXT; NEXT
NEXT; NEXT

ENDIF



DRAWSPRITE 1, mx, my
MOUSESTATE mx, my, b1, b2

SHOWSCREEN
WEND
END

lalagames - www.metamo.ch/lalagames/
Keine K?nstler Online - www.keinekuenstler.ch
M?rchenwelt PNP-RPG - www.metamo.ch/maerchenwelt

Schranz0r

Code (glbasic) Select
//map ändern - hier lag der Hund begraben
IF mx<900 AND my<700 AND b1=1

FOR x = 0 TO 17
FOR y = 0 TO 13

IF x=mxi AND y=myi THEN map[x][y]= maptype

NEXT
NEXT

ENDIF
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