Collisions

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

DaviD4D

Betreff: Collisions

BeitragDo, Jun 02, 2005 0:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi All!!

Ich habe eine Frage..

Also. ich habe zwei Objects, Geschwindigkeit deren beschreibe ich mit der Hilfe den Vektoren (also X1, Y1.. X2, Y2), das ist noch nicht alles, diese Objekte wiegen auch etwas (M1 und M2)...

und jetzt die Frage: wie berechne ich die Vektoren nach der Kollision??

danke (im Voraus) Smile
 

Dreamora

BeitragDo, Jun 02, 2005 0:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Mittels dem Impulserhaltungsgesetz sowie Reflektionsgesetzen aus der Physik.

Ist bei "theoretischen" Objekten einfach, aber bei echten 3D Objekten eine ziemliche Rechnerei und nur sehr schwer realistisch umzusetzen.

Aber wenns dich interessiert und du ein wenig C Code lesen kannst, kannst du sonst die ODE Sources nutzen um es herauszufinden.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

DaviD4D

BeitragDo, Jun 02, 2005 1:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Mittels dem Impulserhaltungsgesetz sowie Reflektionsgesetzen aus der Physik.

Ist bei "theoretischen" Objekten einfach, aber bei echten 3D Objekten eine ziemliche Rechnerei und nur sehr schwer realistisch umzusetzen.

Aber wenns dich interessiert und du ein wenig C Code lesen kannst, kannst du sonst die ODE Sources nutzen um es herauszufinden.
Hmmm....

dabei werde ich ein paar tausend Jahre verlieren.. gibts vielleicht ein eifacher Weg, um sowas rauszufinden (ein Buch vielleicht). Smile

D2006

Administrator

BeitragDo, Jun 02, 2005 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest mal genauere Ausführungen machen.

Ich nehm ja mal im Gegensatz zu Dreamora an, dass du 2D meinst.
Dann wäre halt noch die Frage, was für Objekte das sind.
Kreisförmige?

Sinnvoll wäre es dein Objekt mit Vektoren einzurahmen und dann jeweils mit den Vektoren untereinander neue zu berechnen. Beispielsweise bei einem Kreis ein 8 eckiges Vektorengeflecht.

Danach wäre halt Reflexion wichtig. So richtig Gedanken musste ich mir bisher nich darum machen. Such mal einen Radgoll Thread hier im Forum. Mich deucht, da wurde mal eine Vektorreflexion gezeigt.

MfG
D2006

Alfadur

BeitragDo, Jun 02, 2005 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
raGDoll Smile
A Cray is the only computer that runs an endless loop in less than four hours.

D2006

Administrator

BeitragDo, Jun 02, 2005 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Krümelkacker, ihr!

RagDoll natürlich.

Ich setze mich nun in die Ecke des Zimmer und schäme mich.



(... und leere nebenbei den Bierkasten, der zufällig auch dort steht.)

MfG
D2006

DaviD4D

BeitragDo, Jun 02, 2005 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:
Du könntest mal genauere Ausführungen machen.
Klar...

Ich porgrammiere so ein Spiel wie "Micromashines" (3D), da brauche ich aber keine genaue Physic-berechnungen, das Spiel ist für kleine Kinder..

Kollision der Autos organisiere ich wie "Sphere to Sphere"... also die Objekte sind Kreisformige, kann man so sagen.

warte mal, ich versuche mal alles hier zu veröfentlichen.. Smile

DaviD4D

BeitragDo, Jun 02, 2005 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
also:

Code: [AUSKLAPPEN]


Type TCar

Field Gewicht#
Field Accelerate#
Field Break#
Field Speed#
Field MaxSpeed#
Field MinSpeed#
Field QRotate#
Field DownInertion#
Field AGround#

Field CObject%
Field CObject1%

Field WObject%[4]
Field XPWheel#[4]
Field YPWheel#[4]
Field ZPWheel#[4]

