Moon lander

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

CodeMaster

Betreff: Moon lander

BeitragDi, Mai 10, 2005 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Noch so 'ne alte Fingerübung von mir, die ich in den Tiefen meines PCs
hervorgegraben habe: Moon Lander ist ein Spielchen, bei dem man
versuchen muss, eine Rakete in einen halbwegs sicheren Orbit um
den Mond zu manövrieren. Gar nicht so leicht!
BlitzBasic: [AUSKLAPPEN]
 Graphics 1024,768
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Const TOben = 200
Const TUnten = 208
Const TLinks = 203
Const TRechts = 205

Dim ParticleColor(255)
For i = 0 To 255
ParticleColor(255-i) = i * $10000 + i / 2 * $100
Next

Type Particle
Field x#
Field y#
Field direction#
Field speed#
Field distance#
End Type

Global Shuttle_x#=GraphicsWidth()-100,Shuttle_y#=GraphicsHeight()-100,Shuttle_direction#=270,Shuttle_spin#,Shuttle_XSpd#,Shuttle_YSpd#

While Not KeyDown(1)
Cls
UpdateUniverse
UpdateShuttle
UpdateParticles
Text 1,1,Shuttle_direction
Flip
Wend
End

Function UpdateUniverse()
Oval 250,250,150,150,0
Dist# = Sqr((Shuttle_x-325)^2+(Shuttle_y-325)^2)
If Dist < 500 Then
If Dist < 75 Then
ResetShuttle
Else
Shuttle_XSpd = Shuttle_XSpd + Sin(ATan2(325-Shuttle_x,325-Shuttle_y)) * (500 - Dist) / 500 / 30
Shuttle_YSpd = Shuttle_YSpd + Cos(ATan2(325-Shuttle_x,325-Shuttle_y)) * (500 - Dist) / 500 / 30
EndIf
EndIf
End Function

Function UpdateShuttle()
If KeyDown(TRechts) Then
Shuttle_Spin = Shuttle_Spin + .02
CreateParticles(Shuttle_x+Cos(Shuttle_direction-25)*15,shuttle_y+Sin(shuttle_direction-25)*15,shuttle_direction-90+Rnd(-20,20),0.7,2)
EndIf
If KeyDown(TLinks) Then
Shuttle_Spin = Shuttle_Spin - .02
CreateParticles(Shuttle_x+Cos(Shuttle_direction+25)*15,shuttle_y+Sin(shuttle_direction+25)*15,shuttle_direction+90+Rnd(-20,20),0.7,2)
EndIf
Shuttle_spin = Shuttle_spin * .9995
Shuttle_XSpd = Shuttle_XSpd * .9995
Shuttle_YSpd = Shuttle_YSpd * .9995
Shuttle_x = Shuttle_x + Shuttle_XSpd
Shuttle_y = Shuttle_y + Shuttle_YSpd
Shuttle_direction = Shuttle_direction + Shuttle_Spin
If KeyDown(TOben) Then
Shuttle_XSpd = Shuttle_XSpd + Cos(Shuttle_direction) / 50
Shuttle_YSpd = Shuttle_YSpd + Sin(Shuttle_direction) / 50
CreateParticles(Shuttle_x+Cos(Shuttle_direction+180)*15,Shuttle_y+Sin(Shuttle_direction+180)*15,Shuttle_direction+180+Rnd(-20,20),1.25)
EndIf
If KeyDown(TUnten) Then
Shuttle_XSpd = Shuttle_XSpd - Cos(Shuttle_direction) / 75
Shuttle_YSpd = Shuttle_YSpd - Sin(Shuttle_direction) / 75
CreateParticles(Shuttle_x+Cos(Shuttle_direction-25)*15,shuttle_y+Sin(shuttle_direction-25)*15,shuttle_direction-30+Rnd(-20,20),1,1)
CreateParticles(Shuttle_x+Cos(Shuttle_direction+25)*15,shuttle_y+Sin(shuttle_direction+25)*15,shuttle_direction+30+Rnd(-20,20),1,1)
EndIf
If (Shuttle_x < -100) Or (Shuttle_y < -100) Or (Shuttle_x > GraphicsWidth()+100) Or (Shuttle_y > GraphicsHeight()+100) Then ResetShuttle
If KeyHit(57) Then ResetShuttle
DrawShuttle
End Function

