360 grad schiesseen?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Padde@gameworker

Betreff: 360 grad schiesseen?

BeitragSa, März 12, 2005 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Tach Leute! Ich mache gerade ein Raumschiff Spiel, das man mit der TastATUr steuert! Man dreht das Raumschuff mit den Pfeiltasten um 360 Graad und mit Pfeiltase nach oben gibt man gas!nun will ich eine schussfunktion einbauen, deren Schüsse immer dorthingehen, wo die "nase" des Raumschiffs ist! kann mir jemand den Code so verändern, dass das klappt? thx Very Happy
Code: [AUSKLAPPEN]

AppTitle "Starcommander 1"
;grafiken
Graphics 1024,768,32,1
SetBuffer=BackBuffer()
TFormFilter 1
AutoMidHandle 1
SeedRnd MilliSecs()

;Globalen
Dim player(360)   ;Spieler malen
For gr=0 To 359   ;Grade berechnen
 player(gr)=LoadImage("gfx\player_ship.bmp")
 RotateImage player(gr),gr
 Cls
 DrawBlock player(gr),400,300
 Flip
Next

;Sterne im Hintergrund malen
Dim star_grafik(3)
For x=1 To 3
 star_grafik(x)=LoadImage("gfx\star"+Str$(x)+".bmp")
Next
;Types
Type player  ;Spieler Raumschiff
 Field x#,y#,grad#
 Field spx#,spy#,maxspeed#,wendigkeit#,beschleunigung#
End Type

Type stern   ;Sterne
 Field x#,y#,tiefe#,nummer
End Type

Global spieler.player=New player ;den Spieler immer updaten
spieler\maxspeed#=5
spieler\beschleunigung#=0.05
spieler\wendigkeit#=2
For z=1 To 20
 stern.stern=New stern
 stern\x=Rand(-500,500)
 stern\y=Rand(-400,400)
 If z<=20 Then stern\tiefe#=Rnd(1,1.2):stern\nummer=1
 If z<17 Then stern\tiefe#=Rnd(0.8,1):stern\nummer=2
 If z<10 Then stern\tiefe#=Rnd(0.5,0.8):stern\nummer=3;
Origin 400,300

Next
;----------------------------------------------------------------------------------------------------
;Hauptschleife
While Not KeyHit(1);solange nicht ESC gedrückt wird
 weltliches();Hier werden Dinge wie Bildschirmlöschen und Sternemalen erledigt.
 steuerung();Hier werden die Eingaben des Spielers überprüft.
 spieler_versetzten()
 spieler_malen()
 Flip
Wend
End

Function weltliches()
 Cls
 Cls
  For stern.stern=Each stern
stern\x#=stern\x#-spieler\spx#*stern\tiefe#
   stern\y#=stern\y#-spieler\spy#*stern\tiefe#
   If stern\x<-500 Then stern\x=Rand(500,600):stern\y=Rand(-400,400)
   If stern\x>500 Then stern\x=Rand(-500,-600):stern\y=Rand(-400,400)
   If stern\y<-400 Then stern\x=Rand(-500,500):stern\y=Rand(400,500)
   If stern\y>400 Then stern\x=Rand(-500,500):stern\y=Rand(-500,-400)
    If stern\x>-420 And stern\x<420 And stern\y>-320 And stern\y<320 Then DrawImage star_grafik(stern\nummer),stern\x#,stern\y#
  Next
End Function

;--------------------------------------------------------------------------------------------------

Function steuerung()
 If KeyDown(203)Then spieler\grad#=spieler\grad-spieler\wendigkeit#
 If KeyDown(205)Then spieler\grad#=spieler\grad+spieler\wendigkeit#
If spieler\grad#>=360 Then spieler\grad#=spieler\grad# Mod 360
If spieler\grad#<0 Then spieler\grad#=360+spieler\grad#

 If KeyDown(200) Then
  If spieler\spx#<Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#+Abs(Cos(spieler\grad#)*spieler\beschleunigung#)
  If spieler\spx#>Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#-Abs(Cos(spieler\grad#)*spieler\beschleunigung#)

  If spieler\spy#<Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#+Abs(Sin(spieler\grad#)*spieler\beschleunigung#)
  If spieler\spy#>Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#-Abs(Sin(spieler\grad#)*spieler\beschleunigung#)
 End If
End Function

Function spieler_versetzten()
 spieler\x#=spieler\x#+spieler\spx#
 spieler\y#=spieler\y#+spieler\spy#

End Function