Field XSpeed1#
Field YSpeed1#

Field XSpeed2#
Field YSpeed2#

Field XSpeed3#
Field YSpeed3#

Field Control% ; 1-Player, 0-Computer

Field XPos#
Field YPos#

Field xp%
Field yp%

Field CurrentWayPoint%

Field SearchStep%

Field WayIndex%
Field WayListIndex%

End Type


Const GroundForce#=-0.3

rad=1
auto=2
ground=3

AutoS=100

Dim Map (1000,1000,1)

; 0 - die Stoerungskarte
; 1 - die karte fuer berechnungen

Const XMaxMap=1000
Const YMaxMap=1000



Dim WayList(10000,4)

; 0 - Open / Close flag (0-open)
; 1 - Position X
; 2 - Position Y
; 3 - G
; 4 - H


Dim Way(10000,2)

;===================================================


Graphics3D 1024,768,32,1
;Graphics3D 800,600,32,2

SetBuffer BackBuffer()

MainCamera=CreateCamera()
RotateEntity MainCamera,30,-45,0
CameraHeigth=70

mainlight=CreateLight()
RotateEntity MainLight,15,-45,0


;WorldFloor=LoadMesh("floor.3ds")
WorldFloor=CreateTerrain(128)

EntityType WorldFloor,Ground
ScaleEntity WorldFloor,10,1,10
PositionEntity WorldFloor,0,0,0
EntityColor WorldFloor,100,100,100


;===================================================
;New Cars


Car.TCar=New TCar

Car\Gewicht=10
Car\Accelerate=0.04
Car\Break=0.8
Car\Speed=0
Car\MaxSpeed=1.5
Car\MinSpeed=-0.3
Car\QRotate=5
Car\DownInertion=0.98
Car\AGround=0

Car\Control=1

;Car\CObject=LoadMesh("jeep.3ds")
Car\CObject=CreateCube()
ScaleMesh Car\CObject,3,2,5

;Car\WObject[1]=LoadMesh("jeep (wheel).3ds",Car\CObject)
Car\WObject[1]=CreateSphere(10,Car\CObject)
Car\WObject[2]=CopyEntity(Car\WObject[1],Car\CObject)
Car\WObject[3]=CopyEntity(Car\WObject[1],Car\CObject)
Car\WObject[4]=CopyEntity(Car\WObject[1],Car\CObject)

Car\XPWheel[1]=-3.065
Car\XPWheel[2]=3.065
Car\XPWheel[3]=-3.065
Car\XPWheel[4]=3.065

Car\YPWheel[1]=3.923
Car\YPWheel[2]=3.923
Car\YPWheel[3]=-2.844
Car\YPWheel[4]=-2.844

Car\ZPWheel[1]=-5
Car\ZPWheel[2]=-5
Car\ZPWheel[3]=-5
Car\ZPWheel[4]=-5


For i=1 To 4
 PositionEntity Car\WObject[i],Car\XPWheel[i],Car\ZPWheel[i],Car\YPWheel[i]
 EntityRadius Car\WObject[i],2
Next


Car\CObject1=CreateMesh(Car\CObject)

EntityType Car\CObject,Auto
EntityRadius Car\CObject,6

For i=1 To 4
 EntityColor GetChild(Car\CObject,i),255,0,0
 EntityType GetChild(Car\CObject,i),Rad
Next


For laaas=1 To 5


Car.TCar=New TCar

Car\Gewicht=10+Rnd(-3,3)
Car\Accelerate=0.04
Car\Break=0.1
Car\Speed=0
Car\MaxSpeed=1.5+Rnd(-.02,.02)
Car\MinSpeed=-1.0   
Car\QRotate=5
Car\DownInertion=0.98
Car\AGround=0
Car\Control=0

;Car\CObject=LoadMesh("jeep.3ds")
Car\CObject=CreateCube()
ScaleMesh Car\CObject,3,2,5

