Tutorial Christian Im Winkel schiesen?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Nukleus

Betreff: Tutorial Christian Im Winkel schiesen?

BeitragMo, Jan 12, 2004 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
:shock:
Auf der BB Buch CD von Rene ist ein Tutorial mit Namen Steuerung
Ein Raumschiff dreht sich um 360 Crad wenn man jetzt für waffeX und Y
X+n*Sin(Spieler\grad),Y+n*Cos(spieler\grad) bei Drawimage angibt
schaffe ich es zwar das Schussbild vor dem Raumschiff darzustellen(währen es dreht) aber
beim versuch für Waffe each Waffe oder weapon komm ich nich weiter
für Types hab ich x,y,speed,fire und Bild ist nicht animiert

wenn jemand das Tutorial um schießen erweitern könnte wär das Klasse

BBPro

BeitragMo, Jan 12, 2004 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
und dann noch bitte um gegner, powerups, scrollen, level, endgegner, hauptmenü und 3d engine erweitern wenns geht Wink
im klartext: selbst ausprobieren - nicht arbeiten lassen
cu
 

Nukleus

BeitragMo, Jan 12, 2004 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
:roll:
Ja schön und gut Avatar
das Game läuft im Moment mit 4Fach Scrolling Die Gegner KI steht schon und die Steuerung funktioniert auch anders wie beim Original (rückwärts fahren driften um die eigen Achse) da ich mich mit Types nicht besonders gut auskenne bräuchte ich entweder ein gutes Tutorial (bezüglich schießen mit New und each Eintrag) oder jemand der das besser kann

wer lust hat mitzuwirken das Spiel wird MetaliuM heißen.
Bei interesse werd ich den Sourcecode hier rein posten (Ca.8Seiten)

Markus2

BeitragDi, Jan 13, 2004 0:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Vieleicht hilft dir das weiter ...

Code: [AUSKLAPPEN]


;Rakete Ziel Blitz2D Example von Markus Rauch

;Tasten Links/Rechts steuert Schiff 1
;Maus Left schieß immer auf Schiff 2
;Maus Rechts schieß auf das Schiff wo cursor drüber ist

;MR 12.05.2003

Graphics 640,480,16,0
SetBuffer BackBuffer()

Type RaketeType
 Field px#
 Field py#
 Field dx#
 Field dy#
 Field speed#
 Field speedmax#
 Field w#
 Field range#
 Field TargetSchiff.SchiffType
 Field Staerke#
End Type

Type SchiffType
 Field Name$
 Field px#
 Field py#
 Field dx#
 Field dy#
 Field speed#
 Field speedmax#
 Field w#
 Field FarbeR
 Field FarbeG
 Field FarbeB
 Field Staerke#
 Field Sinkt
End Type

Type BumType
 Field x#,y#
 Field TargetSchiff.SchiffType
 Field TimeOut
End Type

Global Schiff.SchiffType
Global Rakete.RaketeType
Global Bum.BumType

SchiffNeu "1",320,300,260,1,200,0,255,0 ;Von hier wird geballert
SchiffNeu "2",320,100,200,2,200,255,0,0 ;Ziel
SchiffNeu "3",220,100,100,2,200,0,0,255 ;Ziel

;-------------------------------------------------------------------
MainLoop
End
;-------------------------------------------------------------------

Function MainLoop()

 Local PlayerSchiff1.SchiffType=SchiffFind("1")
 Local PlayerSchiff2.SchiffType=SchiffFind("2")

 Local mx,my

 While Not KeyHit(1)

  mx=MouseX()
  my=MouseY()

  Cls

  ;--------------------------------------------- Schiff 1 lenken

  If KeyDown(203) Then
   If PlayerSchiff1<>Null Then
    If PlayerSchiff1\Sinkt=False Then
     PlayerSchiff1\w=PlayerSchiff1\w+2
     If PlayerSchiff1\w>360 Then PlayerSchiff1\w=PlayerSchiff1\w-360
     PlayerSchiff1\dx=Sin(PlayerSchiff1\w)
     PlayerSchiff1\dy=Cos(PlayerSchiff1\w)
    EndIf
   EndIf   
  EndIf
  If KeyDown(205) Then
   If PlayerSchiff1<>Null Then
    If PlayerSchiff1\Sinkt=False Then
     PlayerSchiff1\w=PlayerSchiff1\w-2
     If PlayerSchiff1\w<0 Then PlayerSchiff1\w=PlayerSchiff1\w+360
     PlayerSchiff1\dx=Sin(PlayerSchiff1\w)
     PlayerSchiff1\dy=Cos(PlayerSchiff1\w)
    EndIf
   EndIf   
  EndIf

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

  SchiffeUpdate
  SchiffeZeigen
  BumUpdate
  BumZeigen
  RaketenUpdate
  RaketenZeigen

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

  ;Immer auf Schiff 2
  If MouseHit(1) Then
   RaketeNeu SchiffFind("1"),SchiffFind("2"),50
  EndIf
  ;Auf Schiff wo Maus ist
  If MouseHit(2) Then
   RaketeNeu SchiffFind("1"),SchiffFindXY(mx,my,40),50
  EndIf

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

  Color 255,255,255
  Oval mx-5,my-5,10,10,False

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

  Delay 20

  Flip
 Wend

 Delete Each SchiffType
 Delete Each RaketeType
 Delete Each BumType

