[Tutorial] Map-Editor für RPGs

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

joKe

BeitragFr, März 26, 2004 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenne direkte Hilfe bei irgendetwas kleinem brauchst
dann kannste dir ICQ zulegen und mich anlabern
My ICQ Number : 145340212

Also ich mein jetzt kein ganzes Programm debuggen helfen
sondern so kleiner Probleme ... da bin ich gerne zur Stelle ...

mfg j0k3
Projekt: Pollux Renegades Coop
[Maschine: Intel DualCore2 2x 3Ghz | 4096 DRR2 | GeForce GTX 260 Ultra]

Jan_

Ehemaliger Admin

BeitragMo, März 29, 2004 8:40
Antworten mit Zitat
Benutzer-Profile anzeigen
So, nächste Lektion:
--> hier Klicken (445 KB im .RAR Format) <--

Bitte mal Laden, damit alle, auf dem gleichen Stand sind!

Ich habe mal alles in Ordner gekliedert, ne Dateinamen abfrage geschrieben, Configdatei mit auslesen, und noch ein paar fehler beseitigt.

Noch etwas zu der GUI, jene ist zweckgebunden --> nicht für Spiele geeignet, dafür müsste man sie stark umgestallten!
between angels and insects
 

IonPainter

BeitragMo, März 29, 2004 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm das is schon richtig geil Jan_ cool das du dir mit einem Neueinsteiger soviel Mühe machst, vllt sollte das ein gewillter Mod mal nach FAQ & Tutorials verschieben... 8)

edit:
hätt noch ein paar vorschläge:

Arrow scrolling
Arrow multilayer
Arrow trigger (playerstart, monstern u.s.w.)
Arrow hintergrundmusi (als trigger)
Arrow vllt ein kleines prog was die map läd und wo man dann ein bissl rumlaufen kann... 8)
  • Zuletzt bearbeitet von IonPainter am Mo, März 29, 2004 12:01, insgesamt einmal bearbeitet
 

Blitzkrieg Bop

BeitragMo, März 29, 2004 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Jan, das ist echt voll nice was du da machst! Respekt! Nun sag mal, wie sieht das nun aus, darf man den frei verwenden oder nur per nachfrage? wenn ja, dann sei das hiermit getan Laughing
~ Hey Ho Let's Go ~

Jan_

Ehemaliger Admin

BeitragMo, März 29, 2004 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Sao, habe die Alten mal zusammen, gesammelt!
-->Hier Klicken (ca. 10KB in .Rar)<--
between angels and insects

Freeman

BeitragMo, März 29, 2004 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
hey, ich finds auch echt nobel von dir das du nen Tut zu nem Mapeditor machst!! Schade nur das wir Mappy nehmen *schluchz* , aber mach ma weiter , werde bestimmt nochmal darauf zurückkommen , weiter so ! Wink
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

Jan_

Ehemaliger Admin

BeitragMo, März 29, 2004 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey,

Das ist ein Tut, natürlich frei,
Aber, du angehalten, meinen Namen in die Credits zu schreiben.
Jedenfalls währe dass sehr nett!

Ansonsten, kannst du es benutzten, missbrauchen, umgestallten,. kopieren, löschen, 5000 auf deiner Festplatte Speichern usw.
Und sogar weiterverschenken!

Du darfst es bei deinen Komerziellen Produkten mitverkaufen (aber dann sollte schon Credits rein)

Und du darfst davon --> LERNEN <--
between angels and insects

Jan_

Ehemaliger Admin

BeitragMo, März 29, 2004 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
So, scrolling, ist da.

Ion, Was mutiplayer für nen Editor?
was / wie soll das gehen?

Code: [AUSKLAPPEN]
;Rechtschreibe Fehler sind absichtlcih und dienen der Belustigung!
Include "GUI.bb" ; So, da laden wir unsere Libary

;Configurationen Laden
ConfigDatei=ReadFile ("config.cfg")
X_Aufloesung = ReadLine(ConfigDatei)
Y_Aufloesung = ReadLine(ConfigDatei)
Farbtiefe = ReadLine(ConfigDatei)
Fenstermodus = ReadLine(ConfigDatei)
CloseFile ConfigDatei


;Grafik initialisieren
Graphics X_Aufloesung,Y_Aufloesung,Farbtiefe,Fenstermodus
HidePointer ; Damit verstecken wir die Maus!

;Arreys und Globals
Global Map_Width = 31, Map_Height = 31 ; Map höhe und breite
Dim Map(Map_Width,Map_Height)
Global G2W = GraphicsWidth()/2,G2H = GraphicsHeight()/2 ; Variablen, damit es nicht jedesmal neu berechnet werde muss
Global Tileset, TileSetDatei$
Global Tile_Auswahl
Global Mouse_GFX ; Mausbild
Global Max_Tile
Global Map_X,Map_Y ; Position des Bildschirms


Global TileSize = 32 ; Setzt die Tile größe!

Global btn_Save,btn_Neu,btn_Laden,Btn_Beenden;Gui Buttons ihre Handels
Global btn_next,btn_last,Btn_Fenster;Gui Buttons ihre Handels
Global Maus_auf_Gui_angewandt ; wird gebraucht, weil sonst etwas sehr unschönes passiert!

;Tasten
Const Key_Plus = 78
Const Key_Minus = 74
Const Key_F5 = 63
Const Key_UP = 200
Const Key_Left = 203
Const Key_Right = 205
Const Key_Down = 208


