home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Amos / amproe2x.dms / in.adf / Compiler_Examples / AMOS_versions / Snake.AMOS / Snake.amosSourceCode
Encoding:
AMOS Source Code  |  1993-06-16  |  2.2 KB  |  113 lines

  1. ' ---------------------------------  
  2. '
  3. ' AMOSPro Compiler Example 
  4. '
  5. ' Line's Snaky     
  6. '
  7. ' By Jean-Baptiste BOLCATO 
  8. '
  9. ' (c) 1993 Europress Software Ltd. 
  10. '
  11. ' ---------------------------------  
  12. '
  13. '
  14. ' --------------------------------------------       
  15. ' Remark: A line-bouncing snake demo 
  16. '
  17. '         Average Acceleration:  220 % 
  18. '
  19. '         Test configuration: A1200, 6Mb 
  20. '
  21. '         Original AMOS Compiler:  200 % 
  22. ' --------------------------------------------       
  23.  
  24. ' ---- Variables Init ---- 
  25.  
  26. Dim X1(128),Y1(128),X2(128),Y2(128)
  27. Dim N(16)
  28. YMAX=256-56*(Ntsc=True)
  29.  
  30. X1(1)=Rnd(320) : Y1(1)=Rnd(YMAX)
  31. X2(1)=Rnd(320) : Y2(1)=Rnd(YMAX)
  32. VX1=4 : VY1=2
  33. VX2=-3 : VY2=4
  34. N2=0 : N=1 : T=1
  35.  
  36. ' ---- Screen Init ----
  37.  
  38. Screen Open 0,320,YMAX,16,Lowres
  39. Flash Off : Curs Off : Hide 
  40. For I=1 To 15 : Colour I,$800+I*$11 : Next I
  41.  
  42. Cls 0 : Wait Vbl 
  43.  
  44. ' ---- Main Loop ----
  45.  
  46. ' Switch OFF multitask 
  47. Amos Lock : Break Off 
  48. Dreg(0)=Execall(-132)
  49.  
  50. Repeat 
  51.    
  52.    CPT=0
  53.    
  54.    Repeat 
  55.       
  56.       Timer=0
  57.       
  58.       ' Add a new line every 16 loops. 
  59.       Inc N2
  60.       If N2=16
  61.          N2=0 : Inc N
  62.       Else 
  63.          
  64.          ' Erase last line
  65.          Ink 0 : Draw X1(N),Y1(N) To X2(N),Y2(N)
  66.       End If 
  67.       
  68.       ' Redraw all new lines 
  69.       For I=N To 2 Step -1
  70.          X1(I)=X1(I-1) : Y1(I)=Y1(I-1)
  71.          X2(I)=X2(I-1) : Y2(I)=Y2(I-1)
  72.          Ink(I mod 15)+1 : Draw X1(I),Y1(I) To X2(I),Y2(I)
  73.       Next I
  74.       
  75.       ' Calculate and draw first line
  76.       Add X1(1),VX1 : If X1(1)<0 or X1(1)>320 : VX1=-VX1 : End If 
  77.       Add Y1(1),VY1 : If Y1(1)<0 or Y1(1)>YMAX : VY1=-VY1 : End If 
  78.       Add X2(1),VX2 : If X2(1)<0 or X2(1)>320 : VX2=-VX2 : End If 
  79.       Add Y2(1),VY2 : If Y2(1)<0 or Y2(1)>YMAX : VY2=-VY2 : End If 
  80.       Ink 1 : Draw X1(1),Y1(1) To X2(1),Y2(1)
  81.       
  82.       Screen Swap 
  83.       
  84.       If Timer>T : Inc CPT : End If 
  85.       
  86.    Until CPT>4
  87.    
  88.    ' Report message 
  89.    N(T)=N : Inc T : Bell 
  90.    
  91. Until T=6
  92.  
  93. _EXIT:
  94.  
  95. ' --- Final Report --- 
  96.  
  97. ' Switch ON multitask  
  98. Dreg(0)=Execall(-138)
  99. Amos Unlock : Break On 
  100.  
  101. Home : Paper 0 : Pen 15
  102. Print "     --- Final status report ---     "
  103. Print 
  104. For T2=1 To T-1
  105.    Print "< Needs";N(T2);" lines to pass under";T2;" VBL >"
  106. Next T2
  107. Print 
  108. Print "   Press mouse key to end"
  109. Repeat 
  110.    Multi Wait 
  111. Until Mouse Key or(Inkey$<>"")
  112.  
  113. End