home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-06-16 | 2.6 KB | 122 lines |
- ' ---------------------------------
- '
- ' AMOSPro Compiler Example
- '
- ' Multi-Spline's 'Snaky'
- '
- ' By Jean-Baptiste BOLCATO
- '
- ' Original by Hedwig JANSSENS
- '
- ' (c) 1993 Europress Software Ltd.
- '
- ' ---------------------------------
- '
- '
- ' --------------------------------------------
- ' Remark: A bouncing-splines-made snake
- '
- ' Average Acceleration: 510 %
- '
- ' Test configuration: A1200, 6Mb
- '
- ' Original AMOS Compiler: 350 %
- ' --------------------------------------------
-
-
- ' ---- Variables Init ----
-
- Set Buffer 5
-
- ' Ntsc test
- YMAX=253-56*(Ntsc=True)
-
- NMAX=17
- Dim XT(7,NMAX),YT(7,NMAX),NT(7)
- Dim X(NMAX),Y(NMAX),VX(NMAX),VY(NMAX)
- P=1
-
- ' Randomize starting positions
-
- For I=1 To NMAX
- X(I)=Rnd(318) : Y(I)=Rnd(YMAX)
- VX(I)=((Rnd(1)*2)-1)*4 : VY(I)=((Rnd(1)*2)-1)*6
- Next I
- '
- N2=0 : N=3
-
- ' ---- Screen Init ----
-
- Screen Open 0,320,YMAX+3,8,LORES
- Flash Off : Curs Off : Hide
- For R=0 To 7 : Colour R,256*R*2+16*R : Next R
- Colour 7,$FC0
- Cls 0
-
- ' ---- Main Loop ----
-
- Repeat
-
- ' After every 25 loops, add a spline segment
- Inc N2 : If N2=25 : Add N,2 : N2=0 : End If
-
- ' Check screen borders and bounce back
- For I=1 To N
- X(I)=X(I)+VX(I) : If X(I)>318 or X(I)<1 Then VX(I)=-VX(I)
- Y(I)=Y(I)+VY(I) : If Y(I)>YMAX or Y(I)<1 Then VY(I)=-VY(I)
- Next I
- Ink 0
- For I=1 To NT(P)-2 Step 2
- _SPLINE[XT(P,I),YT(P,I),XT(P,I+1),YT(P,I+1),XT(P,I+2),YT(P,I+2),8]
- Next I
- Ink P
- For I=1 To N-2 Step 2
- _SPLINE[X(I),Y(I),X(I+1),Y(I+1),X(I+2),Y(I+2),8]
- Next I
- Shift Up 320,1,7,1
-
- ' Put coordinates in stack for making a trail
- NT(P)=N
- For I=1 To NT(P)
- XT(P,I)=X(I) : YT(P,I)=Y(I)
- Next I
- Add P,1,1 To 7
-
- Wait Vbl
-
- Until N=NMAX
-
- ' --- Final Report ---
-
- T#=Timer
- Shift Off
- Home : Paper 0 : Pen 1 : Colour 1,$FFF
- Print " --- Final status report --- "
- Print
- Print " < Total time ellapsed:";T#/50;"s > "
- Print
- Print " Press mouse key to end"
- Repeat
- Multi Wait
- Until Mouse Key or(Inkey$<>"")
-
- End
-
- ' ---- Procedure SPLINE! ----
-
- Procedure _SPLINE[XB,YB,XC,YC,XE,YE,S]
- '
- ' Inputs: XB,YB Begin coordinate spline
- ' XE,YE End coordinate spline
- ' XC,YC Control coordinate spline
- ' S Number of Subdivisions for building curve
- ' Outputs: Plots to current screen in current color
- '
- FL=0
- For ST=0 To S
- XS1=XB-((XB-XC)*ST)/S : YS1=YB-((YB-YC)*ST)/S
- XS2=XC-((XC-XE)*ST)/S : YS2=YC-((YC-YE)*ST)/S
- XS=XS1-((XS1-XS2)*ST)/S : YS=YS1-((YS1-YS2)*ST)/S
- If FL=0 Then Plot XS,YS : FL=1 Else Draw To XS,YS
- Next ST
- End Proc