Get_Data_Name()
Load_Map(Chat_Rueckgabe$);Lädt Map

;load medias
Load_Medias()

;Gui Erstellen
btn_beenden=Create_Button("Beenden des Editor",10,160)
btn_Neu=Create_Button("Neues Level",10,10)
btn_Save=Create_Button("Level Speichern",10,60)
btn_Laden=Create_Button("Level Laden",10,110)
btn_next=Create_Button("Nächstes Tile",GraphicsWidth()-150,10)
btn_last=Create_Button("Vorheriges Tile",GraphicsWidth()-150,110)
btn_fenster=Create_Button("",GraphicsWidth()-150,50,36,36) ; So, in dieses Fenster, kommt das Aktuelle Tile immer rein!
Tile_in_Button_Zeichnen(btn_fenster) ; Das wir am anfang, schon das tile im Button haben

;hintergrund setzten
SetBuffer BackBuffer()

Local X,Y
Local MMX,MMY
Local R,G,B,Rae=1,Gae=2,Bae=3
Repeat
    Keyboard()
    MMX= MouseX() : MMY = MouseY()
    ;------------------------------------------------------
    ;Kleiner Optisch schöner Effekt aber sonst kaum nutzten
    R=R+Rae
    G=G+Gae
    B=B+Bae
    If R> 255 Then R= 255: Rae = Rand(-5,-1)
    If G> 255 Then G= 255: Gae = Rand(-5,-1)
    If B> 255 Then B= 255: Bae = Rand(-5,-1)
    If R< 0 Then R= 0: Rae = Rand(1,5)
    If G< 0 Then G= 0: Gae = Rand(1,5)
    If B< 0 Then B= 0: Bae = Rand(1,5)
    Color R,G,B
    ;------------------------------------------------------
    Cls
    Draw_tiles(Map_X,Map_Y) ; Zeichnet die Tiles
    Mouse(MMX,MMY) ; Aufrufen, der Maus Zeichenfunction
    Gui_Control ; Zeichnet die Knöpfe
    Text G2W,0,"RPG Editor - Entwicklungsstufe 9",1
    Text G2W,15,"-Ein Tutorial von Jan Kuhnert-",1
    Text G2W,30,"-Thema: Scorling-",1
    DrawImage Mouse_GFX,MMX,MMY
    Flip(True)
    Until KeyHit(1)
Save_map("Last_Change.tmp") ; notspeichern
End

Function Keyboard()
    If KeyHit(Key_F5) Then Save_Map
    ;Bewegen der Karte bei Cursortastendruck!
    ;---------------------------------------------
    If Map_Y < 0 ;Wenn im Spielfeld bereich die Maus ist!
        If KeyDown(Key_UP) Then Map_Y= Map_Y+1
    End If
    If Map_Y > -Map_Width +(G2H / (TileSize/2))
        If KeyDown(Key_DOWN) Then Map_Y= Map_Y-1
    End If
    If Map_X < 0
        If KeyDown(Key_LEFT) Then Map_X= Map_X+1
    End If
    If Map_X > -Map_Height+(G2W / (TileSize/2))
        If KeyDown(Key_RIGHT) Then Map_X= Map_X-1
    End If

;---------------------------------------------
End Function

Function Mouse(MMX,MMY)
    Local Tile_X,Tile_Y
    Local Image_Wechsel, Gui_Element
    Tile_X = Int(MMX/TileSize)
    Tile_Y = Int(MMY/TileSize)
    Text 0,200,(Tile_X-Map_X) + " x " + (Tile_Y-Map_Y)
    DrawBlock tileset,Tile_X*TileSize,Tile_Y*TileSize,Tile_Auswahl ;Zeichnet den Block, an die Mausposition, befohr er gesetzt wurde
    DrawImage Mouse_GFX,MMX,MMY
    Rect Tile_X*TileSize-1,Tile_Y*TileSize-1,TileSize+2,TileSize+2,0 ; 4Eck noch etwas vergrößern
    Rect Tile_X*TileSize,Tile_Y*TileSize,TileSize,TileSize,0 ; Zeichnet Das 4Eck, an der Maus-Position
        If MouseHit(1) Then
            Gui_Element=Button_Overlap(MMX,MMY)
            If Gui_Element <> 0 Then ; nur wenn ein Knopf gedrückt wurde reagieren
                Maus_auf_Gui_angewandt=1
                If Gui_Element = btn_neu Then load_map()
                If Gui_Element = btn_save Then
                Get_Data_Name()
                Save_map(Chat_Rueckgabe$)
            End If
            If Gui_Element = btn_laden Then
                Get_Data_Name()
                load_map(Chat_Rueckgabe$)
            End If
            If Gui_Element = btn_beenden Then Save_map("Last_Change.tmp"): End ; Notspeichern und beenden
            If Gui_Element = btn_next Then Tile_Auswahl=Tile_Auswahl+1:Image_Wechsel= 1
            If Gui_Element = btn_last Then Tile_Auswahl=Tile_Auswahl-1:Image_Wechsel= 1

            If Image_Wechsel= 1 Then ; wenn das tile gewechselt wurde, Bild ändern,überprüfen
                If Tile_Auswahl<0 Then Tile_Auswahl=Max_Tile-1
                If Tile_Auswahl>Max_Tile-1 Then Tile_Auswahl=0
                Tile_in_Button_Zeichnen(btn_fenster) ; Tile in Button Zeichnen
                Image_Wechsel=0
            End If
        End If
    End If
    If MouseDown(1)
        If Gui_Element + Maus_auf_Gui_angewandt=0 Then
            Map(Tile_X-Map_X,Tile_Y-Map_Y)=Tile_Auswahl ;ansonsten, Tile setzten
        End If
    Else
        Maus_auf_Gui_angewandt=0
    End If