Function ResetShuttle()
shuttle_x = GraphicsWidth()-100
shuttle_y = GraphicsHeight()-100
shuttle_spin = 0
shuttle_direction = 270
shuttle_xspd = 0
shuttle_yspd = 0
End Function

Function DrawShuttle()
x1 = Shuttle_x + Cos(Shuttle_direction-90)*10+Cos(Shuttle_direction+180)*15
y1 = Shuttle_y + Sin(Shuttle_direction-90)*10+Sin(Shuttle_direction+180)*15
x2 = Shuttle_x + Cos(Shuttle_direction)*30
y2 = Shuttle_y + Sin(Shuttle_direction)*30
x3 = Shuttle_x + Cos(Shuttle_direction+90)*10+Cos(Shuttle_direction+180)*15
y3 = Shuttle_y + Sin(Shuttle_direction+90)*10+Sin(Shuttle_direction+180)*15
Line x1,y1,x2,y2
Line x2,y2,x3,y3
Line x3,y3,x1,y1
CreateParticles(Shuttle_x+Cos(Shuttle_direction+180)*17,Shuttle_y+Sin(Shuttle_direction+180)*17,Shuttle_direction+180+Rnd(-20,20),1,1)
End Function

Function CreateParticles(x#,y#,direction#,speed#=1,number=15)
For i = 1 To number
Particle.Particle = New Particle
Particle\x = x
Particle\y = y
Particle\direction = direction
Particle\speed = speed
Next
End Function

Function UpdateParticles()
LockBuffer()
For Particle.Particle = Each Particle
Particle\distance = Particle\distance + 1
If Particle\distance > 255 Then
Delete Particle
Else
RndDirection = Rnd(-50,50)
Particle\x = Particle\x + Cos(Particle\direction + RndDirection) * Particle\speed
Particle\y = Particle\y + Sin(Particle\direction + RndDirection) * Particle\speed
If (Particle\x < 0) Or (Particle\y < 0) Or (Particle\x > GraphicsWidth()-1) Or (Particle\y > GraphicsHeight()-1) Then
Delete Particle
Else
temp = ParticleColor(Particle\distance)
If (Rand(20) = 1) And Particle\distance < 200 Then Temp = $FFFFFF
WritePixelFast Particle\x,Particle\y,temp
EndIf
EndIf
Next
UnlockBuffer()
End Function
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102

Mr.Keks

BeitragDi, Mai 10, 2005 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
macht spaß, dafür dass es so simpel is =)
MrKeks.net
 

CodeMaster

BeitragDi, Mai 10, 2005 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Noch mehr Spaß machen die Manöver: Wenden, Looping etc etc Wink
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102

Mo

BeitragDi, Mai 10, 2005 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr cool... gefällt mir Very Happy

... wenn man erst einmal in die Umlaufbahn des "Planeten" gerät und ein halbwegs stabieles Temo hat, segelt das "Raumschiff" -ja fast schon graziös- um die Kugel herum...
...nochmal Respect für den guten Code Wink

Mo
500 Euro Studiengebühren... ich glaub ich zieh in den Wald!!!

Eine Floßfahrt die ist lustig... *sing* Wink

pokop

BeitragSa, Mai 21, 2005 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist jetzt so ziemlich der geilste Partikeleffekt, den ich je gesehen hab... Shocked

Spikespine

BeitragSa, Mai 21, 2005 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Schade, die anderen Codes in diesem Thread wurden durch das Backup gelöscht...