End Function

Function SchiffNeu(Name$,px#,py#,winkel#,speed#,staerke#,r,g,b)

 ;Neues Schiff bauen

 Schiff.SchiffType=New SchiffType
 
 Schiff\Name$=Name$
 Schiff\px=px
 Schiff\py=py
 Schiff\dx=Sin(winkel)
 Schiff\dy=Cos(winkel)
 Schiff\w=winkel
 Schiff\speed=speed
 Schiff\staerke=staerke
 Schiff\FarbeR=R
 Schiff\FarbeG=G
 Schiff\FarbeB=B
 Schiff\Sinkt=False

End Function

Function SchiffeUpdate()

 ;Schiffe bewegen
 
 For Schiff.SchiffType =Each SchiffType 
  If Schiff\Sinkt=False Then
   If Schiff\Speed<Schiff\SpeedMax Then Schiff\Speed=Schiff\Speed+0.1   
   Schiff\px=Schiff\px+Schiff\dx*Schiff\speed
   Schiff\py=Schiff\py+Schiff\dy*Schiff\speed
   If Schiff\px<0 Then Schiff\px=Schiff\px+GraphicsWidth()
   If Schiff\py<0 Then Schiff\py=Schiff\py+GraphicsHeight()
   If Schiff\px>GraphicsWidth() -1 Then Schiff\px=Schiff\px-GraphicsWidth()
   If Schiff\py>GraphicsHeight()-1 Then Schiff\py=Schiff\py-GraphicsHeight()
  EndIf
 Next

End Function

Function SchiffFind.SchiffType(Name$)

 ;Schiffnamen suchen und SchiffType zurück geben
 
 For Schiff.SchiffType =Each SchiffType 
  If Schiff\Name$=Name$ Then Return Schiff
 Next

 Return Null

End Function

Function SchiffFindXY.SchiffType(px#,py#,ra#)

 ;Schiffnamen suchen und SchiffType zurück geben
 
 For Schiff.SchiffType =Each SchiffType 
  If Entf(px,py,Schiff\px,Schiff\py)<=ra Then Return Schiff
 Next

 Return Null

End Function

Function RaketeNeu(SS.SchiffType,SZ.SchiffType,staerke#)

 ;Neue Rakete starten , erstmal mit Winkel wie Schiff :-)

 If ss=Null Or sz=Null Then Return 0
 If ss=sz Then Return 0 ;auf sich selber schießen wäre doof ;-)

 Rakete.RaketeType=New RaketeType

 Rakete\px=ss\px
 Rakete\py=ss\py
 Rakete\w=ss\w
 Rakete\dx=ss\dx
 Rakete\dy=ss\dy
 Rakete\speed=0
 Rakete\speedmax=10
 Rakete\range=200
 Rakete\staerke=staerke
 Rakete\TargetSchiff=sz

 Return True

End Function

Function RaketenUpdate()

 ;Beschleunig die Rakete und bewegt sie bis der Treibstoff alle ist
 ;Dann wird sie langsamer und verschwindet

 Local Weg
 
 For Rakete.RaketeType =Each RaketeType
  Weg=0
  RaketeZielUpdate Rakete
  If Rakete\Speed<Rakete\SpeedMax Then Rakete\Speed=Rakete\Speed+0.1:If Rakete\Speed>Rakete\SpeedMax Then Rakete\Speed=Rakete\SpeedMax   
  Rakete\px=Rakete\px+Rakete\dx*Rakete\speed
  Rakete\py=Rakete\py+Rakete\dy*Rakete\speed
  If Rakete\TargetSchiff<>Null Then
   If Entf(Rakete\px,Rakete\py,Rakete\TargetSchiff\px,Rakete\TargetSchiff\py)<10 Then
    BumNew Rakete\px,Rakete\py,Rakete\TargetSchiff,Rakete\Staerke
    Weg=True
   EndIf
  EndIf
  If Rakete\range>0 Then Rakete\range=Rakete\range-Rakete\Speed ;Flugdauer begrenzen
  If Rakete\range<=0 Then
   If Rakete\Speed>0 Then Rakete\Speed=Rakete\Speed-0.25 ;kein Treibstoff mehr
   If Rakete\Speed<=0 Then Weg=True ;Hokus Pokus
  EndIf
  If Weg=True Then RaketeFree Rakete
 Next

End Function

Function RaketeFree(R.RaketeType)

 ;Rakete freigeben

 Delete R

End Function

Function RaketeZielUpdate(R.RaketeType)

 If r\TargetSchiff=Null Then Return ;Schiff gibt es nicht mehr dann einfach weiter fliegen lassen mit letztem Kurs

 ;neuen Kurs für die Rakete ausrechnen

 Local dx#,dy#

 dx=r\TargetSchiff\px-r\px
 dy=r\TargetSchiff\py-r\py

 Local wneu#
 Local walt#
 Local wd#

 walt=R\W
 wneu=ATan2(dx,dy)

 Local inc#=(r\speedmax/r\speed)*2.0+5.0

 R\W=curveangle#( wneu,walt,inc)

 r\dx=Sin(R\W)
 r\dy=Cos(R\W)

 ;Richtung zum Ziel
 ;Local l=300
 ;Color 128,128,128
 ;Line r\px,r\py,r\px+(l*r\dx) , r\py+(l*r\dy)

End Function

Function RaketenZeigen()

 ;Alle Raketen zeigen
 
 For Rakete.RaketeType =Each RaketeType
  RaketeZeigen Rakete   
 Next

End Function

Function RaketeZeigen(R.RaketeType)

 Local l#=10 ;Länge Rakete

 Color 255,255,0
 ;Schweif in die entgegengesetzte Richtung !
 Line r\px, r\py , r\px-(l*r\dx) , r\py-(l*r\dy)

 ;Punkt alt Raketenkopf :-)
 Color 255,0,0
 Plot r\px,r\py

