Gegner nähert sich Player

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Trunxx

Betreff: Gegner nähert sich Player

BeitragMi, Okt 20, 2004 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Ich hab ein Problem finde selbst aber keine Lösung dazu.
Und zwar habe ich ein Rect vom Computer und ein Rect vom Player.
Das Rect des Players kann (durch den Player) bewegt werden und das Rect des Computers soll ihm nachfolgen.

Jetzt habe ich aber überhaupt keine Ahnung wie ich das Lösen könnte oder wo ich Informationen zur Lösung finden kann.

Ich hoffe ihr könnt mir weiterhelfen Smile

Achja, lassen sich eigentlich zwei Rects auf Kollision prüfen? Durch einen Befehl oder muss ich Abfragen ob sich die Pixel überlagern?


Grüsse,
Trunxx

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Okt 20, 2004 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
zu 1.
Code: [AUSKLAPPEN]
if x1 < x2 then
x1 = x1 +1
else
x1 = x1 -1
end if

das gleiche noch für y
ist das einfachste .....
besser gehts mit sin und cos

zu 2
Code: [AUSKLAPPEN]
rectsoverlab ......

einfach mal in der hilfe nachsehen.....
[BB2D | BB3D | BB+]
 

zocker2150

BeitragMi, Okt 20, 2004 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

OK die Lösung ist „Nachdenken“.
Nehmen wir an einer „rennt“ vor dir weg – was machst du? – „schaust“ wo er hinrennt. Jetzt „rennst“ du hinterher.
Nun das ganze am PC. Der „Gegner“ schaut wo du bist und bewegt sich (so schnell du es ihm erlaubst) in deine Richtung – fertig. Du kennst ja die Position des "Spielers".

Kolli – klar gibt es die hier schau mal auf diese Seite http://www.blitzbase.de/4a.htm. Da gehst du auf „Image“ dann auf "ImageRectCollide" und/oder auf "ImageRectOverlap".

Edit:
Nein da war einer schneller Shocked Evil or Very Mad

Bms

BeitragMi, Okt 20, 2004 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
und ein fettes beispiel:

Code: [AUSKLAPPEN]

;"Gegner - Ki - SImulation" von bms

Graphics 640,480,16,1

;Schiff machen
;=============
TFormFilter 0
schiff=CreateImage(10,15)
SetBuffer ImageBuffer(schiff)
Line 5,0,0,14
Line 5,0,9,14
Line 0,14,9,14
Fill(5,5,$FF000000,$FF00FFFF)
RotateImage schiff,90
SetBuffer BackBuffer()


;Schiff drehen
;=============
Dim dreh(119)
For a=0 To 119
 dreh(a)=CopyImage(schiff)
 MidHandle dreh(a)
 RotateImage dreh(a),a*3
Next
FreeImage schiff


;Sterne
;=============
SeedRnd MilliSecs()
Const staranz=19
Dim stars(staranz,3)
For a=0 To staranz
 stars(a,0)=Rand(-300,940)
 stars(a,1)=Rand(-300,780)
 stars(a,2)=Rand(512)
 stars(a,3)=Rand(5)
Next


