2d Level-Editor Probleme

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Ziggy

Betreff: 2d Level-Editor Probleme

BeitragSo, Dez 09, 2007 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute.

Ich versuche den Editor von Rob's Homepage anzupassen, ich will ihn flexibler mache, mit der Möglichkeit die Breite des Levels (damit auch das Dim-Array) vorher selbst festzulegen. Das funktioniert auch schon ganz gut, leider habe ich jetzt das Problem, dass ich das Dim-Array beim laden des Levels im eigentlichen Spiel ja eigentlich vorher festlegen muss.

Code: [AUSKLAPPEN]

;-------- Main.bb -----------


Include "globales.bb"
Include "settings.bb"
Include "functions.bb"

Graphics gfxWidth,gfxHeight,gfxBpp,gfxMode
SetBuffer BackBuffer()

[...]

Dim tiles(6)
For x=0 To 5
   tiles(x) = LoadImage("gfx/tile"+Str$(x)+".png")
   ScaleImage tiles(x),2,2
   MaskImage tiles(x),0,0,0
Next


Dim level(8,20)  ; <----- hier ist das blöde Array welches sich an dem Level ausrichten muss !!!
For x=0 To 7
   For y=0 To 19
      level(x,y)=0
   Next
Next

Repeat
Cls
HidePointer

[...]

;Level laden
If gamemode = 1 Then
   levelname$ = "level1"
   file = ReadFile("data/"+Str$(levelname$)+".dat")
   For y =0 To 7
      For x= 0 To 19
         level(y,x) = ReadLine(file)
      Next
   Next
   CloseFile file

   For y=0 To 7
      For x=0 To 19
         DrawImage tiles(level(y,x)),x*64,y*64
      Next
   Next
EndIf

[...]


Flip
Until KeyHit(1)
End


Meine Frage nun: kann ich aus der Level-Datei selbst die Länge der Zeilen/Spalten auslesen?
Eine Möglichkeit die ich mir selbst überlegt habe: ich lege die Breite immer auf 99 oder so fest, lege dann aber im Level selbst einen "Checkpoint" an, und wenn der Spieler diesen berührt fängt das nächste Level an. (Dies wollte ich sowieso machen, um das Ende des Levels zu signalisieren)

Danke schon mal für eure Anregungen.

Gruß.
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."

"Irren ist menschlich, gut dass ich ein Gott bin... xD"

letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case

PSY

BeitragSo, Dez 09, 2007 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,

du kannst einfach eine maximalgrösse des levels festlegen

Code: [AUSKLAPPEN]
dim level(99,99)


zu beginn jeder leveldatei speicherst du zuerst breite und höhe und liest diese werte vor dem laden aus:

Code: [AUSKLAPPEN]
stream=openfile(blabla)
levelbreite = readbyte(stream)
leveltiefe    = readbyte(stream)
For y = 1 To leveltiefe
  For x = 1 To levelbreite
    level(x,y) = readbyte(stream)
  Next
Next


alles weitere kannst du dann folgendermassen flexibel lösen:

Code: [AUSKLAPPEN]
for x=1 to levelbreite
  for y=1 to leveltiefe

    mach das und das und das auch noch...

  next
next


l8er
psy
 

Ziggy

BeitragSo, Dez 09, 2007 16:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antwort,

ich werde es jedoch jetzt so machen dass das Level immer aus Dim(8,100) besteht, und wenn ich das Levelende erreicht habe dann zeichne ich dort einen unsichtbaren "Checkpoint" ein, welcher das Ende bestimmt.
Scheint mir eine vernünftige Lösung zu sein.

Gruß.
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."

"Irren ist menschlich, gut dass ich ein Gott bin... xD"

letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case

DerHase

BeitragSo, Dez 09, 2007 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Die vernünftige Lösung scheint PSYs Ansatz zu sein...
Play Satyr!
 

Ziggy

BeitragSo, Dez 09, 2007 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Was is an meiner Lösung schlecht?
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."

"Irren ist menschlich, gut dass ich ein Gott bin... xD"

letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case

DerHase

BeitragSo, Dez 09, 2007 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Du speicherst unnötige Daten und Du kannst Dein Level nicht größer machen, wenn Du es aus irgendeinem Grund doch mal machen möchtest. Und man sollte immer möglichst resourcenschonend und flexibel programmieren.
Play Satyr!
 

Ziggy

BeitragSo, Dez 09, 2007 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm.... ich werd nochmal drüber nachdenken, DerHase.

Gute Nacht zusammen.
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."

"Irren ist menschlich, gut dass ich ein Gott bin... xD"

letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group