Function spieler_malen()
 DrawImage player(Int(spieler\grad#)),0,0

End Function
---gameworker.ch.vu---
 

Lion

BeitragSa, März 12, 2005 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaube kaum das das einfach mal so wer macht!aber was solls...kannst ja warten Smile aber wahrscheinlich sehr sehr lange!vill findet sich dann ja doch wer... Rolling Eyes

mfg
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x

matte

BeitragSa, März 12, 2005 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau dir mal den Thread: "Winkel: Steuerungsfehler" in diesem Forum an, ist ein ähnliches Problem. Die wichtigen Zeilen sind.


xschuss=xschuss+Faktor*cos(winkel)
yschuss=yschuss-Faktor*sin(winkel)
DrawImage Schuss, xschuss,yschuss

Musst dir nur den Winkel noch ausdenken (0 grad: Nase zeigt nach rechts, 90 grad: Nase zeigt nach oben, 135 Grad: Nase nach schräg links...). Faktor ist die Schussgeschwindigkeit. So jetzt hast du einen Anfang. Den Rest kannst du selber erledigen.

Artemis

BeitragSa, März 12, 2005 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
übrigens gewähn dir an diene codes als bbcode zu machen!!!!
 

Kifferopa

Gast

Betreff: Re: 360 grad schiesseen?

BeitragSa, März 12, 2005 20:52
Antworten mit Zitat
BlitzBasic: [AUSKLAPPEN]

AppTitle \"Starcommander 1\"
;grafiken
Graphics 1024,768,32,1
SetBuffer=BackBuffer()
TFormFilter 1
AutoMidHandle 1
SeedRnd MilliSecs()

Rakete = LoadImage(\"Rakete.bmp\")
Dim Rak(2,100)

;Globalen
Dim player(360) ;Spieler malen
For gr=0 To 359 ;Grade berechnen
player(gr)=LoadImage(\"gfx\player_ship.bmp\")
RotateImage player(gr),gr
Cls
DrawBlock player(gr),400,300
Flip
Next

;Sterne im Hintergrund malen
Dim star_grafik(3)
For x=1 To 3
star_grafik(x)=LoadImage(\"gfx\star\"+Str$(x)+\".bmp\")
Next
;Types
Type player ;Spieler Raumschiff
Field x#,y#,grad#
Field spx#,spy#,maxspeed#,wendigkeit#,beschleunigung#
End Type

Type stern ;Sterne
Field x#,y#,tiefe#,nummer
End Type

Global spieler.player=New player ;den Spieler immer updaten
spieler\maxspeed#=5
spieler\beschleunigung#=0.05
spieler\wendigkeit#=2
For z=1 To 20
stern.stern=New stern
stern\x=Rand(-500,500)
stern\y=Rand(-400,400)
If z<=20 Then stern\tiefe#=Rnd(1,1.2):stern\nummer=1
If z<17 Then stern\tiefe#=Rnd(0.8,1):stern\nummer=2
If z<10 Then stern\tiefe#=Rnd(0.5,0.8):stern\nummer=3;
Origin 400,300

Next
;----------------------------------------------------------------------------------------------------
;Hauptschleife
While Not KeyHit(1);solange nicht ESC gedrückt wird
weltliches();Hier werden Dinge wie Bildschirmlöschen und Sternemalen erledigt.
steuerung();Hier werden die Eingaben des Spielers überprüft.
spieler_versetzten()
spieler_malen()
Flip
Wend
End

If KeyHit(28) Then ;Enter
Schuss = Schuss + 1
If Schuss = 100 Then Schuss = 0
Rak(Schuss,0) = 1
Rak(Schuss,1) = X+1 ;Die X-Position des Schiffes
Rak(Schuss,2) = Y-19 ;Die X-Position des Schiffes
EndIf

For T = 1 To 100
If Rak(T,1) < 0 Then Rak(T,0) = 0
If Rak(T,0) = 1 Then
DrawImage Rakete, Rak(T,1),Rak(T,2)
Rak(T,2) = Rak(T,2) - 10
EndIf
Next

Function weltliches()
Cls
Cls
For stern.stern=Each stern
stern\x#=stern\x#-spieler\spx#*stern\tiefe#
stern\y#=stern\y#-spieler\spy#*stern\tiefe#
If stern\x<-500 Then stern\x=Rand(500,600):stern\y=Rand(-400,400)
If stern\x>500 Then stern\x=Rand(-500,-600):stern\y=Rand(-400,400)
If stern\y<-400 Then stern\x=Rand(-500,500):stern\y=Rand(400,500)
If stern\y>400 Then stern\x=Rand(-500,500):stern\y=Rand(-500,-400)
If stern\x>-420 And stern\x<420 And stern\y>-320 And stern\y<320 Then DrawImage star_grafik(stern\nummer),stern\x#,stern\y#
Next
End Function

;--------------------------------------------------------------------------------------------------

Function steuerung()
If KeyDown(203)Then spieler\grad#=spieler\grad-spieler\wendigkeit#
If KeyDown(205)Then spieler\grad#=spieler\grad+spieler\wendigkeit#
If spieler\grad#>=360 Then spieler\grad#=spieler\grad# Mod 360
If spieler\grad#<0 Then spieler\grad#=360+spieler\grad#

If KeyDown(200) Then
If spieler\spx#<Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#+Abs(Cos(spieler\grad#)*spieler\beschleunigung#)
If spieler\spx#>Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#-Abs(Cos(spieler\grad#)*spieler\beschleunigung#)

If spieler\spy#<Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#+Abs(Sin(spieler\grad#)*spieler\beschleunigung#)
If spieler\spy#>Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#-Abs(Sin(spieler\grad#)*spieler\beschleunigung#)
End If
End Function

Function spieler_versetzten()
spieler\x#=spieler\x#+spieler\spx#
spieler\y#=spieler\y#+spieler\spy#

End Function

Function spieler_malen()
DrawImage player(Int(spieler\grad#)),0,0

End Function

Artemis

BeitragSa, März 12, 2005 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
*lol*
 

Kifferopa

Gast

BeitragSa, März 12, 2005 20:55
Antworten mit Zitat
Was denn lol? Meinst du: "Respekt"?

Artemis

BeitragSa, März 12, 2005 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry!!!! Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed
ich dachte du hättest das nur in bb-code kopiert!!!
Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed

Fafnir

BeitragSa, März 12, 2005 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Respekt!!!

Übrigens ich bräuchte auch mal Hilfe... kann mir bitte jemand den Code so ergänzen, daß ich einen vertikal scrollenden Shooter habe mit 12 Leveln, fünffachem Parallax-Scrolling, 20 verschiedenen Gegnern? So R-Type halt..

BlitzBasic: [AUSKLAPPEN]

Graphics 800,600,32,1
SetBuffer=BackBuffer()


End


Danke!! Razz
Werbung:
User posted image
Es sind User posted image Benutzer im Chat
 

Kifferopa

Gast

BeitragSa, März 12, 2005 21:07
Antworten mit Zitat
Neee, ich hab das getan was er wollte

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group