Erstellte Map in Programm einbinden

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Erstellte Map in Programm einbinden

Beitrag 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
The World is Cyber
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Erstellte Map in Programm einbinden

Beitrag 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
The World is Cyber
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Erstellte Map in Programm einbinden

Beitrag 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.
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Erstellte Map in Programm einbinden

Beitrag 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 ^^
The World is Cyber
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Erstellte Map in Programm einbinden

Beitrag von edel »

Wenn du in dem Programm F1 drueckst, bekommst du die "Hilfe" angezeigt. Ganz unten steht "File Format". Dort ist alles beschrieben.
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Erstellte Map in Programm einbinden

Beitrag 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?
The World is Cyber
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Erstellte Map in Programm einbinden

Beitrag 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.
The World is Cyber
Antworten