Levels erstellen
Übersicht

OrbitBetreff: Levels erstellen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
mein Spaceshooter ist soweit fertig ![]() fg Orbit |
||
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Orbit |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso änderst du nicht einfach das Datafeld bei jedem Level?
(und wieso machst du die Hauptschleife in eine Funktion ![]() |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das schreit ja förmlich danach in eine Datei gepackt zu werden ![]() ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke er meinte mit Variablen einfach die Werte des Data-Felds. Wenn dem nicht so ist hat er noch viel vor sich ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
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?? ![]() |
||
![]() |
sirokuhl |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group