Levels erstellen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Orbit

Betreff: Levels erstellen

BeitragMi, Jun 28, 2006 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
mein Spaceshooter ist soweit fertig Very Happy Nur weiß ich nicht, wie ich jetzt verschiedene Levels einfügen kann. Ist es sinnvoll für jedes Level eine eigene Funktion zu machen, also wo der ganze Game-Code mit drinn ist?

fg
Orbit

Christoph

BeitragMi, Jun 28, 2006 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Aus was ist der Hintergrund?
->Tiles oder komplette Landschaften
"...jedes Level eine eigene Funktion..."?
->Willst du zufällige Landschaften mit einer Funktion erstellen?

Ich versteh deine Frage nicht richtig, kannst du das bitte nocheinmal erklären Smile ?
 

Orbit

BeitragMi, Jun 28, 2006 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meinte, dass ich dass komplette Spiel nochmal mit anderen Variablen und Levels in eine Funktion packe und die Levels mache ich mit Arrays, also nicht zufällig.

Code: [AUSKLAPPEN]

For y = 0 To 19
   For x = 0 To 19
      Read Level1(x,y)
   Next
Next

.Lvl1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
Data 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
Data 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
Data 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
Data 0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0
Data 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1


Code: [AUSKLAPPEN]

Function GameHaupt()
   Locate ScrX/2-StringWidth("Lade...")/2,ScrY/2-StringHeight("Lade...")/2
   Print "Lade..."

   Local temp_zustand = game_zustand
   
   Local SplX
   Local SplY
   Local SplHealth
   Local SplLifes
   
   SplHealth = 100
   SplLifes  = 3
   Punkte    = 0

   t = MilliSecs()+15000
   
   FlushMouse()
   FlushKeys()
   
   SetFont fntArialG

   TFormFilter 0

   ;Gegnerbild laden
   GegImage = LoadImage("gfx/Gegner.bmp")
   MaskImage GegImage,255,0,255

   ;Spielerbild laden
   SplImage = LoadImage("gfx/Spieler.bmp")
   MaskImage SplImage,255,0,255
   
   ;Schussbild laden
   SchussImg = LoadImage("gfx/Schuss.bmp")
   MaskImage SchussImg,255,0,255

   ;Gegner-Schussbild laden
   GegSchuss = LoadImage("gfx/Gegner_Schuss.bmp")
   MaskImage GegSchuss,255,0,255

   ;Meteorbild laden
   For winkel = 0 To 359
      MeteorImg(Winkel)=LoadImage("gfx/Meteor.bmp")
      RotateImage MeteorImg(Winkel),Winkel
      MaskImage MeteorImg(Winkel),255,0,255
   Next

   ;Explosionsbild laden
   Explosion = LoadImage("gfx/Explosion.bmp")
   MaskImage Explosion,255,0,255
   
   ;Schussexplosionsbild laden
   SchussExp = LoadImage("gfx/SchussExp.bmp")
   MaskImage SchussExp,255,0,255

   SplX = ScrX/2-60
   SplY = ScrY-ImageHeight(SplImage)-10

   ;Gegner und Meteoren definieren
   For y = 0 To 19
      For x = 0 To 19
         If Level1(x,y) = 1 Then
            Geg.Gegner = New Gegner
            Geg\ypos = -900+y*45
            Geg\xpos = x*40
         EndIf
         If Level1(x,y) = 2 Then
            Met.Meteor = New Meteor
            Met\ypos = -900+y*47
            Met\xpos = x*48
         EndIf
      Next
   Next
   For Geg.Gegner = Each Gegner
      Geg\health = 100
   Next

   Repeat
      Cls
      If KeyHit(1) Or KeyHit(25) Then
         game_zustand = game_pause
         CopyRect 0,0,ScrX,ScrY,0,0,FrontBuffer(),ImageBuffer(Screen)
      EndIf

      ;Die Steuerung
      SplX = MouseX()-10
      SplY = MouseY()-10

      ;Kollisionsabfragen
      If SplX > ScrX-60 Then
         SplX = ScrX-60
         ElseIf SplX < 1 Then
         SplX = 0
      EndIf
      If SplY > ScrY-40 Then
         SplY = ScrY-40
         ElseIf SplY < 1 Then
         SplY = 0
      EndIf

      ;Meteoren zeichenen
      For Met.Meteor = Each Meteor
         Met\ypos = Met\ypos+2
         Winkel = Winkel+1
         If Winkel > 359 Then Winkel = 0
         If Winkel < 0 Then Winkel = 359
         DrawImage MeteorImg(Winkel),Met\xpos,Met\ypos
         If ImagesOverlap(MeteorImg(Winkel),MouseX(),MouseY(),SplImage,Met\xpos,Met\ypos) Then
            DrawImage Explosion,Met\xpos-25,Met\ypos-25
            Delete Met.Meteor
            SplHealth = SplHealth - 50
         EndIf
      Next
   
      ;Gegner zeichnen
      For Geg.Gegner = Each Gegner
         Geg\ypos = Geg\ypos+2
         DrawImage GegImage,Geg\xpos,Geg\ypos
         If ImagesOverlap(GegImage,MouseX(),MouseY(),SplImage,Geg\xpos,Geg\ypos) Then
            DrawImage Explosion,Geg\xpos-25,Geg\ypos-25
            Delete Geg.Gegner
            SplHealth = SplHealth - 100
         EndIf
      Next
      
      ;Spieler zeichnen
      DrawImage SplImage,SplX,SplY
   
      ;Schussberechnung/Abfrage
      If MouseDown(1) Then
         s.Schuss = New Schuss
         s\xpos   = SplX+28
         s\ypos   = SplY
         s\speed  = 20
      EndIf
      For s.schuss = Each schuss
          DrawImage SchussImg,s\xpos,s\ypos
         s\ypos = s\ypos - s\speed
      Next
      For s.schuss = Each schuss
            For Geg.Gegner = Each Gegner
            If ImagesCollide(SchussImg,s\Xpos,s\Ypos,0,GegImage,Geg\Xpos,Geg\Ypos,0) Then
               DrawImage SchussExp,s\xpos,s\ypos
               Delete s
               Geg\health = Geg\health - 5
               If Geg\health = 0 Then
                  DrawImage Explosion,Geg\xpos-25,Geg\ypos-25
                  Delete Geg
                  Punkte = Punkte + 20
               EndIf
               Exit
            EndIf
         Next
      Next
   
      ;Gesundheit und Leben abziehen
      If SplHealth <= 0 Then

         SplLifes = SplLifes-1
         SplHealth = 100
      EndIf
      If SplLifes = 0 Then
         For Met.Meteor = Each Meteor
            Delete Met.Meteor
         Next
         For Geg.Gegner = Each Gegner
            Delete Geg.Gegner
         Next
         game_zustand = game_highscore
      EndIf
   
   
      If t < MilliSecs() Then
         For Met.Meteor = Each Meteor
            Delete Met.Meteor
         Next
         For Geg.Gegner = Each Gegner
            Delete Geg.Gegner
         Next
         game_zustand = game_highscore
      EndIf
   
      ;Gesundheit,Leben und Punkte anzeigen
      Color 150,0,0
      Rect 0,0,100,10,1
      Color 255,0,0
      Rect 0,0,SplHealth,10,1
      Color 255,255,255
      SetFont fntArialK
      Text 50,-2,SplHealth+"%",1
      Text 0,15,"Leben: "   + SplLifes
      Text 0,30,"Punkte: "+ Punkte

      Flip
   Until game_zustand<>temp_zustand