Hast du die noch?

Spike
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax
 

CodeMaster

BeitragDi, Mai 24, 2005 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, hab hier lange nicht mehr reingesehen. Hab den Code zwar nicht
mehr, aber der zusätzliche Grafikeffekt ist so simpel dass ich ihn
schnell wieder hinmachen kann:BlitzBasic: [AUSKLAPPEN]
Graphics 1024,768 
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Const TOben = 200
Const TUnten = 208
Const TLinks = 203
Const TRechts = 205

Dim ParticleColor(255)
For i = 0 To 255
ParticleColor(255-i) = i * $10000 + i / 2 * $100
Next

Type Particle
Field x#
Field y#
Field direction#
Field speed#
Field distance#
End Type

Global Shuttle_x#=GraphicsWidth()-100,Shuttle_y#=GraphicsHeight()-100,Shuttle_direction#=270,Shuttle_spin#,Shuttle_XSpd#,Shuttle_YSpd#

Global bild = CreateImage(GraphicsWidth(), GraphicsHeight()), rp = 1, gp = 1, bp = 1, r, g, b

While Not KeyDown(1)
Cls
UpdateShuttle
UpdateUniverse
UpdateParticles
Text 1,1,Shuttle_direction
Flip
Wend
End

Function UpdateUniverse()
Oval 250,250,150,150,0
Dist# = Sqr((Shuttle_x-325)^2+(Shuttle_y-325)^2)
If Dist < 500 Then
If Dist < 75 Then
ResetShuttle
Else
Shuttle_XSpd = Shuttle_XSpd + Sin(ATan2(325-Shuttle_x,325-Shuttle_y)) * (500 - Dist) / 500 / 30
Shuttle_YSpd = Shuttle_YSpd + Cos(ATan2(325-Shuttle_x,325-Shuttle_y)) * (500 - Dist) / 500 / 30
EndIf
EndIf
End Function

Function UpdateShuttle()
If KeyDown(TRechts) Then
Shuttle_Spin = Shuttle_Spin + .02
CreateParticles(Shuttle_x+Cos(Shuttle_direction-25)*15,shuttle_y+Sin(shuttle_direction-25)*15,shuttle_direction-90+Rnd(-20,20),0.7,2)
EndIf
If KeyDown(TLinks) Then
Shuttle_Spin = Shuttle_Spin - .02
CreateParticles(Shuttle_x+Cos(Shuttle_direction+25)*15,shuttle_y+Sin(shuttle_direction+25)*15,shuttle_direction+90+Rnd(-20,20),0.7,2)
EndIf
Shuttle_spin = Shuttle_spin * .9995
Shuttle_XSpd = Shuttle_XSpd * .9995
Shuttle_YSpd = Shuttle_YSpd * .9995
Shuttle_x = Shuttle_x + Shuttle_XSpd
Shuttle_y = Shuttle_y + Shuttle_YSpd
Shuttle_direction = (Shuttle_direction + Shuttle_Spin + 360) Mod 360
If KeyDown(TOben) Then
Shuttle_XSpd = Shuttle_XSpd + Cos(Shuttle_direction) / 50
Shuttle_YSpd = Shuttle_YSpd + Sin(Shuttle_direction) / 50
CreateParticles(Shuttle_x+Cos(Shuttle_direction+180)*15,Shuttle_y+Sin(Shuttle_direction+180)*15,Shuttle_direction+180+Rnd(-20,20),1.25)
EndIf
If KeyDown(TUnten) Then
Shuttle_XSpd = Shuttle_XSpd - Cos(Shuttle_direction) / 75
Shuttle_YSpd = Shuttle_YSpd - Sin(Shuttle_direction) / 75
CreateParticles(Shuttle_x+Cos(Shuttle_direction-25)*15,shuttle_y+Sin(shuttle_direction-25)*15,shuttle_direction-30+Rnd(-20,20),1,1)
CreateParticles(Shuttle_x+Cos(Shuttle_direction+25)*15,shuttle_y+Sin(shuttle_direction+25)*15,shuttle_direction+30+Rnd(-20,20),1,1)
EndIf
If (Shuttle_x < -100) Or (Shuttle_y < -100) Or (Shuttle_x > GraphicsWidth()+100) Or (Shuttle_y > GraphicsHeight()+100) Then ResetShuttle
If KeyHit(57) Then ResetShuttle
If r > 245 Then rp = -1
If r < 10 Then rp = 1
If g > 245 Then gp = -1
If g < 10 Then gp = 1
If b > 245 Then bp = -1
If b < 10 Then bp = 1
r = r + Rand(1) * rp
g = g + Rand(2) * gp
b = b + Rand(3) * bp
SetBuffer ImageBuffer(bild)
Color r,g,b
Line shuttle_x, shuttle_y, shuttle_x + Cos(shuttle_direction) * 20, shuttle_y + Sin(shuttle_direction) * 20
Oval shuttle_x-3, shuttle_y-3, 6, 6, 1
SetBuffer BackBuffer()
DrawBlock bild,0,0
Color 255,255,255
DrawShuttle
End Function