End Function

Function SchiffeZeigen()

 ;Zeigt alle Schiffe

 For Schiff.SchiffType =Each SchiffType
  SchiffZeigen Schiff   
 Next

End Function

Function SchiffZeigen(S.SchiffType)

 ;zeichnet das Schiff

 Local l=20 ;Schiff länge

 If S\Sinkt=False Then
  Color s\FarbeR,s\FarbeG,s\FarbeB
 Else
  Color 128,128,128
 EndIf
 Line s\px,s\py,s\px-s\dx*l,s\py-s\dy*l

 ;Kopf des Schiffes
 Color 255,255,255
 Plot s\px,s\py

End Function

Function BumNew(x,y,S.SchiffType,Staerke#)

 ;Neuen Treffer zeigen und Ziel an Staerke abziehen , wenn Ziel kaputt dann wird Schiff\Sinkt=True
 
 Bum.BumType=New BumType

 Bum\TimeOut=100
 Bum\x=x
 Bum\y=y
 Bum\TargetSchiff=s
 If Bum\TargetSchiff\Staerke>0 Then
  Bum\TargetSchiff\Staerke=Bum\TargetSchiff\Staerke-Staerke
  If Bum\TargetSchiff\Staerke<=0 Then Bum\TargetSchiff\Staerke=0:Bum\TargetSchiff\Sinkt=True
 EndIf

End Function

Function BumUpdate()

 ;Treffer sollen nicht ewig sichtbar sein

 For Bum.BumType=Each BumType
  If Bum\TimeOut>0 Then
   Bum\TimeOut=Bum\TimeOut-1
  Else
   Delete Bum
  EndIf
 Next

End Function

Function BumZeigen()

 ;Treffer zeigen

 Local x#,y#

 For Bum.BumType=Each BumType
 
  Color 255,255,0
 
  x=Bum\x
  y=Bum\y
   
  Oval x-4,y-4,8,8

 Next

End Function

Function curveangle#(newangle#,oldangle#,increments#)

 ;Elegante Lösung um die Winkel differenz heraus zu bekommen
 ;Mit increments kann man die gesamt Winkeldifferenz teilen das kleine Schritte möglich sind

 If (oldangle+360)-newangle<NEWANGLE-OLDANGLE Then OLDANGLE=360+OLDANGLE
 If (newangle+360)-oldangle<OLDANGLE-NEWANGLE Then NEWANGLE=360+NEWANGLE
 oldangle=oldangle-(oldangle-newangle)/increments
 Return oldangle

End Function

Function Entf#(x1#,y1#,x2#,y2#)

 ;Entfernung zwischen Punkt 1 und 2

 Local dx#,dy#

 dx=x2-x1
 dy=y2-y1

 Return Sqr(dx*dx+dy*dy)

End Function

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group