PROGRAM Animation3
INTEGER I,J,K,L,AddOne,Hits,ColorBuff(13),Wind,Scr
WORD TempX,TempXF,TempY,TempYF
VSprite Sprite(7)

? Sample Program Loads 7 Sprites And Allows Them To Bounce For 70 Collisions
? Requires The Presence Of The File 'ballsprite'

RANDOMIZE(122460)
? Randomize Color Buffer
FOR I=1 TO 12
   ColorBuff(I)=RANDOM()
NEXT I

Scr=SCREEN #2 (0,200,2,1,0)
Wind=WINDOW #1 (0,0,320,200,0,0,0,0,-1,-1,23,@"SevenSprites",2)
IF NOT Scr OR NOT Wind THEN GOTO Ending
CURS_INV

IF FILELENGTH("ballsprite")=0 THEN
   WINDOW_OUTPUT #0
   PRINT "Unable To Find Sprite Image In File 'ballsprite'"
   GOTO Ending
ENDIF
OPEN (1,"ballsprite")
FOR I=1 TO 7
   AddOne=OBJECT #I (1,FILELENGTH("ballsprite"),@Sprite(I),2)
   CLOSE(1)
   OPEN (1,"ballsprite")
   IF NOT AddOne THEN
      WINDOW_OUTPUT #0
      PRINT "Unable To Open All Sprites"
      GOTO Ending1
   ENDIF

   ? Randomize Starting Position
   Sprite(I).Y=3+RANDOM()\181
   Sprite(I).X=3+RANDOM()\301

   ? Arrange Velocities As -.125,.25,-.375,.5,-.625,.75,-.875
      Sprite(I).VX=0          ; Sprite(I).VY=0
      Sprite(I).VXF=I*2000'16 ; Sprite(I).VYF=I*2000'16
      IF ODD(I) THEN
         ? Reverse Y Velocity
         K=@Sprite(I).VY
         #K=-(#K)
         ? Reverse X Velocity
         K=@Sprite(I).VX
         #K=-(#K)
      ENDIF   

   ? Randomize Colors
   Sprite(I).VSColors=@ColorBuff+(I-1)*6
NEXT I

ON COLLISION EVENT
   INC(Hits)
   I=OBJ1
   J=OBJ2
   IF J<0 THEN
      WHEN J IS
         [-1,-2]
            ? Reverse Y Velocities
            K=@Sprite(I).VY
            #K=-(#K)
         [-3,-4]
            ? Reverse X Velocities
            K=@Sprite(I).VX
            #K=-(#K)
      ENDCASES
   ELSE
      ? Exchange Velocities Of Two Colliding Objects
      TempX=Sprite(I).VX
      TempY=Sprite(I).VY
      TempXF=Sprite(I).VXF
      TempYF=Sprite(I).VYF
      Sprite(I).VX=Sprite(J).VX
      Sprite(I).VXF=Sprite(J).VXF
      Sprite(I).VY=Sprite(J).VY
      Sprite(I).VYF=Sprite(J).VYF
      Sprite(J).VX=TempX
      Sprite(J).VXF=TempXF
      Sprite(J).VY=TempY
      Sprite(J).VYF=TempYF
   ENDIF
ENDEVENT

&ANIMATE 1

{Sleeper}
SLEEP
IF Hits < 70 THEN GOTO Sleeper

{Ending1}
? No Harm Closing Objects That Are Not Open
FOR I=1 TO 7
   OBJECT_CLOSE #I
NEXT I
{Ending}
WINDOW_CLOSE #1
SCREEN_CLOSE #2
END
