Seite 1 von 1

Erstellte Map in Programm einbinden

Verfasst: 16.03.2014 19:13
von NeoRon
Hallo.

habe mit einem Tile Editor ne Map erstellt und möchte die nun in mein Programm einbinden.
Die Map heißt Room1.Map

Wie mache ich das nun das er mir die Room.Map ausließt und die einzelnen Tiles die die Map zeichnen auf dem Screen anzeigt.
Habe schon ein 2 Dimensionales Array erstellt und die Map in Tiles eingeteilt.



Hier der Code meines Programmes:

Code: Alles auswählen

; --- InitSystem

If InitSprite() = 0
  MessageRequester("Fehler", "Kann Grafik nicht Initialisieren..(DirectX7 oder höher notwendig!)", 0)
  End
EndIf

If InitKeyboard() = 0
  MessageRequester("Fehler", "Kann Keyboard nicht Initialisieren..(DirectX7 oder höher notwendig!)", 0)
  End
EndIf

If InitSound() = 0
  MessageRequester("Fehler", "Kann Sound nicht Initialisieren..(DirectX7 oder höher notwendig, Soundkarte notwendig!)", 0)
  End
EndIf

If InitMouse() = 0
  MessageRequester("Fehler", "Kann Maus nicht Initialisieren..", 0)
  End
EndIf

IncludeFile "Room1.map"

;konstanten
#MAPSIZEY = 21 ;Felder
#MAPSIZEX = 29
#TileSize = 32
#StartfeldX = 10
#StartfeldY = 9
#Start_Armor = 100
#Start_Lives = 3

Enumeration
  ;Sound
  ;sprite
  #none_sprite
EndEnumeration

Structure Game
  QUIT.i
  Pause.i
  Lives.i
EndStructure

Structure Player
  Sprite.i
  SollX.i
  SollY.i
  X.f
  Y.f
  FeldX.i                   
  FeldY.i
  Speed.f
  armor.i
  WeaponID.i
  List weapons.i()
  List armors.i()
  List items.i()
EndStructure 