End Function

Function Load_Map(MapName$="")
    Local Tile_X,Tile_Y
    If MapName$<>"" Then ; Lädt, wenn ein Map Name angegeben wurde
        Read_Datei=ReadFile("Maps\"+MapName$)
        If read_Datei <> 0 Then ; Falls, keine Datei davon vorhanden, wird nicht geladen, sondern neue erstellt
            TileSetDatei$ = ReadLine$(Read_Datei)
            For Tile_X = 0 To Map_Width
                For Tile_Y = 0 To Map_Height
                    Map(Tile_X,Tile_Y) = ReadInt(Read_Datei)
                Next
            Next
            CloseFile Read_Datei
        Else
            MapName$ = ""
        EndIf
    End If
    If MapName$="" Then ; Falls keine Map vorhanden ist, neue erstellen
        For Tile_X = 0 To Map_Width
            For Tile_Y = 0 To Map_Height
                Map(Tile_X,Tile_Y) = 0 ; Macht bei allen Tiles, Bild "0"
            Next
        Next

        TileSetDatei$ = "tiles.bmp"; Wird Später noch aus der Datei gelesen
    End If

    Return TileSetDatei$
End Function

Function Save_Map(Mapname$="temp.map") ;Speichert die Map
    Local Tile_X,Tile_Y
    Write_Datei=WriteFile ("Maps\"+Mapname$)
    WriteLine Write_datei, TileSetDatei$ ; Speichert Tile-set Name
    For Tile_X = 0 To Map_Width
        For Tile_Y = 0 To Map_Height
            WriteInt Write_Datei,Map(Tile_X,Tile_Y)
        Next
    Next
    CloseFile(Write_Datei)
End Function

Function Draw_Tiles(X=0,Y=0)
    Local Tile_X,Tile_Y
    For Tile_X = 0 To Map_Width
        For Tile_Y = 0 To Map_Height
            DrawBlock Tileset,(X+Tile_X)*TileSize,(Y+Tile_Y)*TileSize,Map(Tile_X,Tile_Y) ;Zeichnet, die Tiles
        Next
    Next
End Function

Function Load_Medias()
    Local Read_Image     
    ;------------------------------------------------------------------------------------
    ;Hiermit ermitteln wir, wieviele Tiles in einen Bild sind,
    ;indem wir, (X_pixel * Y_Pixel)/ 32² rechnen
    Read_Image=LoadImage("GFX\Tilesets\"+TileSetDatei$)
    Max_Tile=(ImageWidth(Read_Image)/TileSize)*(ImageHeight(Read_Image)/TileSize)
    FreeImage Read_Image
    ;------------------------------------------------------------------------------------
    If Mouse_GFX <> 0 Then FreeImage Mouse_GFX
    Mouse_GFX = LoadImage("GFX\Pointer.bmp") ; Lädt mauszeiger
    MaskImage Mouse_GFX,255,0,255 ;schneidet die Lilanen Stellen aus dem Bild heraus
    If Tileset <> 0 Then FreeImage Tileset
    Tileset = LoadAnimImage("GFX\Tilesets\"+TileSetDatei$,TileSize, TileSize, 0, Max_Tile) ;Lädt das Tile-set
End Function

Function Tile_in_Button_Zeichnen(Button)
    SetBuffer ImageBuffer(Button); wir Zeichnen direckt in den Knopf das ausgewählte Tile herein!
    DrawBlock tileset,2,2,Tile_Auswahl
    SetBuffer BackBuffer()
End Function

Function Get_Data_Name()
    Repeat ; Damit kein Buchstabe mehr im Puffer ist!
        Ascii=GetKey(); Damit kein Buchstabe mehr im Puffer ist!
    Until Ascii = 0; Damit kein Buchstabe mehr im Puffer ist!
    CopyRect 0,0, GraphicsWidth(), GraphicsHeight(), 0, 0 ,FrontBuffer() ,BackBuffer()

    CreateWindow("Datei eingeben",100,100) ; Fenster erstellen
SetBuffer BackBuffer()


Repeat
Gui_Control() ; Gui Zeichnen

Flip
Until Chat_Rueckgabe$ <> ""

End Function
between angels and insects
  • Zuletzt bearbeitet von Jan_ am Mi, März 31, 2004 10:13, insgesamt einmal bearbeitet

Jan_

Ehemaliger Admin

BeitragDi, März 30, 2004 9:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, ich werde mir die Auswahl, der DAteien nochmal überlegen, die ist nicht so gt gelungen!

https://www.blitzforum.de/viewtopic.php?t=866 <-- So, BruZard hat da ja mal was gemacht! bitte herunterladen und die "*.decls" in BlitzBasicOrdner setzten und dann die DLL in den gleichen ordner, wie die bb Quelltextdatei!

So, und dass wollen wir, von dort!

Code: [AUSKLAPPEN]
;THX an BruZard dafür, das er die Lib 4 Free gibt
;http://www.blitzforum.de/viewtopic.php?t=866

;thema, wie benutzte ich diese Lib!

;btools_requester.dll <-- die benutzte Datei
;BTLoadFile$(title$,Startpfad$,Dateityp$) <-- die wichtigen befehle
;BTSaveFile$(title$,Startpfad$,Dateityp$) <-- die wichtigen befehle

Graphics 640,480,24,2

Speicher_Datei$ = BTSaveFile("Speichern",CurrentDir$ () + "Maps\",".map") ; Speicherpfad ermitteln
Lade_Datei$ = BTLoadFile("Laden",CurrentDir$ () + "Maps\",".map") ; Ladepfad ermitteln

RuntimeError "Speicher Datei: "+Speicher_Datei$+", Lade Datei: "+Lade_Datei$
between angels and insects

Jan_

Ehemaliger Admin

BeitragMi, März 31, 2004 10:24
Antworten mit Zitat
Benutzer-Profile anzeigen
So, nun, mit den Windows Dateiauswahl.

veränderungen sind zu finden in:
-GetDataName
-Load_Map
-Save_Map
-Load_Medias

Editor.bb :
Code: [AUSKLAPPEN]
;Rechtschreibe Fehler sind absichtlcih und dienen der Belustigung!
Include "GUI.bb" ; So, da laden wir unsere Libary

;Configurationen Laden
ConfigDatei=ReadFile ("config.cfg")
X_Aufloesung = ReadLine(ConfigDatei)
Y_Aufloesung = ReadLine(ConfigDatei)
Farbtiefe = ReadLine(ConfigDatei)
Fenstermodus = ReadLine(ConfigDatei)
CloseFile ConfigDatei


;Grafik initialisieren
Graphics X_Aufloesung,Y_Aufloesung,Farbtiefe,Fenstermodus
HidePointer ; Damit verstecken wir die Maus!

;Arreys und Globals
Global Map_Width = 31, Map_Height = 31 ; Map höhe und breite
Dim Map(Map_Width,Map_Height)
Global G2W = GraphicsWidth()/2,G2H = GraphicsHeight()/2 ; Variablen, damit es nicht jedesmal neu berechnet werde muss
Global Tileset, TileSetDatei$
Global Tile_Auswahl
Global Mouse_GFX ; Mausbild
Global Max_Tile
Global Map_X,Map_Y ; Position des Bildschirms


Global TileSize = 32 ; Setzt die Tile größe!

Global btn_Save,btn_Neu,btn_Laden,Btn_Beenden;Gui Buttons ihre Handels
Global btn_next,btn_last,Btn_Fenster;Gui Buttons ihre Handels
Global Maus_auf_Gui_angewandt ; wird gebraucht, weil sonst etwas sehr unschönes passiert!

;Tasten
Const Key_Plus = 78
Const Key_Minus = 74
Const Key_F5 = 63
Const Key_UP = 200
Const Key_Left = 203
Const Key_Right = 205
Const Key_Down = 208


Get_Data_Name()
Load_Map(Chat_Rueckgabe$);Lädt Map

;load medias
Load_Medias()

;Gui Erstellen
btn_beenden=Create_Button("Beenden des Editor",10,160)
btn_Neu=Create_Button("Neues Level",10,10)
btn_Save=Create_Button("Level Speichern",10,60)
btn_Laden=Create_Button("Level Laden",10,110)
btn_next=Create_Button("Nächstes Tile",GraphicsWidth()-150,10)
btn_last=Create_Button("Vorheriges Tile",GraphicsWidth()-150,110)
btn_fenster=Create_Button("",GraphicsWidth()-150,50,36,36) ; So, in dieses Fenster, kommt das Aktuelle Tile immer rein!
Tile_in_Button_Zeichnen(btn_fenster) ; Das wir am anfang, schon das tile im Button haben

;hintergrund setzten
SetBuffer BackBuffer()

Local X,Y
Local MMX,MMY
Local R,G,B,Rae=1,Gae=2,Bae=3
Repeat
   Keyboard()
   MMX= MouseX() : MMY = MouseY()
   ;------------------------------------------------------
   ;Kleiner Optisch schöner Effekt aber sonst kaum nutzten
   R=R+Rae
   G=G+Gae
   B=B+Bae
   If R> 255 Then R= 255: Rae = Rand(-5,-1)
   If G> 255 Then G= 255: Gae = Rand(-5,-1)
   If B> 255 Then B= 255: Bae = Rand(-5,-1)
   If R< 0 Then R= 0: Rae = Rand(1,5)
   If G< 0 Then G= 0: Gae = Rand(1,5)
   If B< 0 Then B= 0: Bae = Rand(1,5)
   Color R,G,B
   ;------------------------------------------------------
   Cls
   Draw_tiles(Map_X,Map_Y) ; Zeichnet die Tiles
   Mouse(MMX,MMY) ; Aufrufen, der Maus Zeichenfunction
   Gui_Control ; Zeichnet die Knöpfe
   Text G2W,0,"RPG Editor - Entwicklungsstufe 10",1
   Text G2W,15,"-Ein Tutorial von Jan Kuhnert-",1
   Text G2W,30,"-Thema: Dateiauswahl-",1
   DrawImage Mouse_GFX,MMX,MMY
   Flip(True)
   Until KeyHit(1)
Save_map("Last_Change.tmp") ; notspeichern
End

Function Keyboard()
   If KeyHit(Key_F5) Then Save_Map
   ;Bewegen der Karte bei Cursortastendruck!
   ;---------------------------------------------
   If Map_Y < 0 ;Wenn im Spielfeld bereich die Maus ist!
      If KeyDown(Key_UP) Then Map_Y= Map_Y+1
   End If
   If Map_Y > -Map_Width +(G2H / (TileSize/2))
      If KeyDown(Key_DOWN) Then Map_Y= Map_Y-1
   End If
   If Map_X < 0
      If KeyDown(Key_LEFT) Then Map_X= Map_X+1
   End If
   If Map_X > -Map_Height+(G2W / (TileSize/2))
      If KeyDown(Key_RIGHT) Then Map_X= Map_X-1
   End If

;---------------------------------------------
End Function

Function Mouse(MMX,MMY)
   Local Tile_X,Tile_Y
   Local Image_Wechsel, Gui_Element
   Tile_X = Int(MMX/TileSize)
   Tile_Y = Int(MMY/TileSize)
   Text 0,200,(Tile_X-Map_X) + " x " + (Tile_Y-Map_Y)
   DrawBlock tileset,Tile_X*TileSize,Tile_Y*TileSize,Tile_Auswahl ;Zeichnet den Block, an die Mausposition, befohr er gesetzt wurde
   DrawImage Mouse_GFX,MMX,MMY
   Rect Tile_X*TileSize-1,Tile_Y*TileSize-1,TileSize+2,TileSize+2,0 ; 4Eck noch etwas vergrößern
   Rect Tile_X*TileSize,Tile_Y*TileSize,TileSize,TileSize,0 ; Zeichnet Das 4Eck, an der Maus-Position
      If MouseHit(1) Then
         Gui_Element=Button_Overlap(MMX,MMY)
         If Gui_Element <> 0 Then ; nur wenn ein Knopf gedrückt wurde reagieren
            Maus_auf_Gui_angewandt=1
            If Gui_Element = btn_neu Then load_map()
            If Gui_Element = btn_save Then
            Get_Data_Name()
            Save_map(Chat_Rueckgabe$)
         End If
         If Gui_Element = btn_laden Then
            Get_Data_Name()
            load_map(Chat_Rueckgabe$)
         End If
         If Gui_Element = btn_beenden Then Save_map("Last_Change.tmp"): End ; Notspeichern und beenden
         If Gui_Element = btn_next Then Tile_Auswahl=Tile_Auswahl+1:Image_Wechsel= 1
         If Gui_Element = btn_last Then Tile_Auswahl=Tile_Auswahl-1:Image_Wechsel= 1

         If Image_Wechsel= 1 Then ; wenn das tile gewechselt wurde, Bild ändern,überprüfen
            If Tile_Auswahl<0 Then Tile_Auswahl=Max_Tile-1
            If Tile_Auswahl>Max_Tile-1 Then Tile_Auswahl=0
            Tile_in_Button_Zeichnen(btn_fenster) ; Tile in Button Zeichnen
            Image_Wechsel=0
         End If
      End If
   End If
   If MouseDown(1)
      If Gui_Element + Maus_auf_Gui_angewandt=0 Then
         Map(Tile_X-Map_X,Tile_Y-Map_Y)=Tile_Auswahl ;ansonsten, Tile setzten
      End If
   Else
      Maus_auf_Gui_angewandt=0
   End If
End Function

Function Load_Map(MapName$="")
   Local Tile_X,Tile_Y
   If MapName$<>"" Then ; Lädt, wenn ein Map Name angegeben wurde
      Read_Datei=ReadFile(MapName$)
      If read_Datei <> 0 Then ; Falls, keine Datei davon vorhanden, wird nicht geladen, sondern neue erstellt
         TileSetDatei$ = ReadLine$(Read_Datei)
         For Tile_X = 0 To Map_Width
            For Tile_Y = 0 To Map_Height
               Map(Tile_X,Tile_Y) = ReadInt(Read_Datei)
            Next
         Next
         CloseFile Read_Datei
      Else
         MapName$ = ""
      EndIf
   End If
   If MapName$="" Then ; Falls keine Map vorhanden ist, neue erstellen
      For Tile_X = 0 To Map_Width
         For Tile_Y = 0 To Map_Height
            Map(Tile_X,Tile_Y) = 0 ; Macht bei allen Tiles, Bild "0"
         Next
      Next

      TileSetDatei$ = "tiles.bmp"; Wird Später noch aus der Datei gelesen
   End If

   Return TileSetDatei$
End Function

Function Save_Map(Mapname$="temp.map") ;Speichert die Map
   Local Tile_X,Tile_Y
   Map_X=0:Map_Y=0 ; wenn ne map geladen wurde, wirder Oben links anzeigen!
   Write_Datei=WriteFile (Mapname$)
   WriteLine Write_datei, TileSetDatei$ ; Speichert Tile-set Name
   For Tile_X = 0 To Map_Width
      For Tile_Y = 0 To Map_Height
         WriteInt Write_Datei,Map(Tile_X,Tile_Y)
      Next
   Next
   CloseFile(Write_Datei)
End Function

Function Draw_Tiles(X=0,Y=0)
   Local Tile_X,Tile_Y
   For Tile_X = 0 To Map_Width
      For Tile_Y = 0 To Map_Height
         DrawBlock Tileset,(X+Tile_X)*TileSize,(Y+Tile_Y)*TileSize,Map(Tile_X,Tile_Y) ;Zeichnet, die Tiles
      Next
   Next
End Function

Function Load_Medias()
   Local Read_Image    
   ;------------------------------------------------------------------------------------
   ;Hiermit ermitteln wir, wieviele Tiles in einen Bild sind,
   ;indem wir, (X_pixel * Y_Pixel)/ 32² rechnen
   Read_Image=LoadImage("GFX\Tilesets\"+TileSetDatei$)
   Max_Tile=(ImageWidth(Read_Image)/TileSize)*(ImageHeight(Read_Image)/TileSize)
   FreeImage Read_Image
   ;------------------------------------------------------------------------------------
   If Mouse_GFX <> 0 Then FreeImage Mouse_GFX ; Löschen, wenn schon vorhanden!
   Mouse_GFX = LoadImage("GFX\Pointer.bmp") ; Lädt mauszeiger
   MaskImage Mouse_GFX,255,0,255 ;schneidet die Lilanen Stellen aus dem Bild heraus
   If Tileset <> 0 Then FreeImage Tileset ; Löschen, wenn schon vorhanden!
   Tileset = LoadAnimImage("GFX\Tilesets\"+TileSetDatei$,TileSize, TileSize, 0, Max_Tile) ;Lädt das Tile-set
End Function

Function Tile_in_Button_Zeichnen(Button)
   SetBuffer ImageBuffer(Button); wir Zeichnen direckt in den Knopf das ausgewählte Tile herein!
   DrawBlock tileset,2,2,Tile_Auswahl
   SetBuffer BackBuffer()
End Function

Function Get_Data_Name()
   Chat_Rueckgabe$ = BTLoadFile$("Laden",CurrentDir() ,"Map Dateien")
End Function
between angels and insects

Jan_

Ehemaliger Admin

BeitragDo, Apr 01, 2004 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Neuer Tag, neues glück, version 11:

-Tilesetauswahl
-Variable Mapgrößen
-Variable Tile Set größen
-Dateiformat änderungen

Code: [AUSKLAPPEN]
;Rechtschreibe Fehler sind absichtlcih und dienen der Belustigung!
Include "GUI.bb" ; So, da laden wir unsere Libary

;Configurationen Laden
ConfigDatei=ReadFile ("config.cfg")
X_Aufloesung = ReadLine(ConfigDatei)
Y_Aufloesung = ReadLine(ConfigDatei)
Farbtiefe = ReadLine(ConfigDatei)
Fenstermodus = ReadLine(ConfigDatei)
CloseFile ConfigDatei


;Grafik initialisieren
Graphics X_Aufloesung,Y_Aufloesung,Farbtiefe,Fenstermodus
HidePointer ; Damit verstecken wir die Maus!

;Arreys und Globals
Global Map_Width = 31, Map_Height = 31 ; Map höhe und breite
Dim Map(0,0)
Global G2W = GraphicsWidth()/2,G2H = GraphicsHeight()/2 ; Variablen, damit es nicht jedesmal neu berechnet werde muss
Global Tileset, TileSetDatei$
Global Tile_Auswahl
Global Mouse_GFX ; Mausbild
Global Max_Tile
Global Map_X,Map_Y ; Position des Bildschirms


Global TileSize = 32 ; Setzt die Tile größe!

Global btn_next_size1, btn_last_size1, btn_next_size2, btn_last_size2, btn_ok; Gui Buttons, für die Mapsize

Global btn_Save,btn_Neu,btn_Laden,Btn_Beenden;Gui Buttons ihre Handels
Global btn_next,btn_last,Btn_Fenster;Gui Buttons ihre Handels
Global Maus_auf_Gui_angewandt ; wird gebraucht, weil sonst etwas sehr unschönes passiert!

;Tasten
Const Key_Plus = 78
Const Key_Minus = 74
Const Key_F5 = 63
Const Key_UP = 200
Const Key_Left = 203
Const Key_Right = 205
Const Key_Down = 208


Get_Data_Name()
Load_Map(Chat_Rueckgabe$);Lädt Map

;load medias
Load_Medias()

;Gui Erstellen
btn_beenden=Create_Button("Beenden des Editor",10,160)
btn_Neu=Create_Button("Neues Level",10,10)
btn_Save=Create_Button("Level Speichern",10,60)
btn_Laden=Create_Button("Level Laden",10,110)
btn_next=Create_Button("Nächstes Tile",GraphicsWidth()-150,10)
btn_last=Create_Button("Vorheriges Tile",GraphicsWidth()-150,110)
btn_fenster=Create_Button("",GraphicsWidth()-150,50,36,36) ; So, in dieses Fenster, kommt das Aktuelle Tile immer rein!
Tile_in_Button_Zeichnen(btn_fenster) ; Das wir am anfang, schon das tile im Button haben

;hintergrund setzten
SetBuffer BackBuffer()

Local X,Y
Local MMX,MMY
Local R,G,B,Rae=1,Gae=2,Bae=3
Repeat
   Keyboard()
   MMX= MouseX() : MMY = MouseY()
   ;------------------------------------------------------
   ;Kleiner Optisch schöner Effekt aber sonst kaum nutzten
   R=R+Rae
   G=G+Gae
   B=B+Bae
   If R> 255 Then R= 255: Rae = Rand(-5,-1)
   If G> 255 Then G= 255: Gae = Rand(-5,-1)
   If B> 255 Then B= 255: Bae = Rand(-5,-1)
   If R< 0 Then R= 0: Rae = Rand(1,5)
   If G< 0 Then G= 0: Gae = Rand(1,5)
   If B< 0 Then B= 0: Bae = Rand(1,5)
   Color R,G,B
   ;------------------------------------------------------
   Cls
   Draw_tiles(Map_X,Map_Y) ; Zeichnet die Tiles
   Mouse(MMX,MMY) ; Aufrufen, der Maus Zeichenfunction
   Gui_Control ; Zeichnet die Knöpfe
   Text G2W,0,"RPG Editor - Entwicklungsstufe 11",1
   Text G2W,15,"-Ein Tutorial von Jan Kuhnert-",1
   Text G2W,30,"-Thema: Daten für Neue Map-",1
   DrawImage Mouse_GFX,MMX,MMY
   Flip(True)
   Until KeyHit(1)
Save_map("Last_Change.tmp") ; notspeichern
End

Function Keyboard()
   If KeyHit(Key_F5) Then Save_Map
   ;Bewegen der Karte bei Cursortastendruck!
   ;---------------------------------------------
   If Map_Y < 0 ;Wenn im Spielfeld bereich die Maus ist!
      If KeyDown(Key_UP) Then Map_Y= Map_Y+1
   End If
   If Map_Y > -Map_Width +(G2H / (TileSize/2))
      If KeyDown(Key_DOWN) Then Map_Y= Map_Y-1
   End If
   If Map_X < 0
      If KeyDown(Key_LEFT) Then Map_X= Map_X+1
   End If
   If Map_X > -Map_Height+(G2W / (TileSize/2))
      If KeyDown(Key_RIGHT) Then Map_X= Map_X-1
   End If

;---------------------------------------------
End Function

Function Mouse(MMX,MMY)
   Local Tile_X,Tile_Y
   Local Image_Wechsel, Gui_Element
   Tile_X = Int(MMX/TileSize)
   Tile_Y = Int(MMY/TileSize)
   Text 0,200,(Tile_X-Map_X) + " x " + (Tile_Y-Map_Y)
   DrawBlock tileset,Tile_X*TileSize,Tile_Y*TileSize,Tile_Auswahl ;Zeichnet den Block, an die Mausposition, befohr er gesetzt wurde
   DrawImage Mouse_GFX,MMX,MMY
   Rect Tile_X*TileSize-1,Tile_Y*TileSize-1,TileSize+2,TileSize+2,0 ; 4Eck noch etwas vergrößern
   Rect Tile_X*TileSize,Tile_Y*TileSize,TileSize,TileSize,0 ; Zeichnet Das 4Eck, an der Maus-Position
      If MouseHit(1) Then
         Gui_Element=Button_Overlap(MMX,MMY)
         If Gui_Element <> 0 Then ; nur wenn ein Knopf gedrückt wurde reagieren
            Maus_auf_Gui_angewandt=1
            If Gui_Element = btn_neu Then load_map()
            If Gui_Element = btn_save Then
            Get_Data_Name()
            Save_map(Chat_Rueckgabe$)
         End If
         If Gui_Element = btn_laden Then
            Get_Data_Name()
            load_map(Chat_Rueckgabe$)
         End If
         If Gui_Element = btn_beenden Then Save_map("Last_Change.tmp"): End ; Notspeichern und beenden
         If Gui_Element = btn_next Then Tile_Auswahl=Tile_Auswahl+1:Image_Wechsel= 1
         If Gui_Element = btn_last Then Tile_Auswahl=Tile_Auswahl-1:Image_Wechsel= 1

         If Image_Wechsel= 1 Then ; wenn das tile gewechselt wurde, Bild ändern,überprüfen
            If Tile_Auswahl<0 Then Tile_Auswahl=Max_Tile-1
            If Tile_Auswahl>Max_Tile-1 Then Tile_Auswahl=0
            Tile_in_Button_Zeichnen(btn_fenster) ; Tile in Button Zeichnen
            Image_Wechsel=0
         End If
      End If
   End If
   If MouseDown(1)
      If Gui_Element + Maus_auf_Gui_angewandt=0 Then
         Map(Tile_X-Map_X,Tile_Y-Map_Y)=Tile_Auswahl ;ansonsten, Tile setzten
      End If
   Else
      Maus_auf_Gui_angewandt=0
   End If
End Function

Function Load_Map(MapName$="")
   Local Tile_X,Tile_Y
   If MapName$<>"" Then ; Lädt, wenn ein Map Name angegeben wurde
      Read_Datei=ReadFile(MapName$)
      If read_Datei <> 0 Then ; Falls, keine Datei davon vorhanden, wird nicht geladen, sondern neue erstellt
         TileSetDatei$ = ReadLine$(Read_Datei)
         Map_Width = ReadInt(Read_Datei)
         Map_height = ReadInt(Read_Datei)
         Dim Map(Map_Width,Map_Height)
         Tile_size = ReadInt(Read_Datei)
         For Tile_X = 0 To Map_Width
            For Tile_Y = 0 To Map_Height
               Map(Tile_X,Tile_Y) = ReadInt(Read_Datei)
            Next
         Next
         CloseFile Read_Datei
      Else
         MapName$ = ""
      EndIf
   End If
   If MapName$="" Then ; Falls keine Map vorhanden ist, neue erstellen
;      btn_next_size, btn_last_size, btn_ok
      Get_Map_Daten()
      Dim Map(Map_Width,Map_Height)
      For Tile_X = 0 To Map_Width
         For Tile_Y = 0 To Map_Height
            Map(Tile_X,Tile_Y) = 0 ; Macht bei allen Tiles, Bild "0"
         Next
      Next

      
   End If

   Return TileSetDatei$
End Function

Function Save_Map(Mapname$="temp.map") ;Speichert die Map
   Local Tile_X,Tile_Y
   Map_X=0:Map_Y=0 ; wenn ne map geladen wurde, wirder Oben links anzeigen!
   Write_Datei=WriteFile (Mapname$)
   WriteLine Write_datei, TileSetDatei$ ; Speichert Tile-set Name
   WriteInt Write_datei, Map_Width
   WriteInt Write_datei, Map_height
   WriteInt Write_datei, Tile_size
   For Tile_X = 0 To Map_Width
      For Tile_Y = 0 To Map_Height
         WriteInt Write_Datei,Map(Tile_X,Tile_Y)
      Next
   Next
   CloseFile(Write_Datei)
End Function

Function Draw_Tiles(X=0,Y=0)
   Local Tile_X,Tile_Y
   For Tile_X = 0 To Map_Width
      For Tile_Y = 0 To Map_Height
         DrawBlock Tileset,(X+Tile_X)*TileSize,(Y+Tile_Y)*TileSize,Map(Tile_X,Tile_Y) ;Zeichnet, die Tiles
      Next
   Next
End Function

Function Load_Medias()
   Local Read_Image    
   ;------------------------------------------------------------------------------------
   ;Hiermit ermitteln wir, wieviele Tiles in einen Bild sind,
   ;indem wir, (X_pixel * Y_Pixel)/ 32² rechnen
   Read_Image=LoadImage(TileSetDatei$)
   Max_Tile=(ImageWidth(Read_Image)/TileSize)*(ImageHeight(Read_Image)/TileSize)
   FreeImage Read_Image
   ;------------------------------------------------------------------------------------
   If Mouse_GFX <> 0 Then FreeImage Mouse_GFX ; Löschen, wenn schon vorhanden!
   Mouse_GFX = LoadImage("GFX\Pointer.bmp") ; Lädt mauszeiger
   MaskImage Mouse_GFX,255,0,255 ;schneidet die Lilanen Stellen aus dem Bild heraus
   If Tileset <> 0 Then FreeImage Tileset ; Löschen, wenn schon vorhanden!
   Tileset = LoadAnimImage(TileSetDatei$,TileSize, TileSize, 0, Max_Tile) ;Lädt das Tile-set
End Function

Function Tile_in_Button_Zeichnen(Button)
   SetBuffer ImageBuffer(Button); wir Zeichnen direckt in den Knopf das ausgewählte Tile herein!
   DrawBlock tileset,2,2,Tile_Auswahl
   SetBuffer BackBuffer()
End Function

Function Get_Data_Name(Name$ = "Laden",File$ = "Map Dateien")
   Chat_Rueckgabe$ = BTLoadFile$(Name$,CurrentDir() ,File$ )
End Function

Function Get_Map_Daten()
      Local ende = 0
      Local groesse = 32
      Get_Data_Name("Tileset wählen","Bilddatei")
      If Chat_Rueckgabe$ = "" Then Chat_Rueckgabe$ = "GFX\Tilesets\tiles.bmp"
      TileSetDatei$ =Chat_Rueckgabe$
      
      If Mouse_GFX <> 0 Then FreeImage Mouse_GFX ; Löschen, wenn schon vorhanden!   
      Mouse_GFX = LoadImage("GFX\Pointer.bmp") ; Lädt mauszeiger
      MaskImage Mouse_GFX,255,0,255 ;schneidet die Lilanen Stellen aus dem Bild heraus
   
      btn_next_size1=Create_Button("größer",10,10)
      btn_last_size1=Create_Button("kleiner",10,70)
      btn_next_size2=Create_Button("größer",150,10)
      btn_last_size2=Create_Button("kleiner",150,70)
      btn_ok=Create_Button("OK",10,100)
      SetBuffer BackBuffer()
      Repeat
         Cls
         If MouseHit(1) Then
            Gui_Element=Button_Overlap(MMX,MMY)
            If Gui_Element = btn_ok Then ende = 1
            If Gui_Element = btn_next_size1 Then groesse = groesse *2
            If Gui_Element = btn_last_size1 Then groesse = groesse /2
            If Gui_Element = btn_next_size2 Then size = size *2
            If Gui_Element = btn_last_size2 Then size = size /2
            If Groesse < 8 Then groesse = 8
            If Groesse > 128 Then groesse = 128
            If size < 8 Then size = 8
            If size > 2048 Then size = 2048
         End If       
         Text 10,50,"Tilesize: " + groesse
         Text 150,50,"Mapsize: " +size +"x"+size
         MMX= MouseX() : MMY = MouseY()
         Gui_Control
         DrawImage Mouse_GFX,MMX,MMY
         Flip(True)
      Until ende = 1
      Del_Gui()
      Map_Width = size-1: Map_Height = size-1
      TileSize = groesse
End Function
between angels and insects
 

Rancis^Ditch

BeitragDi, Apr 06, 2004 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Jan_ das haste echt Supi gemacht!

Es wäre nett wenn du das alles als *.rar bzw. *.zip machen würdest!

Ich würde das dann mal Uploaden!!!

Bye
Mit freundlichen Grüßen

Rancis
 

x.Force

BeitragDi, Apr 06, 2004 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
jo wird mir ein bisschen unübersichtlich Smile bitte als RAR oder ZIP

AMD Athlon XP 2000+ | 1024mb DDR-Ram | Asus Radeon 9600XT | BENQ FP757 17°Zoll TFT

Was kümmert mich mein Geschwätz von gestern? (Konrad Adenauer) -.-

Jan_

Ehemaliger Admin

BeitragMi, Sep 22, 2004 8:40
Antworten mit Zitat
Benutzer-Profile anzeigen
hat jemand noch die letzte Gui.bb?
between angels and insects

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group