Ergebnis 1 bis 14 von 14

Thema: Problem existiert eine Art Linked List?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #7
    *lol*
    als ich mir das ding downloadete stand Freeware drüber...(seltsam/fake?)



    @Der Drake
    "Also für Engine und Spiellogik sicherlich, aber sobald es an den Inhalt geht sind grafische Editoren praktisch Pflicht, imo.
    Oder zumindest ne Skriptsprache... du willst doch nicht ernsthaft ein komplettes Spiel mit hunderten und tausenden verschiedener Ereignisse von Hand in C(++) schreiben, oder? Du würdest vermutlich nie fertig werden."

    sind nicht pflicht, jedoch schreibe ich zu jedem Game einen eigenen Mapeditor oder modifiziere einen älteren, Ereignisse werden mit dem Mapeditor gesetzt und in mehrere Dimensionierten arrays gespeichert und durch Procedures/funktionen ausgefürt, es ist NICHT notwendig jedes Ereigniss einzeln zu schreiben, schwer zu erklären, hier ein kleiner PB_Code:

    Code:
    ;Dx, bzw Dy bestimmt die Breite/länge der map
    ;map wird erstellt, alle mit dem Tile 0
    
    Structure Held
    x.w
    y.w
    Image.w
    HP.w
    LP.w
    EndStructure
    NewList Held.Held()
    Global Held
    
    Procedure Heldplazieren()
    For x=0 To Dx
      For y=0 To Dy
        If map(x,y)=1
          AddElement(Held())
          Held()\x        =x*Tileg+Tx
          Held()\y        =y*Tileg+Ty
        EndIF
      Next
    Next
    Held()\Image  =#Hero
    Held()\HP       =100
    Held()\LP       =50
    EndProcedure
    
    
    tile=1
    
    Dim map.b(Dx,Dy) 
    For x=0 To Dx
      For y=0 To Dy
        map(x,y)=0
      Next
    Next
    
    Repeat
    
    ;Wenn Maus an Position auf der Map gedrückt entspricht das Tile der Variable tile, also 1.
    
    If MouseButton(1) And MouseX() < ((Dx+1)*Tileg) And MouseY() < ((Dy+1)*Tileg)
      map(Int((MTx/Tileg)),Int((MTy/Tileg)))=tile
    EndIf
    
    Heldplazieren()
    
    If KeyboardPushed(#PB_Key_LeftAlt) And KeyboardPushed(#PB_Key_Escape)
      End
    EndIf  
    ForEver
    So in vereinfachter Form kann man Ereignisse auf der Map plazieren, also kann ich so viele Helden, wie ich will plazieren und muss das nur einmal schreiben, normal, oder?

    Erm, wer die Sprache kann kann sich hir mal einen unfertigen Code eines Mapeditores von mir ansehen (älteres teil)

    Sprache PureBasic

    Load,Clippingroutine:
    Code:
    If Tset=1
      anzahl=28
      
      LoadSprite(0,"Gfx\Tileset1\Tileset1.bmp",0)
      LoadSprite(29,"Gfx\Tileset1\Wasser.bmp",0)
      LoadSprite(30,"Gfx\Tileset1\Unitb.bmp",0)
      LoadSprite(31,"Gfx\Tileset1\Unitb2.bmp",0)
      LoadSprite(32,"Gfx\Tileset1\infantrie1.bmp",0)
      LoadSprite(33,"Gfx\Tileset1\Infantrie2.bmp",0)
      TransparentSpriteColor(30,RGB(255,0,255))
      TransparentSpriteColor(31,RGB(255,0,255)) 
      TransparentSpriteColor(32,RGB(255,0,255))
      TransparentSpriteColor(33,RGB(255,0,255))
     
      
      For x=1 To anzahl
        If LoadSprite(x,"Gfx\Tileset1\Tileset1.bmp",0)=0
          MessageRequester("Fehler","Bild!\-1-/!",0)
        EndIf   
      Next 
      ClipSprite(1,0,0,32,32)
    EndIf
    
    For x=1 To anzahl
      ClipSprite(x+1,x*32,0,32,32)
    Next
    
    LoadSprite(99,"Gfx\Pfeil.bmp",0)
    Die Initialisation:

    Code:
    ;-Initialisation--------------------------------------
    
    If InitSprite() = 0 
      MessageRequester("Fehler", "Kann Grafik nicht Initialisieren..(DirectX7 oder höher notwendig!)", 0)
      End
    EndIf 
    
    If InitSprite3D() =0
      MessageRequester("Fehler", "3DKarte unterstützt Sp3D nicht oder DX ist nicht instaliert", 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
    
    If InitMovie() = 0
      MessageRequester("Fehler", "Kann Film nicht Initialisieren..", 0)
      End
    EndIf
    
      OpenScreen(800,600,32,"Mapeditor(Ix entertainment)")  ; Vollbildmodus, 800*600 Pixel,
    Maincode:

    Code:
    ;Author: Oliver Riehle (Ix entertainment)
    ;Date: Uninterresant
    ;Version : 0.9
    ;Name: Welteneditor, Freeware zu dem dazugehörigen Spiel
    MessageRequester("Welteneditor v.1.0","WeltenEditor Beta1 von OliverRiehle",0)
    utile=Val(InputRequester("Unterstes Tile", "Unterstes Tile12=Gras", ""))
    Dx=Val(InputRequester("Map größe", "Ausdehnung(x/y)", ""))+1
    Dy=Dx
    Tset=Val(InputRequester("Zu verwendendes Tileset", "TilesetNR:", ""));je nach dem werden Sprites geladen
    ;unitsetload
    IncludeFile"Sources/Initsystem.pb"
    
    Enumeration 
      #SaveFile 
    EndEnumeration 
    
    Dim map.b(Dx,Dy)    
    For y=0 To Dy     
      For x=0 To Dx   
        map(x,y)=utile ;utile ist Tile=$     
      Next 
    Next  
    Dim mapebene2.b(Dx,Dy)    
    For y=0 To Dy     
      For x=0 To Dx   
        mapebene2(x,y)=1     
      Next 
    Next   
    
      framedelay.l=335
      frametimer.l=0
      frame.l=0
      frames.l=2
      Timer.l = ElapsedMilliseconds()
      WieLange.l = 1000
      Bild.l = 1  
    
    IncludeFile"Sources/Load.pb"
    
    Dim felder.b(anzahl+1)
    For x=1 To anzahl+1
      felder(x)=x
    Next
    
    #Screenshot=80
    tile=1
    Tileg=32  ;Tilegröße
    
    Repeat
    
    
    ClearScreen(RGB(0,0,0))
    ExamineKeyboard()
    
    If pushed=0
      If KeyboardPushed(#PB_Key_L)
        load=1
        pushed=1
      EndIf
      If load=1 
          CloseScreen()  
          Mapname$ =OpenFileRequester("Zu ladende Map","","dat | *.*",0) 
          ReadFile(#SaveFile,Mapname$)
          utile=ReadByte(#SaveFile)
          Tset=ReadByte(#SaveFile)
          Dx=ReadByte(#SaveFile)
          Dy=ReadByte(#SaveFile)
          numer=ReadByte(#SaveFile)
          Dim map.b(Dx,Dy);über datei
          For y=0 To Dy
            For x=0 To Dx
              map(x,y)=ReadByte(#SaveFile)
            Next
          Next
          Dim mapebene2.b(Dx,Dy)
          For y=0 To Dy
            For x=0 To Dx
              mapebene2(x,y)=ReadByte(#SaveFile)
            Next
          Next    
          CloseFile(#SaveFile)    
          load=0  
        OpenScreen(800,600,32,"Mapeditor(Ix entertainment)")     
        IncludeFile"Sources/Load.pb" 
      EndIf
    EndIf  
    If KeyboardReleased(#PB_Key_L)
      pushed=0
    EndIf   
    
    If KeyboardPushed(#PB_Key_LeftControl)
      If KeyboardPushed(#PB_Key_S)
        save=1
      EndIf    
    EndIf 
    If save=1
        CloseScreen()
        Mapname$ =SaveFileRequester("Zu speichernde Map","","dat | *.*",0)
        CreateFile(#SaveFile,Mapname$)
        WriteByte(#SaveFile,utile)
        WriteByte(#SaveFile,Tset)
        WriteByte(#SaveFile,Dx)
        WriteByte(#SaveFile,Dy)
        WriteByte(#SaveFile,numer)
        For y=0 To Dy
          For x=0 To Dx
            WriteByte(#SaveFile,map(x,y))
          Next
        Next 
        For y=0 To Dy
          For x=0 To Dy
            WriteByte(#SaveFile,mapebene2(x,y))
          Next
        Next    
        CloseFile(#SaveFile) 
        OpenScreen(800,600,32,"Mapeditor(Ix entertainment)") 
        IncludeFile"Sources/Load.pb"  
        save=0
    EndIf 
    
      If pushed=0
        
        If KeyboardPushed(#PB_Key_2) 
          pushed=1
          If tile < (anzahl+1)
            tile+1
          EndIf 
        EndIf     
     
        If KeyboardPushed(#PB_Key_1) 
          pushed=1
          If tile>1
            tile-1  
          EndIf   
        EndIf 
        If KeyboardPushed(#PB_Key_3) Or MouseWheel() > 0
          pushed=1
          scroll+32
        EndIf
        
        If KeyboardPushed(#PB_Key_4) Or MouseWheel() < 0
          pushed=1
          scroll-32
        EndIf      
      EndIf      
        
    If KeyboardReleased(#PB_Key_2)
      pushed=0
    EndIf   
    If KeyboardReleased(#PB_Key_1)
      pushed=0
    EndIf
    If KeyboardReleased(#PB_Key_3)
      pushed=0
    EndIf
    If KeyboardReleased(#PB_Key_4)
      pushed=0
    EndIf
    
    If KeyboardPushed(#PB_Key_S)
      tile=72
      ebene=1
    EndIf  
    
    ExamineMouse() 
    If MouseButton(0)
      pushed=0
    EndIf 
    If ebene=0
      If MouseButton(1) And MouseX() < ((Dx+1)*Tileg) And MouseY() < ((Dy+1)*Tileg)
        map(Int((MTx/Tileg)),Int((MTy/Tileg)))=tile       
      EndIf 
      If MouseButton(2) And MouseX() < ((Dx+1)*Tileg) And MouseY() < ((Dy+1)*Tileg)
        tile=map(Int((MTx/Tileg)),Int((MTy/Tileg)))       
      EndIf 
    EndIf
    
    If ebene=1 
      If MouseButton(1) And MouseX() < ((Dx+1)*Tileg) And MouseY() < ((Dy+1)*Tileg)
        mapebene2(Int((MTx/Tileg)),Int((MTy/Tileg)))=tile
      EndIf  
    EndIf 
    
    If MouseX() > 800-64
      If MouseButton(2)
        tile=felder(Int((MouseY()-scroll)/Tileg))
      EndIf 
    EndIf
          
    
    
    If ebene=1 
      If MouseButton(2) And MouseX() < ((Dx+1)*Tileg) And MouseY() < ((Dy+1)*Tileg)
        tile=mapebene2(Int((Mtx/Tileg)),Int((MTy/Tileg)))
      EndIf
    EndIf  
    If laden=1
      laden=0
      IncludeFile"Sources/Load.pb"
    EndIf 
     
      For x=0 To Dx    ;wird die Breite bestimmen                           
        For y=0 To Dy   ;wird die Höhe bestimmen 
          If x*Tileg+Tx <= 800+32 And x*Tileg+Tx >= 0-32
            If y*Tileg+Ty <= 600+32 And y*Tileg+Ty >= 0-32                
              DisplaySprite(map(x,y),x*Tileg+Tx,y*Tileg+Ty)
            EndIf
          EndIf
        Next
      Next                               
          
      For x=0 To Dx
        For y=0 To Dy
          If x*Tileg+Tx <= 800+32 And x*Tileg+Tx >= 0-32
            If y*Tileg+Ty <= 600+32 And y*Tileg+Ty >= 0-32
              DisplayTransparentSprite(mapebene2(x,y),x*Tileg+Tx,y*Tileg+Ty)
            EndIf
          EndIf
        Next
      Next        
      
     If Qpressed=#False     
       If KeyboardPushed(#PB_Key_Q) ;Gebäude anzeigen
         Qpressed=#True
         If gebaudeanz=#True
           gebaudeanz=#False
         Else
           gebaudeanz=#True 
         EndIf
       EndIf       
     EndIf
     If KeyboardReleased(#PB_Key_Q)
       Qpressed=#False
     EndIf    
                              
     If gebaudeanz=#True     
       For x=0 To Dx
         For y=0 To Dy
           If x*Tileg+Tx <= 800+32 And x*Tileg+Tx >= 0-32
             If y*Tileg+Ty <= 600+32 And y*Tileg+Ty >= 0-32
               If mapebene2(x,y)=27                
                 DisplayTransparentSprite(30,x*Tileg+Tx,y*Tileg+Ty)
               EndIf  
               If mapebene2(x,y)=28
                 DisplayTransparentSprite(31,x*Tileg+Tx,y*Tileg+Ty)
               EndIf   
               If mapebene2(x,y)=23
                 DisplayTransparentSprite(33,x*Tileg+Tx,y*Tileg+Ty)
               EndIf
               If mapebene2(x,y)=24
                 DisplayTransparentSprite(32,x*Tileg+Tx,y*Tileg+Ty)
               EndIf    
             EndIf
           EndIf
         Next
       Next  
     EndIf 
      
      For x=1 To anzahl+1
        DisplaySprite(felder(x),800-32,x*Tileg+scroll)
      Next 
      
      ;minimap
      StartDrawing(ScreenOutput())
      Box((sichtx-1)*3,((sichty-1)+50)*3,27*3,21*3,RGB(0,0,255))
      Box(sichtx*3,(sichty+50)*3,25*3,19*3,RGB(255,0,0))
      For x=0 To Dx
        For y=0 To Dy     
          FrontColor(RGB(map(x,y)*3,map(x,y)*3,map(x,y)*3)) 
          Plot(x*3+1,(y+50)*3+1)
          Plot(x*3+1,(y+50)*3+2)
          Plot(x*3+2,(y+50)*3+1)
          Plot(x*3+2,(y+50)*3+2)
        Next
      Next
      StopDrawing()   
        
            
      
      ;{ Ladeengine  
      
      ;{ Wasser
            
            If ElapsedMilliseconds() - frametimer > framedelay
              frametimer=ElapsedMilliseconds()   
              If frame >= frames
                frameup=1
              EndIf
              If frame <= 0
                frameup=0
              EndIf
              If frameup=0
                frame+1
              Else
                frame-1 
              EndIf  
            EndIf
            
            If ElapsedMilliseconds() - Timer > WieLange.l
              Timer = ElapsedMilliseconds()
              WieLange = 1000
            EndIf
            
                
            If frame=0
              ClipSprite(29,0,0,32,32)
              Else : If frame=1
                ClipSprite(29,32,0,32,32)
                Else : If frame=2
                  ClipSprite(29,64,0,32,32)
                EndIf
              EndIf
            EndIf     
                         
      ;}
      
      ;} 
      
    
      If KeyboardPushed(#PB_Key_Left) ;Or MouseX<=0
        Tx+16
        sichtxteiler-1
      EndIf  
    
      If KeyboardPushed(#PB_Key_Up) ;Or MouseY<=0
        Ty+16
        sichtyteiler-1
      EndIf 
    
      If KeyboardPushed(#PB_Key_Right) ;Or MouseX>=800
        Tx-16
        sichtxteiler+1
      EndIf 
    
      If KeyboardPushed(#PB_Key_Down) ;Or MouseY>=600
        Ty-16
        sichtyteiler+1
      EndIf 
      
      If sichtxteiler >= 2
        sichtxteiler=0
        sichtx+1
      Else
        If sichtxteiler <= -2
          sichtxteiler=0
          sichtx-1
        EndIf
      EndIf    
      
      If sichtyteiler >= 2
        sichtyteiler=0
        sichty+1 
      Else
        If sichtyteiler <= -2
          sichtyteiler=0
          sichty-1
        EndIf
      EndIf    
      
      If KeyboardPushed(#PB_Key_D) ;Or MouseY>=600
        ebene=0
      EndIf
      
      If KeyboardPushed(#PB_Key_U) ;Or MouseY>=600
        ebene=1
      EndIf
     
    Max=MouseX() 
    May=MouseY()  
    MTx=MouseX()-Tx
    MTy=MouseY()-Ty
    DisplaySprite(tile,Max+5,May+5)
    DisplayTransparentSprite(99,Max,May)
    
    StartDrawing(ScreenOutput())
    DrawingMode(1)
    DrawText(0,0,"L=laden/Esc=ende/Str+S=Speichern/D oder U=Ebene S=SpecialTile")
    DrawText(0,15,"X="+Str(MouseX()-Tx)+"/Y="+Str(MouseY()-Ty)+"/Ebene="+Str(ebene)+"pushed"+Str(pushed))
    DrawText(0,30,"Tx= "+Str(Int(((MouseX()-Tx)/Tileg))) + "  " + "Ty= "+Str(Int(((MouseY()-Ty)/Tileg))));für special, wie Wegpunkte
    StopDrawing()
    
    FlipBuffers()
    
    If KeyboardPushed(#PB_Key_Escape)
      End
    EndIf
    ForEver    
    
    ;Executableformat Windows
    ;EOF

    Geändert von Dasix (09.06.2006 um 19:12 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •