home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Programming / AllPlaton / Unsorted / KnockOffTest.AMOS / KnockOffTest.amosSourceCode < prev    next >
Encoding:
AMOS Source Code  |  1997-10-04  |  4.7 KB  |  149 lines

  1. 'Load Iff "dh1:knockofftest.iff",0 
  2. 'For A=0 To 31 
  3. '  Get Sprite A+1,A*16,0 To A*16+16,16 
  4. '  Hot Spot A+1,8,8
  5. 'Next  
  6. Screen Open 0,320,256,4,0
  7. Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
  8. Get Sprite Palette 
  9. For A=1 To 15 : Colour A+16,Colour(A) : Next 
  10. Palette 0,$888,$F
  11. Ink 3 : Bar 0,0 To 8,8
  12. Ink 1,0 : Extension_8_05E6 128,128,128
  13. ' Loch in der Mitte :) 
  14. Ink 0 : Extension_8_05E6 128,128,32
  15. ' Nochn Loch...
  16.  Extension_8_05E6 60,80,30
  17. RESOL=64
  18. X=20*RESOL
  19. Y=128*RESOL
  20. DREHWIN=64
  21. SCHOCK=0
  22. DI=0 : XSP=0 : YSP=0
  23. Do 
  24.   Multi Wait 
  25.   ' Auto hinmalen
  26.   Sprite 2,X Hard(X/RESOL),Y Hard(Y/RESOL),DI/2+1
  27.   ' Auto bewegen/driften lassen  
  28.   Add X,XSP
  29.   Add Y,YSP
  30.   ' Checken, ob Auto runtergefallen
  31.   If Extension_8_039E(X/RESOL,Y/RESOL)<1
  32.     X=20*RESOL : Y=128*RESOL
  33.     XSP=0 : YSP=0
  34.     SCHOCK=0
  35.   End If 
  36.   ' Mauszeiger ist das Ziel f�r das Auto 
  37.   MX=X Screen(X Mouse)*RESOL
  38.   MY=Y Screen(Y Mouse)*RESOL
  39.   ' Jetzt kommts! Noch ist der Fu� nicht aufm Gaspedal :)
  40.   BESCH=0
  41.   ' DriftDirAc ist die genaue Richtung, in die das Auto im Moment driftet
  42.   DRIFTDIRAC= Extension_8_16C2(XSP,YSP)
  43.   ' Und nun die Driftrichtung von 0 bis DREHWIN
  44.   DRIFTDIR=DRIFTDIRAC/16
  45.   ' MIDDIR war mal so ne Idee, wird aber nicht mehr ben�tigt 
  46.   ' Das Auto f�hrt ja jetzt nicht mehr in Richtung MIDDIR (Mitte des Kreises), 
  47.   ' sondern versucht genau gegen die DRIFTDIR zu lenken (ESCAPEDIR). 
  48. '  MIDDIR=Qarc(128*RESOL-X,128*RESOL-Y)/16 
  49.   ' Richtung, in die gelenkt werden soll, falls Abgrund nahe.
  50.   ESCAPEDIR=(DRIFTDIR+32) mod DREHWIN
  51.   ' Momentane Geschwindigkeit des Autos. 
  52.   SPEED= Extension_8_1366(XSP*XSP+YSP*YSP)
  53.   ' Winkel zwischen Ziel (Mauszeiger) und Auto.
  54.   TMP= Extension_8_16C2(MX-X,MY-Y)/16
  55.   ' Maximal m�gliche Bremsgeschwindigkeit
  56.   BREKSPEED=-4
  57.   ' Zeit (Anzahl der Schritte), die ben�tigt wird, um ganz stehen zu bleiben.  
  58.   ST0PTIME=Abs(SPEED/BREKSPEED)
  59.   ' Zeit, die ben�tigt wird, um das Auto in die richtige Richtung zu drehen. 
  60.   CHANGDIRTIME=Min(Abs(ESCAPEDIR-DI),(DREHWIN+1)-Abs(ESCAPEDIR-DI))
  61.   ' Entfernung, die zur�ckgelegt werden w�rde, bis das Auto vollst�ndig st�nde.  
  62.   DIST=Abs((CHANGDIRTIME+ST0PTIME)*SPEED+(BREKSPEED*ST0PTIME*ST0PTIME)/2)
  63.   ' Punkt auf dem Bildschirm, bei der das Auto zum stehen k�me.  
  64.   Add STPP,-1,1 To 8
  65.   TX=X+ Extension_8_1114(DRIFTDIRAC,(DIST*STPP)/8)
  66.   TY=Y+ Extension_8_1106(DRIFTDIRAC,(DIST*STPP)/8)
  67.   ' War ne Idee, klappte auch ganz gut, war aber keineswegs perfekt. 
  68. '  TX=X+XSP*ST0PTIME 
  69. '  TY=Y+YSP*ST0PTIME 
  70.   ' F�llt Auto bald runter?
  71.   ' Indikator f�r mich, damit ich seh, wo das Auto stehen bleiben w�rde. 
  72.   Sprite 4,X Hard(TX/RESOL),Y Hard(TY/RESOL),DRIFTDIR/2+1
  73.   If Extension_8_039E(TX/RESOL,TY/RESOL)<1
  74.     ' Schockiere das Auto und schick es weg. 
  75.     SCHOCK=Max(ST0PTIME+1,SCHOCK) : SCHOCKDIR=ESCAPEDIR
  76.     OSC=Rnd(1)
  77.     BESCH=4 : NNDIR=-1 : MSTP=0
  78.     Gosub TESTITALL
  79.     BESCH=-4 : Gosub TESTITALL
  80.     If NNDIR>-1
  81.       ESCAPEDIR=NNDIR : SCHOCK=2
  82.     Else 
  83.       Colour 0,Rnd(4096)
  84.     End If 
  85.     Inc STPP
  86.   Else 
  87.     ' Falls es wieder Land sieht, kann der Schock schneller abnehmen (experimentell) 
  88.     If SCHOCK : Dec SCHOCK : End If 
  89.   End If 
  90.   ' Hier k�nnte man noch was einf�gen, damit das Auto, nicht dazwischen irgendwie reinf�llt. 
  91.   '
  92.   ' Solange geschockt, soll es von der Klippe wegfahren. 
  93.   If SCHOCK Then TMP=SCHOCKDIR : Dec SCHOCK
  94.   ' ï¿½bliche und bekannte Fahr-in-die-richtige-Richtung-Routine 
  95.   D1=Abs(TMP-DI)
  96.   D2=(DREHWIN+1)-Abs(TMP-DI)
  97.   If D1>0
  98.     If D1<D2
  99.       If DI<TMP
  100.         Inc DI
  101.       Else 
  102.         Dec DI
  103.       End If 
  104.     Else 
  105.       D1=D2
  106.       If DI>TMP
  107.         Add DI,1,0 To 63
  108.       Else 
  109.         Add DI,-1,0 To 63
  110.       End If 
  111.     End If 
  112.   End If 
  113.   If D1<8 Then BESCH=4
  114. '  If D1>16 Then BESCH=-4
  115.   ' Zeigt mir, ob das Auto gerade bremst oder beschleunigt.
  116.   If BESCH=0 Then Colour 3,$F80
  117.   If BESCH>0 Then Colour 3,$F0
  118.   If BESCH<0 Then Colour 3,$F00
  119.   ' Auto beschleunigen und Reibung berechnen.
  120.   Add XSP, Extension_8_1114(DI*16,BESCH)-Sgn(XSP)
  121.   Add YSP, Extension_8_1106(DI*16,BESCH)-Sgn(YSP)
  122. Loop 
  123. End 
  124. TESTITALL:
  125.     AIMDIR=1
  126.     Repeat 
  127.       NDIR=(DI+AIMDIR*((OSC*2)-1)+DREHWIN) mod DREHWIN
  128.       XX=X : XXSP=XSP
  129.       YY=Y : YYSP=YSP
  130.       ODI=DI
  131.       For STP=1 To 25
  132.         Sprite 6,X Hard(XX/RESOL),Y Hard(YY/RESOL),ODI/2+1
  133.         If Abs(NDIR-ODI)<(DREHWIN+1)-Abs(NDIR-ODI)
  134.           Add ODI,Sgn(NDIR-ODI),0 To 63
  135.         Else 
  136.           Add ODI,Sgn(ODI-NDIR),0 To 63
  137.         End If 
  138. '        Wait Vbl  
  139.         Add XX,XXSP
  140.         Add YY,YYSP
  141.         Add XXSP, Extension_8_1114(ODI*16,BESCH)-Sgn(XXSP)
  142.         Add YYSP, Extension_8_1106(ODI*16,BESCH)-Sgn(YYSP)
  143.         Exit If Extension_8_039E(XX/RESOL,YY/RESOL)<1
  144.         If MSTP<STP : NNDIR=NDIR : MSTP=STP : End If 
  145.       Next 
  146.       OSC=1-OSC
  147.       Inc AIMDIR
  148.     Until AIMDIR>DREHWIN
  149. Return