;Gegner
;=============
r=1000
Const geganz=99
Dim gegner#(geganz,3)
For a=0 To geganz
 gegner(a,0)=Rand(0-r,800+r)
 gegner(a,1)=Rand(0-r,600+r)
 gegner(a,2)=ATan2(gegner(a,1)-y#,gegner(a,0)-x#)
 gegner(a,3)=Rnd(0.5,1.8)
Next



;Gegnerbild
;=============
gegschiff=CreateImage(20,20)
SetBuffer ImageBuffer(gegschiff)
Color 0,0,255
Oval 0,0,20,20
Color 255,0,0
Rect 4,4,12,3
Rect 4,12,12,3
SetBuffer BackBuffer()
Dim gegdreh(119)
For a=0 To 119
 gegdreh(a)=CopyImage(gegschiff)
 MidHandle gegdreh(a)
 RotateImage gegdreh(a),a*3
Next
FreeImage gegschiff


;Schüsse
;=============
Dim shoots#(100,2)
schussschnell=1


;Items
;=============
Dim items(4,2)


;X,Y,g
;=============
x#=320
y#=240
g#=0
schnell=2



















;=============
;====^^^^^====
;====Start====
;=============
;=============
;=============
;=============
;====Spiel====
;====VVVVV====
;=============






















SeedRnd MilliSecs()
SetBuffer BackBuffer()




Repeat






 ;Hintergrund: Sterne
 ;=============
 Cls
 For a=0 To staranz
  ;Farbe festlegen
  Color stars(a,2)/2,stars(a,2)/2,stars(a,2)/2
  ;Stern malen
  Rect stars(a,0)-x#/stars(a,3),stars(a,1)-y#/stars(a,3),1,1
  ;Lebensdauer verkürzen
  stars(a,2)=stars(a,2)-1
  ;Star resetten
  If stars(a,2)=0 Then stars(a,0)=Rand(-300,940) : stars(a,1)=Rand(-300,780) : stars(a,2)=512
 Next



 ;Drehen
 ;=============
 If KeyDown(203)Then dr=dr-1
 If KeyDown(205)Then dr=dr+1
 If dr<0 Then dr=119
 If dr>119 Then dr=0



 ;Fahren
 ;=============
 If KeyDown(200)Then g#=g#+0.05
 If KeyDown(208)Then g#=g#-0.05
 ;Maximale Geschwindigkeit
 If g#>schnell Then g#=schnell
 If g#<-schnell/2 Then g#=-schnell/2
 ;Langsamer werden
 If g#>0 Then g#=g#-.02
 If g#<0 Then g#=g#+.02



 ;Rand
 ;=============
 ;Rechts
 If x<7 Then x=7
 ;Links
 If x>633 Then x=633
 ;Oben
 If y<7 Then y=7
 ;Unten
 If y>473 Then y=473



 ;Schießen
 ;=============
 If KeyDown(57)Then wait=wait+1
 ;schnelligk. begrenzen
 If wait>schussschnell Then wait=0
 ;Schuss
 If wait=schussschnell Then
  If shootmode>2 Then shootmode=2
  wait=0
  Select shootmode
   Case 0
    ;1 Schuss -
    shoots(nr,0)=x#
    shoots(nr,1)=y#
    shoots(nr,2)=dr*3
   Case 1
    ;2 Schüsse - -
    shoots(nr,0)=x#
    shoots(nr,1)=y#
    shoots(nr,2)=dr*3
    nr=(nr+1)Mod 101
    shoots(nr,0)=x#
    shoots(nr,1)=y#
    shoots(nr,2)=dr*3-180
   Case 2
    ;3 Schüsse -<
    shoots(nr,0)=x#
    shoots(nr,1)=y#
    shoots(nr,2)=dr*3
    nr=(nr+1)Mod 101
    shoots(nr,0)=x#
    shoots(nr,1)=y#
    shoots(nr,2)=dr*3-90
    nr=(nr+1)Mod 101
    shoots(nr,0)=x#
    shoots(nr,1)=y#
    shoots(nr,2)=dr*3+90
  End Select
  ;Nr updaten
  nr=(nr+1)Mod 101
 EndIf



 ;Shoots
 ;=============
 Color 255,0,0
 For a=0 To 100
  If shoots(a,0)+shoots(a,1)>0 Then
   ;Moven
   shoots(a,0)=shoots(a,0)+Cos#(shoots(a,2))*6
   shoots(a,1)=shoots(a,1)+Sin#(shoots(a,2))*6
   ;malen
   Oval shoots(a,0),shoots(a,1),4,4
   ;Explo??
   For b=0 To geganz
    If RectsOverlap(shoots(a,0),shoots(a,1),4,4,gegner(b,0),gegner(b,1),20,20)Then
     ;schuss weg
     shoots(a,0)=0:shoots(a,1)=0
     ;gegner reset
     gegner(b,0)=Rand(0-r,800+r)
     gegner(b,1)=Rand(0-r,600+r)
     gegner(b,2)=ATan2(gegner(b,1)-y#,gegner(b,0)-x#)
     gegner(b,3)=Rnd(schnell-1.5,schnell)
    EndIf
   Next
  EndIf
 Next



 ;Gegner
 ;=============
 Color 0,0,255
 For a=0 To geganz
  ;zum Spieler hingucken
  gegner(a,2)=(ATan2(gegner(a,1)-y#,gegner(a,0)-x#)+180)Mod 359
  ;moven
  gegner(a,0)=gegner(a,0)+Cos#(gegner(a,2))*gegner(a,3)
  gegner(a,1)=gegner(a,1)+Sin#(gegner(a,2))*gegner(a,3)
  ;bild vorbereiten
  xxx=(gegner(a,2))/3
  If xxx<0 Then xxx=119
  If xxx>119 Then xxx=0
  ;gegner malen
  DrawImage gegdreh(xxx), gegner(a,0), gegner(a,1)
 Next



 ;Items
 ;=============
 For a=0 To 4
  ;Resetten
  If items(a,0)=0 Then items(a,0)=Rand(630) : items(a,1)=Rand(470) : items(a,2)=Rand(3)-1
  ;Farbe
  Color 0,100+items(a,2)*50,0
  ;Malen
  Oval items(a,0),items(a,1),10,10
  ;Eingesammelt?
  If ImageRectOverlap(dreh(dr),x#,y#,items(a,0),items(a,1),10,10)Then
   ;Resetten
   items(a,0)=Rand(630) : items(a,1)=Rand(470) : items(a,2)=Rand(3)-1
   ;Neue Art
   fc=Rand(13)
   Select fc
    Case 1,2,3,4 schussschnell=schussschnell-1
    Case 5,6,7,8 shootmode=shootmode+1
    Case 9,10,11,12 schnell=schnell+1
   End Select
   ;Shootmode begrenzen
   If shootmode>2 Then shootmode=2
   ;Schnelligkeit begrenzen
   If schnell>6 Then schnell=6
   ;Schussschnell begrenzen
   If schussschnell<1 Then schussschnell=1
  EndIf
 Next



 ;Schiff bewegen
 ;=============
 x#=x#+Cos#(dr*3)*g#
 y#=y#+Sin#(dr*3)*g#



 ;Schiff malen
 ;=============
 DrawImage dreh(dr),x#,y#



 ;Flibben
 ;=============
 Text 0,0,"Mode: "+shootmode+" XXX Schnelligkeit: "+schnell+" XXX Schusschnelligk. "+schussschnell
 Flip 0






Until KeyHit(1)
End




















;=============
;====^^^^^====
;====Spiel====
;=============
;=============
;=============
;=============
;=Funktionen==
;====VVVVV====
;=============




















;=============
;=============
;Funktionen
;=============
;=============


Function Fill(x,y,col1,col2)
 If x>0 Then
  If ReadPixel(x-1,y)=col1 Then WritePixel x-1,y,col2 : Fill(x-1,y,col1,col2)
 EndIf
 If y>0 Then
  If ReadPixel(x,y-1)=col1 Then WritePixel x,y-1,col2 : Fill(x,y-1,col1,col2)
 EndIf
 If x<9 Then
  If ReadPixel(x+1,y)=col1 Then WritePixel x+1,y,col2 : Fill(x+1,y,col1,col2)
 EndIf
 If y<14 Then
  If ReadPixel(x,y+1)=col1 Then WritePixel x,y+1,col2 : Fill(x,y+1,col1,col2)
 EndIf
End Function
Reblonce (Jump + Run + Shoot - Game; 20 Levels): Download

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group