;Car\WObject[1]=LoadMesh("jeep (wheel).3ds",Car\CObject)
Car\WObject[1]=CreateSphere(10,Car\CObject)
Car\WObject[2]=CopyEntity(Car\WObject[1],Car\CObject)
Car\WObject[3]=CopyEntity(Car\WObject[1],Car\CObject)
Car\WObject[4]=CopyEntity(Car\WObject[1],Car\CObject)

Car\XPWheel[1]=-3.065
Car\XPWheel[2]=3.065
Car\XPWheel[3]=-3.065
Car\XPWheel[4]=3.065

Car\YPWheel[1]=3.923
Car\YPWheel[2]=3.923
Car\YPWheel[3]=-2.844
Car\YPWheel[4]=-2.844

Car\ZPWheel[1]=-5
Car\ZPWheel[2]=-5
Car\ZPWheel[3]=-5
Car\ZPWheel[4]=-5


For i=1 To 4
 PositionEntity Car\WObject[i],Car\XPWheel[i],Car\ZPWheel[i],Car\YPWheel[i]
 EntityRadius Car\WObject[i],2
Next


EntityType Car\CObject,Auto
EntityRadius Car\CObject,6

For i=1 To 4
 EntityColor GetChild(Car\CObject,i),255,0,0
 EntityType GetChild(Car\CObject,i),Rad
Next


Next


Car.TCar=First TCar
 PositionEntity Car\CObject,20,40,80

Car= After Car
 PositionEntity Car\CObject,60,40,80
 Car\CurrentWayPoint=1
 Car\SearchStep=1

Car= After Car
 PositionEntity Car\CObject,40,40,80
 Car\CurrentWayPoint=1
 Car\SearchStep=2

Car= After Car
 PositionEntity Car\CObject,60,40,60
 Car\CurrentWayPoint=1
 Car\SearchStep=3

Car= After Car
 PositionEntity Car\CObject,20,40,60
 Car\CurrentWayPoint=1
 Car\SearchStep=4

Car= After Car
 PositionEntity Car\CObject,40,40,60
 Car\CurrentWayPoint=1
 Car\SearchStep=5




Dim WayPoint (30,2)


WayPoint(1,0)=10    ; Position X
WayPoint(1,1)=60    ; Position Y
WayPoint(1,2)=4     ; Radius

WayPoint(2,0)=80
WayPoint(2,1)=90
WayPoint(2,2)=4 

WayPoint(3,0)=70
WayPoint(3,1)=10
WayPoint(3,2)=4 

WayPoint(4,0)=10
WayPoint(4,1)=10
WayPoint(4,2)=4 

For i=1 To 10
 If WayPoint(i,2)=0 Then Exit
 t=CreateSphere()
 ScaleEntity t,2,2,2
 PositionEntity t,WayPoint(i,0)*10,4,WayPoint(i,1)*10
Next

Car.tcar= Last tcar
Car\XPos=EntityX(Car\CObject):Car\YPos=EntityZ(Car\CObject)

Collisions rad,ground,2,2
Collisions auto,ground,2,2

Collisions auto,auto,1,2


 For Car.tCar = Each tCar
  If Not Car\Control=1
   Car\XPos=EntityX(Car\CObject)
   Car\YPos=EntityZ(Car\CObject)
   Gosub WaySearcher
  EndIf
 Next


signal$=""
time#=MilliSecs()

.MainLoop

Repeat

 ffffl=0

 For Car.tCar = Each tCar

;  For Car1.tCar = Each tCar
;   If Car1\CObject<>Car\CObject
;    If EntityCollided (Car\CObject,auto)=Car1\CObject