End Function


Also wie gesagt: Ich meinte das ganze GameHaupt() kopieren und mit anderen Variablen etc. bestücken, sodass es ein neues Level ergibt.

Christoph

BeitragMi, Jun 28, 2006 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso änderst du nicht einfach das Datafeld bei jedem Level?

(und wieso machst du die Hauptschleife in eine Funktion Question )

Hubsi

BeitragMi, Jun 28, 2006 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Das schreit ja förmlich danach in eine Datei gepackt zu werden Very Happy Also je Level eine Datei und fertig ist die Laube. So lassen sich auch mit minimalsten Ladezeiten mal eben ein paar neue Levels downloaden oder man gibt einen Leveleditor mit zum Spiel so das sich die Spieler selbst ein paar Levels zusammenschrauben und tauschen können Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Christoph

BeitragMi, Jun 28, 2006 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das schon, aber Orbit will (und das verstehe ich nicht), die Leveldatei gleich lassen und die Hauptschleife ändern.
Zitat:
...Also wie gesagt: Ich meinte das ganze GameHaupt() kopieren und mit anderen Variablen etc. bestücken, sodass es ein neues Level ergibt...

Hubsi

BeitragMi, Jun 28, 2006 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke er meinte mit Variablen einfach die Werte des Data-Felds. Wenn dem nicht so ist hat er noch viel vor sich Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Christoph