Function ResetShuttle()
shuttle_x = GraphicsWidth()-100
shuttle_y = GraphicsHeight()-100
shuttle_spin = 0
shuttle_direction = 270
shuttle_xspd = 0
shuttle_yspd = 0
SetBuffer ImageBuffer(bild)
Cls
SetBuffer ImageBuffer(bild)
End Function

Function DrawShuttle()
x1 = Shuttle_x + Cos(Shuttle_direction-90)*10+Cos(Shuttle_direction+180)*15
y1 = Shuttle_y + Sin(Shuttle_direction-90)*10+Sin(Shuttle_direction+180)*15
x2 = Shuttle_x + Cos(Shuttle_direction)*30
y2 = Shuttle_y + Sin(Shuttle_direction)*30
x3 = Shuttle_x + Cos(Shuttle_direction+90)*10+Cos(Shuttle_direction+180)*15
y3 = Shuttle_y + Sin(Shuttle_direction+90)*10+Sin(Shuttle_direction+180)*15
Line x1,y1,x2,y2
Line x2,y2,x3,y3
Line x3,y3,x1,y1
CreateParticles(Shuttle_x+Cos(Shuttle_direction+180)*17,Shuttle_y+Sin(Shuttle_direction+180)*17,Shuttle_direction+180+Rnd(-20,20),1,1)
End Function

Function CreateParticles(x#,y#,direction#,speed#=1,number=15)
For i = 1 To number
Particle.Particle = New Particle
Particle\x = x
Particle\y = y
Particle\direction = direction
Particle\speed = speed
Next
End Function

Function UpdateParticles()
LockBuffer()
For Particle.Particle = Each Particle
Particle\distance = Particle\distance + 1
If Particle\distance > 255 Then
Delete Particle
Else
RndDirection = Rnd(-50,50)
Particle\x = Particle\x + Cos(Particle\direction + RndDirection) * Particle\speed
Particle\y = Particle\y + Sin(Particle\direction + RndDirection) * Particle\speed
If (Particle\x < 0) Or (Particle\y < 0) Or (Particle\x > GraphicsWidth()-1) Or (Particle\y > GraphicsHeight()-1) Then
Delete Particle
Else
temp = ParticleColor(Particle\distance)
If (Rand(20) = 1) And Particle\distance < 200 Then Temp = $FFFFFF
WritePixelFast Particle\x,Particle\y,temp
EndIf
EndIf
Next
UnlockBuffer()
End Function


Viel Spaß Wink
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102
 

Schnuff

BeitragSa, Jun 04, 2005 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, die beiden codes sehen coll(nicht kalt!) aus Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group