;     ffffl=1
;    EndIf
;   EndIf
;  Next

  If Car\Control=1

   Car\XPos=EntityX(Car\CObject)
   Car\YPos=EntityZ(Car\CObject)

   If EntityCollided (Car\CObject,ground)

    If KeyDown(200) And Car\Speed<Car\MaxSpeed
     Car\Speed=Car\Speed+Car\Accelerate
    ElseIf KeyDown(208) And Car\Speed>Car\MinSpeed
     Car\Speed=Car\Speed-Car\Break
    Else
     Car\Speed=Car\Speed*Car\DownInertion
    EndIf

    If KeyDown(203) And Car\Control=1
     TurnEntity Car\CObject,0,Car\QRotate,0
    EndIf

    If KeyDown(205) And Car\Control=1
     TurnEntity Car\CObject,0,-Car\QRotate,0
    EndIf

;--------------------------------------------------------------
    FloorIndex#=.04
;--------------------------------------------------------------

    Car\XSpeed1=Car\Speed*Sin(-EntityYaw(Car\CObject))
    Car\YSpeed1=Car\Speed*Cos(EntityYaw(Car\CObject))

    Zanos#=1/(Car\Gewicht*4)+FloorIndex#

    If Car\XSpeed2<Car\XSpeed1
     Car\XSpeed2=Car\XSpeed2+Zanos#
     If Car\XSpeed2>Car\XSpeed1 Then Car\XSpeed2=Car\XSpeed1
    EndIf

    If Car\XSpeed2>Car\XSpeed1
     Car\XSpeed2=Car\XSpeed2-Zanos#
     If Car\XSpeed2<Car\XSpeed1 Then Car\XSpeed2=Car\XSpeed1
    EndIf

    If Car\YSpeed2<Car\YSpeed1
     Car\YSpeed2=Car\YSpeed2+Zanos#
     If Car\YSpeed2>Car\YSpeed1 Then Car\YSpeed2=Car\YSpeed1
    EndIf

    If Car\YSpeed2>Car\YSpeed1
     Car\YSpeed2=Car\YSpeed2-Zanos#
     If Car\YSpeed2<Car\YSpeed1 Then Car\YSpeed2=Car\YSpeed1
    EndIf

    zx#=(EntityX( Car\WObject[2],True )+EntityX( Car\WObject[4],True ))/2
    zx=zx-(EntityX( Car\WObject[1],True )+EntityX( Car\WObject[3],True ))/2
    zy#=(EntityY( Car\WObject[2],True )+EntityY( Car\WObject[4],True ))/2
    zy=zy-(EntityY( Car\WObject[1],True )+EntityY( Car\WObject[3],True ))/2
    zz#=(EntityZ( Car\WObject[2],True )+EntityZ( Car\WObject[4],True ))/2
    zz=zz-(EntityZ( Car\WObject[1],True )+EntityZ( Car\WObject[3],True ))/2
    AlignToVector Car\CObject,zx,zy,zz,1
    zx#=(EntityX( Car\WObject[1],True )+EntityX( Car\WObject[2],True ))/2
    zx=zx-(EntityX( Car\WObject[3],True )+EntityX( Car\WObject[4],True ))/2
    zy#=(EntityY( Car\WObject[1],True )+EntityY( Car\WObject[2],True ))/2
    zy=zy-(EntityY( Car\WObject[3],True )+EntityY( Car\WObject[4],True ))/2
    zz#=(EntityZ( Car\WObject[1],True )+EntityZ( Car\WObject[2],True ))/2
    zz=zz-(EntityZ( Car\WObject[3],True )+EntityZ( Car\WObject[4],True ))/2
    AlignToVector Car\CObject,zx,zy,zz,3

    TranslateEntity Car\CObject,Car\XSpeed2,(GroundForce-Car\Gewicht*0.01)*0.005,Car\YSpeed2

    Car\AGround=0

   Else

    TranslateEntity Car\CObject,Car\XSpeed2,Car\Speed*Sin(-EntityPitch(Car\CObject))*1.2,Car\YSpeed2

    If EntityPitch(Car\CObject)<40 Then TurnEntity Car\CObject,Car\Gewicht*0.08,0,0
    TranslateEntity Car\CObject,0,Car\AGround,0
    Car\AGround=Car\AGround+(GroundForce-Car\Gewicht*0.01)*0.05

   EndIf


   PositionEntity MainCamera,EntityX(Car\CObject)-30,EntityY(Car\CObject)+40,EntityZ(Car\CObject)-30

   For i=1 To 4
    PositionEntity Car\WObject[i],Car\XPWheel[i],Car\ZPWheel[i],Car\YPWheel[i]
   Next

  Else