BeitragMi, Jun 28, 2006 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube ich hab zuviel zitiert. Noch mal:
Zitat:
...Ich meinte das ganze GameHaupt() kopieren...

Code: [AUSKLAPPEN]
Function GameHaupt()
   Locate ScrX/2-StringWidth("Lade...")/2,ScrY/2-StringHeight("Lade...")/2
   Print "Lade..."
   ............................................................................
   ............................................................................
      Text 50,-2,SplHealth+"%",1
      Text 0,15,"Leben: "   + SplLifes
      Text 0,30,"Punkte: "+ Punkte
      Flip
   Until game_zustand<>temp_zustand
End Function

Er will das GameHaupt() für jedes Level kopieren??
Arrow Änder für jedes Level den DATA Teil!!!

sirokuhl

BeitragMi, Jun 28, 2006 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du es ohne externe dateien machen willst
mach für jedes level ne function die das datafeld enthält
und dann ruf einfach immer die entsprechende function in der hauptschleife auf
 

Orbit

BeitragMi, Jun 28, 2006 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Vielen dank für euere Hilfe! Ich habe die Levels jetzt in Funktionen gespeichert und per Variablen nacheinander abgerufen.


Code: [AUSKLAPPEN]

Function Level1Funktion()
   For y = 0 To 19
      For x = 0 To 19
         If Level1(x,y) = 1 Then
            Geg.Gegner = New Gegner
            Geg\ypos = -900+y*45
            Geg\xpos = x*40
         EndIf
         If Level1(x,y) = 2 Then
            Met.Meteor = New Meteor
            Met\ypos = -900+y*47
            Met\xpos = x*48
         EndIf
      Next
   Next
End Function

Function Level2Funktion()
   For y = 0 To 19
      For x = 0 To 19
         If Level2(x,y) = 1 Then
            Geg.Gegner = New Gegner
            Geg\ypos = -900+y*45
            Geg\xpos = x*40
         EndIf
         If Level2(x,y) = 2 Then
            Met.Meteor = New Meteor
            Met\ypos = -900+y*47
            Met\xpos = x*48
         EndIf
      Next
   Next
End Function


aus GameLoad()
Code: [AUSKLAPPEN]

   ;Gegner und Meteoren definieren
   If Level = 1 Then Level1Funktion()
   If Level = 2 Then Level2Funktion()


GameHaupt()
Code: [AUSKLAPPEN]

      If t < MilliSecs() Then
         For Met.Meteor = Each Meteor
            Delete Met.Meteor
         Next
         For Geg.Gegner = Each Gegner
            Delete Geg.Gegner
         Next
         Level = Level+1
         If Level > lastlevel Then game_zustand = game_highscore
         GameLoad()
      EndIf

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group