home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / screen / lines10.arj / LINES.BAS next >
Encoding:
BASIC Source File  |  1991-07-24  |  2.6 KB  |  102 lines

  1. ' The following is a rewrite of the "Walking Lines" code from a Byte Magazine
  2. ' article in 1981.  Several QuickBasic 4.5 lines were added...  ACMEWare(i)
  3.  
  4. '$DYNAMIC
  5. ON ERROR GOTO errorp
  6. DEFINT A-Z
  7. DIM lines(0, 0)
  8. DEF FNRAND (LIMIT) = INT(RND(1) * LIMIT) + 1
  9. RANDOMIZE VAL(RIGHT$(TIME$, 2))
  10.  
  11. cmd$ = COMMAND$
  12. SELECT CASE LEFT$(LCASE$(cmd$), 3)
  13.     CASE "vga"
  14.         cmd$ = MID$(cmd$, 4)
  15.         sss = 12
  16.         www = 640
  17.         hhh = 480
  18.         ttt = 15
  19.     CASE "ega"
  20.         cmd$ = MID$(cmd$, 4)
  21.         sss = 9
  22.         www = 640
  23.         hhh = 350
  24.         ttt = 15
  25.     CASE "cga"
  26.         cmd$ = MID$(cmd$, 4)
  27.         sss = 1
  28.         www = 320
  29.         hhh = 200
  30.         ttt = 3
  31.     CASE "herc"
  32.         cmd$ = MID$(cmd$, 5)
  33.         sss = 3
  34.         www = 720
  35.         hhh = 348
  36.         ttt = 1
  37.     CASE ELSE
  38.         PRINT
  39.         REM    xxxxxxxxxxxxxxx
  40.         PRINT "Lines v1.0     ";
  41.         PRINT "ACMEWare - IdeaRight(i) 1991 Free Software Programmers Foundation"
  42.         PRINT
  43.         PRINT "  Usage:  lines [herc|cga|ega|vga] {number of trailing lines}"
  44.         END
  45. END SELECT
  46.  
  47. IF VAL(cmd$) > 0 THEN
  48.     tot = VAL(cmd$)                           ' number of lines
  49. ELSE
  50.     tot = 15
  51. END IF
  52. REDIM lines(tot, 4)
  53.  
  54. SCREEN sss, 0                             ' 9 (ega) or 12 (vga)
  55.  
  56. X1 = FNRAND(www) - 1
  57. Y1 = FNRAND(hhh) - 1
  58. DX1 = FNRAND(11) - 6
  59. DY1 = FNRAND(11) - 6
  60. X2 = FNRAND(www) - 1
  61. Y2 = FNRAND(hhh) - 1
  62. DX2 = FNRAND(11) - 6
  63. DY2 = FNRAND(11) - 6
  64.  
  65. TINT = 1
  66. IX = 0          ' index into lines
  67. CNT = 0         ' counter of lines
  68.  
  69. DO
  70.     CHGCNT = FNRAND(255)
  71.  
  72. here:
  73.     IF INKEY$ <> "" THEN END
  74.     LINE (X1, Y1)-(X2, Y2), TINT
  75.     IX = (IX + 1) MOD tot
  76.     IF CNT = tot THEN
  77.         LINE (lines(IX, 0), lines(IX, 1))-(lines(IX, 2), lines(IX, 3)), B
  78.     END IF
  79.     lines(IX, 0) = X1
  80.     lines(IX, 1) = Y1
  81.     lines(IX, 2) = X2
  82.     lines(IX, 3) = Y2
  83.     IF CNT < tot THEN CNT = CNT + 1
  84.     CHGCNT = CHGCNT - 1
  85.     X1 = X1 + DX1: IF X1 < 0 OR X1 >= www THEN DX1 = -DX1: X1 = X1 + DX1
  86.     Y1 = Y1 + DY1: IF Y1 < 0 OR Y1 >= hhh THEN DY1 = -DY1: Y1 = Y1 + DY1
  87.     X2 = X2 + DX2: IF X2 < 0 OR X2 >= www THEN DX2 = -DX2: X2 = X2 + DX2
  88.     Y2 = Y2 + DY2: IF Y2 < 0 OR Y2 >= hhh THEN DY2 = -DY2: Y2 = Y2 + DY2
  89.     IF CHGCNT > 0 GOTO here
  90.     ' X1 = FNRAND(www) - 1: Y1 = FNRAND(hhh) - 1    ' these two lines give
  91.     ' X2 = FNRAND(www) - 1: Y2 = FNRAND(hhh) - 1    ' you multiple lines...
  92.     DX1 = FNRAND(11) - 6: DY1 = FNRAND(11) - 6
  93.     DX2 = FNRAND(11) - 6: DY2 = FNRAND(11) - 6
  94.     TINT = ((TINT + 1) MOD ttt) + 1
  95. LOOP
  96. END
  97.  
  98. errorp:
  99.     PRINT "Error!  Out of memory or bad video mode."
  100.     END
  101.  
  102.