;------------------- CPU Cars --------------------------------------------------------

   Car\XPos=EntityX(Car\CObject)
   Car\YPos=EntityZ(Car\CObject)

   If EntityCollided (Car\CObject,ground)


    WayStep=3

    Car\SearchStep=Car\SearchStep+1
    If Car\SearchStep>10
     Gosub WaySearcher
;     If Car\WayIndex<=WayStep Then Car\WayIndex=WayStep+1
     If Car\WayIndex<=WayStep Then WayStep=Car\WayIndex
     Car\xp=Way(Car\WayIndex-WayStep,0)
     Car\yp=Way(Car\WayIndex-WayStep,1)
     Car\SearchStep=0
    EndIf

    If Int(Car\XPos/10)=Car\xp And Int(Car\YPos/10)=Car\yp
     Car\WayIndex=Car\Wayindex-1
;     If Car\WayIndex<=WayStep Then Car\WayIndex=WayStep+1
     If Car\WayIndex<=WayStep Then WayStep=Car\WayIndex
    EndIf

    If Int(Sqr((WayPoint(Car\CurrentWayPoint,0)-Int(Car\XPos/10))^2+(WayPoint(Car\CurrentWayPoint,1)-Int(Car\YPos/10))^2))<WayPoint(Car\CurrentWayPoint,2)
     Car\CurrentWayPoint=Car\CurrentWayPoint+1
     If WayPoint(Car\CurrentWayPoint,2)=0
      Car\CurrentWayPoint=1
     EndIf
    EndIf

    angle#=-1*(ATan2(EntityX(Car\CObject)-(Car\xp*10),EntityZ(Car\CObject)-(Car\yp*10)))

    angle=angle+180:angle1=EntityYaw(Car\CObject)+180

    If (angle1-angle)<=180*Sgn(angle1-angle)
     TurnEntity Car\CObject,0,Car\QRotate,0
     angle1=angle1+Car\QRotate
     If (angle1-angle)>180*Sgn(angle1-angle)
      RotateEntity Car\CObject,EntityPitch(Car\CObject),angle,EntityRoll(Car\CObject)
     EndIf
    EndIf

    If (angle1-angle)>180*Sgn(angle1-angle)
     TurnEntity Car\CObject,0,-Car\QRotate,0
     angle1=angle1-Car\QRotate
     If (angle1-angle)<180*Sgn(angle1-angle)
      RotateEntity Car\CObject,EntityPitch(Car\CObject),angle,EntityRoll(Car\CObject)
     EndIf
    EndIf

    If Abs(angle1-angle)>90 And Car\Speed<Car\MaxSpeed
     Car\Speed=Car\Speed+Car\Accelerate
    ElseIf Abs(angle1-angle)<90 And Car\Speed>Car\MinSpeed
     Car\Speed=Car\Speed-Car\Break
    Else
     Car\Speed=Car\Speed*Car\DownInertion
    EndIf
 
;--------------------------------------------------------------
    FloorIndex#=.04