Global Dim MapArray(#MAPSIZEX,#MAPSIZEY) ;X,Y

Global Settings.Game
Global Player.Player

Settings\Pause = #False
Settings\QUIT = #False
Player\SPEED = #Start_Lives
Player\ARMOR = #Start_Armor

OpenWindow(0, 0, 0, 1024, 768, "RPG", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 1024, 768)

UsePNGImageDecoder()
UseOGGSoundDecoder()

Define event
Define resourcen.s = "resourcen\"

Global Sprite_Player = LoadSprite(#PB_Any,  "resourcen\player.bmp")
Global Sprite_Wall = LoadSprite(#PB_Any,  "resourcen\Tile_Wall.bmp")

Procedure AddWeapon(WeaponID.i)
  If (AddElement(player\Weapons()))       
    player\Weapons() = WeaponID 
  EndIf
EndProcedure

Procedure Addarmor(ArmorID.i)
  If (AddElement(player\armors()))       
    player\armors() = ArmorID 
  EndIf
EndProcedure

Procedure Additems(ItemID.i)
  If (AddElement(player\items()))       
    player\items() = ItemID 
  EndIf
EndProcedure

Procedure TileMap(Array MapArray(2),FeldX, FeldY, spriteID)   
  MapArray(FeldX, FeldY) = Spriteid
EndProcedure

Procedure LOAD_MAP(Room)
  Protected X, Y
  
  Select Room
    Case 1 ;// Room 1
      ;// objekte
      ;// X = 0 bis 29
      ;// Y = 0 bis 21
      ;// setzt Sprite auf die Felder
      
      
      TileMap(MapArray(),#StartfeldX, #StartfeldY,Sprite_Player) 
      TileMap(MapArray(),10, 10, Sprite_Wall) 
      TileMap(MapArray(),11, 10, Sprite_Wall) 
      TileMap(MapArray(),12, 10, Sprite_Wall) 
      TileMap(MapArray(),13, 10, Sprite_Wall) 
      TileMap(MapArray(),14, 10, Sprite_Wall) 
      TileMap(MapArray(),15, 10, Sprite_Wall) 
      TileMap(MapArray(),15, 9, Sprite_Wall) 
      TileMap(MapArray(),15, 8, Sprite_Wall) 
      TileMap(MapArray(),15, 7, Sprite_Wall) 
      TileMap(MapArray(),15, 6, Sprite_Wall) 
      TileMap(MapArray(),15, 5, Sprite_Wall) 
      
      ;// passe startpixel an
      For X = 0 To #MAPSIZEX  
        For Y = 0 To #MAPSIZEY
          
          If MapArray(X,Y) = Sprite_Player
            ;// spieler feld gefunden
            player\X = X*#TileSize
            player\Y = Y*#TileSize   
            Break 2
          EndIf
        Next y
      Next x  
  EndSelect
EndProcedure

;//STEUERUNG______________________________________________________

Procedure Steuerung()
  ExamineKeyboard() 
  Protected X, Y
  
  ;// feld ermitterln
  X = player\X/#TileSize
  Y = player\Y/#TileSize
  
  If KeyboardPushed(#PB_Key_Left) 
    
    
    If Not Sprite_Wall > player\X And Sprite_Wall + #TileSize < Player\X + #TileSize Or Sprite_Wall > player\Y And Sprite_Wall + #TileSize < Player\X + #TileSize
      player\X -  Player\SPEED  
    Else
    EndIf
  EndIf
  
  If KeyboardPushed(#PB_Key_Right) 
    If Not MapArray(X + 1,Y) = Sprite_Wall
      player\X + Player\SPEED
    Else
      
    EndIf
  EndIf
  
  If KeyboardPushed(#PB_Key_Up) 
    If Not MapArray(X,Y) = Sprite_Wall
      player\Y - Player\SPEED
    Else
    EndIf
  EndIf
  
  If KeyboardPushed(#PB_Key_Down)
    If Not MapArray(X,Y + 1) = Sprite_Wall
      player\Y + Player\SPEED    
    Else
    EndIf
  EndIf
  
  
EndProcedure

;// DISPLAY SPRITES______________________________________________________

Procedure Display_map()
  Protected X, Y
  
  For X = 0 To #MAPSIZEX
    For Y = 0 To #MAPSIZEY
      If MapArray(X,Y) = Sprite_Wall            
        DisplayTransparentSprite(Sprite_Wall, X*#TileSize, Y*#TileSize)	
      EndIf
    Next Y
  Next X
  
EndProcedure

Procedure Display_objects()    
  ;// Spieler
  DisplayTransparentSprite(Sprite_Player,Player\X,Player\Y)
EndProcedure

;//DEBUG

Procedure gamedebug()
  
  Debug "--- player pos ---"
  Debug "X" + player\X
  Debug "y" + player\Y
  Debug "feld x " + Str(player\X/#TileSize)
  Debug "feld y " + Str(player\y/#TileSize)
  
EndProcedure

;// lade map
LOAD_MAP(1)

;//MAINLOOP

Repeat 
  ClearScreen(0)
  
  Gamedebug()
  Steuerung()  
  Display_objects()
  Display_map()
  FlipBuffers()  
  
  
  Event = WindowEvent()
  If Event = #PB_Event_CloseWindow :  Settings\QUIT = #True : EndIf  
  If KeyboardReleased(#PB_Key_Escape) : Settings\QUIT = #True : EndIf
Until Settings\QUIT=#True
Könnt ihr mir da behilflich sein?

Grüße

Re: Erstellte Map in Programm einbinden

Verfasst: 17.03.2014 01:19
von NeoRon
Muss ich Sie so in etwa laden?

Code: Alles auswählen

      If OpenFile(0, "Room1.Map")
        For x=0 To #MAPSIZEX
          For y=0 To #MAPSIZEY
            MapArray(x,y) = ReadLong(0) 
          Next
        Next
        CloseFile(0)
        EndIf

Re: Erstellte Map in Programm einbinden

Verfasst: 17.03.2014 01:23
von NicTheQuick
Woher sollen wir wissen welche Tile Editor du benutzt hast und wie das Dateiformat dieser Maps ist?
Da musst du uns schon genaueres sagen.

Re: Erstellte Map in Programm einbinden

Verfasst: 17.03.2014 01:35
von NeoRon
Hi,

hatte ich geschrieben .Map Endung

Ich benutze den Level Ed v1.0 by Epyx .

Sagt der dir was oder was ist noch relevant zu wissen um mir da zu helfen.

sry bin da noch nen grünschnabel drin ^^

Re: Erstellte Map in Programm einbinden

Verfasst: 17.03.2014 18:55
von edel
Wenn du in dem Programm F1 drueckst, bekommst du die "Hilfe" angezeigt. Ganz unten steht "File Format". Dort ist alles beschrieben.

Re: Erstellte Map in Programm einbinden

Verfasst: 22.03.2014 22:30
von NeoRon
Gibt es auch noch andere Editoren die für Purebasic geeignet sind?

Denn den ich wie oben beschrieben benutze ist auf dem stand von 2009 und somit bringt er mir fehler da sich bei manchen befehlen als Beispiel die Parameter geändert haben.

Könnt ihr da abhilfe schaffen?

Re: Erstellte Map in Programm einbinden

Verfasst: 23.03.2014 03:19
von NeoRon
Also die Map_Loader.pbi läuft auf dem neuen PB nicht ist iwas mit 4.X

Brauch man die? Sieht unheimlich Kompliziert aus.