;--------------------------------------------------------------

    Car\XSpeed1=Car\Speed*Sin(-EntityYaw(Car\CObject))
    Car\YSpeed1=Car\Speed*Cos(EntityYaw(Car\CObject))

    Zanos#=1/(Car\Gewicht*4)+FloorIndex#

    If Car\XSpeed2<Car\XSpeed1
     Car\XSpeed2=Car\XSpeed2+Zanos#
     If Car\XSpeed2>Car\XSpeed1 Then Car\XSpeed2=Car\XSpeed1
    EndIf

    If Car\XSpeed2>Car\XSpeed1
     Car\XSpeed2=Car\XSpeed2-Zanos#
     If Car\XSpeed2<Car\XSpeed1 Then Car\XSpeed2=Car\XSpeed1
    EndIf

    If Car\YSpeed2<Car\YSpeed1
     Car\YSpeed2=Car\YSpeed2+Zanos#
     If Car\YSpeed2>Car\YSpeed1 Then Car\YSpeed2=Car\YSpeed1
    EndIf

    If Car\YSpeed2>Car\YSpeed1
     Car\YSpeed2=Car\YSpeed2-Zanos#
     If Car\YSpeed2<Car\YSpeed1 Then Car\YSpeed2=Car\YSpeed1
    EndIf

    zx#=(EntityX( Car\WObject[2],True )+EntityX( Car\WObject[4],True ))/2
    zx=zx-(EntityX( Car\WObject[1],True )+EntityX( Car\WObject[3],True ))/2
    zy#=(EntityY( Car\WObject[2],True )+EntityY( Car\WObject[4],True ))/2
    zy=zy-(EntityY( Car\WObject[1],True )+EntityY( Car\WObject[3],True ))/2
    zz#=(EntityZ( Car\WObject[2],True )+EntityZ( Car\WObject[4],True ))/2
    zz=zz-(EntityZ( Car\WObject[1],True )+EntityZ( Car\WObject[3],True ))/2
    AlignToVector Car\CObject,zx,zy,zz,1
    zx#=(EntityX( Car\WObject[1],True )+EntityX( Car\WObject[2],True ))/2
    zx=zx-(EntityX( Car\WObject[3],True )+EntityX( Car\WObject[4],True ))/2
    zy#=(EntityY( Car\WObject[1],True )+EntityY( Car\WObject[2],True ))/2
    zy=zy-(EntityY( Car\WObject[3],True )+EntityY( Car\WObject[4],True ))/2
    zz#=(EntityZ( Car\WObject[1],True )+EntityZ( Car\WObject[2],True ))/2
    zz=zz-(EntityZ( Car\WObject[3],True )+EntityZ( Car\WObject[4],True ))/2
    AlignToVector Car\CObject,zx,zy,zz,3

    TranslateEntity Car\CObject,Car\XSpeed2,(GroundForce-Car\Gewicht*0.01)*0.005,Car\YSpeed2

    Car\AGround=0

   Else

    If Int(Sqr((WayPoint(Car\CurrentWayPoint,0)-Int(Car\XPos/10))^2+(WayPoint(Car\CurrentWayPoint,1)-Int(Car\YPos/10))^2))<WayPoint(Car\CurrentWayPoint,2)
     Car\CurrentWayPoint=Car\CurrentWayPoint+1
     If WayPoint(Car\CurrentWayPoint,2)=0
      Car\CurrentWayPoint=1
     EndIf
    EndIf

    TranslateEntity Car\CObject,Car\XSpeed2,Car\Speed*Sin(-EntityPitch(Car\CObject))*1.2,Car\YSpeed2

    If EntityPitch(Car\CObject)<40 Then TurnEntity Car\CObject,Car\Gewicht*0.08,0,0
    TranslateEntity Car\CObject,0,Car\AGround,0
    Car\AGround=Car\AGround+(GroundForce-Car\Gewicht*0.01)*0.05

   EndIf

   For i=1 To 4
    PositionEntity Car\WObject[i],Car\XPWheel[i],Car\ZPWheel[i],Car\YPWheel[i]
   Next

  EndIf

 Next

 signal$="ALARM"
 While MilliSecs() < (15)+time
  signal$=""
 Wend
 time=MilliSecs()

 UpdateWorld
 RenderWorld

 Car.tcar= First tcar
 
 Text 0,0,ffffl


 Text 900,0,signal

 Flip

Until KeyHit(1)
End


.WaySearcher

Car\WayIndex=0
Car\WayListIndex=0

XObject=Car\XPos/10
YObject=Car\YPos/10

XTarget=WayPoint(Car\CurrentWayPoint,0)
YTarget=WayPoint(Car\CurrentWayPoint,1)

Car\WayListIndex=Car\WayListIndex+1
WayList(Car\WayListIndex,0)=0
WayList(Car\WayListIndex,1)=XObject
WayList(Car\WayListIndex,2)=YObject
WayList(Car\WayListIndex,3)=0
WayList(Car\WayListIndex,4)=Abs(xtarget-xobject)+Abs(ytarget-yobject)


; search...

.begn

min=9999999:Current=0:p=0
For i=1 To Car\WaylistIndex

 If Waylist(i,0)=0 Then p=1

 CurF=WayList(i,3)+WayList(i,4)

 If WayList(i,0)=0 And min>CurF
  min=CurF
  Current=i
 EndIf

Next

If p=0 Then Found=0:Goto exxt


WayList(Current,0)=1

g=WayList(Current,3)
x=Waylist(Current,1)
y=Waylist(Current,2)
r=0


For j=-1 To 1
 For i=-1 To 1

  If x+i>XMaxMap Or x+i<0 Or y+j>YMaxMap Or x+j<0 Then Goto skippp

  If i<>0 Or j<>0

   r=r+1

   If Map(x+i,y+j,0)=0

    flag=0 

    k=1
    While k<Car\WayListIndex
     If x+i=WayList(k,1) And y+j=WayList(k,2) Then flag=1:Current=k:k=Car\WayListIndex
     k=k+1
    Wend

    If flag=1 

     If WayList(Current,3)>g+1 And WayList(Current,0)=0

      Map(x+i,y+j,1)=r
      WayList(Current,0)=0
      WayList(Current,1)=x+i
      WayList(Current,2)=y+j
      WayList(Current,3)=g+1
      WayList(Current,4)=Abs(x+i-XTarget)+Abs(y+j-YTarget)

     EndIf

    Else

     Map(x+i,y+j,1)=r
     Car\WayListIndex=Car\WayListIndex+1

     WayList(Car\WayListIndex,0)=0
     WayList(Car\WayListIndex,1)=x+i
     WayList(Car\WayListIndex,2)=y+j
     WayList(Car\WayListIndex,3)=g+1
     WayList(Car\WayListIndex,4)=Abs(x+i-XTarget)+Abs(y+j-YTarget)

    EndIf

   EndIf
  EndIf

 If x+i=XTarget And y+j=YTarget Then Found=1:Goto exxt

.skippp

 Next
Next

;cccc=cccc+1:If cccc=20 Then Goto exxt

Goto begn

.exxt

Text 0,0,Found

If Not found Then Goto exxit

x=XTarget
y=YTarget

;.......................................

.beggn

Car\WayIndex=Car\WayIndex+1
Way(Car\WayIndex,0)=x
Way(Car\WayIndex,1)=y

If Map(x,y,1)=1
 y=y+1
 x=x+1
ElseIf Map(x,y,1)=2
 y=y+1
ElseIf Map(x,y,1)=3
 y=y+1
 x=x-1
ElseIf Map(x,y,1)=4
 x=x+1
ElseIf Map(x,y,1)=5
 x=x-1
ElseIf Map(x,y,1)=6
 y=y-1
 x=x+1
ElseIf Map(x,y,1)=7
 y=y-1
ElseIf Map(x,y,1)=8
 y=y-1
 x=x-1
EndIf

If x<0 Then x=0
If x>xmaxmap Then x=xmaxmap
If y<0 Then y=0
If y>ymaxmap Then y=ymaxmap

If (x=XObject And y=YObject) Then Goto exxit

;ccc=ccc+1: If ccc=7 Then Goto exxit

Goto beggn

.exxit

Return


habe die Models durch einfache Forms ersetzt.. Smile

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group