'===========================================================================
' Subject: LINE PATTERN DESIGNS               Date: 05-31-96 (16:26)       
'  Author: Ryan White                         Code: QB, QBasic, PDS        
'  Origin: BIGFOOT@SunBelt.Net              Packet: EGAVGA.ABC
'===========================================================================
' Welcome one and all to Ryan's remade colored line moving thingie.
' Press F1 to make the colors change
' Press F2 to make the screen clear off
' Press F3 to change the coloring style
' Press F4 to change the finese of the lines  <==-- try and you'll figure
' Press F5 to change the shape of the lines
' Press F10 to make the lines stop forming or make them start again
' Press ESC to quit
' Have fun and please change the code all you want

DECLARE FUNCTION nnn! ()
DECLARE FUNCTION num! ()

DIM rox(16), gox(16), box(16)

'this just makes the lines style not 0
style = 1: shape = 1: grad = 1

SCREEN 12
RANDOMIZE TIMER

ON KEY(1) GOSUB pp: KEY(1) ON
ON KEY(2) GOSUB tt: KEY(2) ON
ON KEY(3) GOSUB csty: KEY(3) ON
ON KEY(4) GOSUB inc: KEY(4) ON
ON KEY(5) GOSUB shpcng: KEY(5) ON
ON KEY(10) GOSUB stopitnow: KEY(10) ON

GOSUB pp

x = INT(RND * 640) + 1: xb = num * nnn
y = INT(RND * 480) + 1: yb = num * nnn
a = INT(RND * 640) + 1: ab = num * nnn
b = INT(RND * 480) + 1: bb = num * nnn
G1 = nnn
G2 = nnn        'Gravity (- or +)

DO
IF wannaseeit = 1 THEN GOTO notgonadoit
m = x - a: N = y - b: XY = (m * m + N * N): IF XY < 10 THEN G1 = -G1: G2 = -G2
xb = xb - 100 * (G1 * m + xb / 3) / XY: yb = yb - 100 * (G1 * N + yb / 3) / XY
ab = ab - 100 * (G2 * m + ab / 3) / XY: bb = bb - 100 * (G2 * N + bb / 3) / XY
IF x + xb < 0 OR x + xb > 640 THEN xb = -SGN(xb) * num: yb = yb * nnn: G1 = -SGN(G1)
IF y + yb < 0 OR y + yb > 480 THEN yb = -SGN(yb) * num: xb = xb * nnn: G1 = -SGN(G1)
IF a + ab < 0 OR a + ab > 640 THEN ab = -SGN(ab) * num: bb = bb * nnn: G2 = -SGN(G2)
IF b + bb < 0 OR b + bb > 480 THEN bb = -SGN(bb) * num: ab = ab * nnn: G2 = -SGN(G2)

x = x + xb / grad: y = y + yb / grad: a = a + ab / grad: b = b + bb / grad


SELECT CASE shape
  CASE 1
      LINE (x, y)-(a, b), c: LINE (640 - x, 480 - y)-(640 - a, 480 - b), c
      LINE (x, 480 - y)-(a, 480 - b), c: LINE (640 - x, y)-(640 - a, b), c
  CASE 2
      LINE (x, y)-(a, b), c, B: LINE (640 - x, 480 - y)-(640 - a, 480 - b), c, B
      LINE (x, 480 - y)-(a, 480 - b), c, B: LINE (640 - x, y)-(640 - a, b), c, B
  CASE 3
      CIRCLE (x, y), 3, c: CIRCLE (a, b), 3, c: CIRCLE (640 - x, 480 - y), 3, c: CIRCLE (640 - a, 480 - b), 3, c
      CIRCLE (x, 480 - y), 3, c: CIRCLE (a, 480 - b), 3, c: CIRCLE (640 - x, y), 3, c: CIRCLE (640 - a, b), 3, c
  CASE 4
    'heart 1
      LINE (x - 9, y)-(x - 6, y - 3), c: LINE -(x - 4, y - 3), c: LINE -(x - 2, y - 2), c: LINE -(x, y - 1), c: LINE -(x + 2, y - 2), c: LINE -(x + 4, y - 3), c: LINE -(x + 6, y - 3), c: LINE -(x + 8, y), c: LINE -(x + 4, y + 5), c: LINE -(x, y + 8) , c
      LINE -(x - 6, y + 4), c: LINE -(x - 8, y + 1), c: LINE (a - 9, b)-(a - 6, b - 3), c: LINE -(a - 4, b - 3), c: LINE -(a - 2, b - 2), c: LINE -(a, b - 1), c: LINE -(a + 2, b - 2), c: LINE -(a + 4, b - 3), c: LINE -(a + 6, b - 3), c
      LINE -(a + 8, b), c: LINE -(a + 4, b + 5), c: LINE -(a, b + 8), c: LINE -(a - 6, b + 4), c: LINE -(a - 8, b + 1), c
    'heart 2
      LINE (640 - (x - 9), 480 - y)-(640 - (x - 6), 480 - (y - 3)), c: LINE -(640 - (x - 4), 480 - (y - 3)), c: LINE -(640 - (x - 2), 480 - (y - 2)), c: LINE -(640 - x, 480 - (y - 1)), c: LINE -(640 - (x + 2), 480 - (y - 2)), c: LINE -(640 - (x + 4) , 480 - (y - 3)), c
      LINE -(640 - (x + 6), 480 - (y - 3)), c: LINE -(640 - (x + 8), 480 - y), c: LINE -(640 - (x + 4), 480 - (y + 5)), c: LINE -(640 - x, 480 - (y + 8)), c: LINE -(640 - (x - 6), 480 - (y + 4)), c: LINE -(640 - (x - 8), 480 - (y + 1)), c
      LINE (640 - (a - 9), 480 - b)-(640 - (a - 6), 480 - (b - 3)), c: LINE -(640 - (a - 4), 480 - (b - 3)), c: LINE -(640 - (a - 2), 480 - (b - 2)), c: LINE -(640 - a, 480 - (b - 1)), c: LINE -(640 - (a + 2), 480 - (b - 2)), c: LINE -(640 - (a + 4) , 480 - (b - 3)), c
      LINE -(640 - (a + 6), 480 - (b - 3)), c: LINE -(640 - (a + 8), 480 - b), c: LINE -(640 - (a + 4), 480 - (b + 5)), c: LINE -(640 - a, 480 - (b + 8)), c: LINE -(640 - (a - 6), 480 - (b + 4)), c: LINE -(640 - (a - 8), 480 - (b + 1)), c
    'heart 3
      LINE (x - 9, 480 - y)-(x - 6, 480 - (y - 3)), c: LINE -(x - 4, 480 - (y - 3)), c: LINE -(x - 2, 480 - (y - 2)), c: LINE -(x, 480 - (y - 1)), c: LINE -(x + 2, 480 - (y - 2)), c: LINE -(x + 4, 480 - (y - 3)), c
      LINE -(x + 6, 480 - (y - 3)), c: LINE -(x + 8, 480 - y), c: LINE -(x + 4, 480 - (y + 5)), c: LINE -(x, 480 - (y + 8)), c: LINE -(x - 6, 480 - (y + 4)), c: LINE -(x - 8, 480 - (y + 1)), c
      LINE (a - 9, 480 - b)-(a - 6, 480 - (b - 3)), c: LINE -(a - 4, 480 - (b - 3)), c: LINE -(a - 2, 480 - (b - 2)), c: LINE -(a, 480 - (b - 1)), c: LINE -(a + 2, 480 - (b - 2)), c: LINE -(a + 4, 480 - (b - 3)), c
      LINE -(a + 6, 480 - (b - 3)), c: LINE -(a + 8, 480 - b), c: LINE -(a + 4, 480 - (b + 5)), c: LINE -(a, 480 - (b + 8)), c: LINE -(a - 6, 480 - (b + 4)), c: LINE -(a - 8, 480 - (b + 1)), c
    'heart 4
      LINE (640 - (x - 9), y)-(640 - (x - 6), y - 3), c: LINE -(640 - (x - 4), y - 3), c: LINE -(640 - (x - 2), y - 2), c: LINE -(640 - x, y - 1), c: LINE -(640 - (x + 2), y - 2), c: LINE -(640 - (x + 4), y - 3), c
      LINE -(640 - (x + 6), y - 3), c: LINE -(640 - (x + 8), y), c: LINE -(640 - (x + 4), y + 5), c: LINE -(640 - x, y + 8), c: LINE -(640 - (x - 6), y + 4), c: LINE -(640 - (x - 8), y + 1), c
      LINE (640 - (a - 9), b)-(640 - (a - 6), b - 3), c: LINE -(640 - (a - 4), b - 3), c: LINE -(640 - (a - 2), b - 2), c: LINE -(640 - a, b - 1), c: LINE -(640 - (a + 2), b - 2), c: LINE -(640 - (a + 4), b - 3), c
      LINE -(640 - (a + 6), b - 3), c: LINE -(640 - (a + 8), b), c: LINE -(640 - (a + 4), b + 5), c: LINE -(640 - a, b + 8), c: LINE -(640 - (a - 6), b + 4), c: LINE -(640 - (a - 8), b + 1), c
  CASE 5
      PSET (x, y), c: PSET (a, b), c: PSET (640 - x, 480 - y), c: PSET (640 - a, 480 - b), c
      PSET (x, 480 - y), c: PSET (a, 480 - b), c: PSET (640 - x, y), c: PSET (640 - a, b), c
  CASE 6
      LINE (x, y)-(319, 240), c: LINE (a, b)-(319, 240), c: LINE (640 - x, 480 - y)-(319, 240), c: LINE (640 - a, 480 - b)-(319, 240), c
      LINE (x, 480 - y)-(319, 240), c: LINE (a, 480 - b)-(319, 240), c: LINE (640 - x, y)-(319, 240), c: LINE (640 - a, b)-(319, 240), c
      LINE (x, y)-(a, b), c: LINE (640 - x, 480 - y)-(640 - a, 480 - b), c
      LINE (x, 480 - y)-(a, 480 - b), c: LINE (640 - x, y)-(640 - a, b), c
  CASE 7
      LINE (x, y)-(319, 240), c: LINE (a, b)-(319, 240), c: LINE (640 - x, 480 - y)-(319, 240), c: LINE (640 - a, 480 - b)-(319, 240), c
      LINE (x, 480 - y)-(319, 240), c: LINE (a, 480 - b)-(319, 240), c: LINE (640 - x, y)-(319, 240), c: LINE (640 - a, b)-(319, 240), c
  CASE 8
      FOR mm = 1 TO 4
       IF mm = 1 THEN xd = 0: yd = 0
       IF mm = 2 THEN xd = 639: yd = 0
       IF mm = 3 THEN xd = 0: yd = 479
       IF mm = 4 THEN xd = 639: yd = 479
       LINE (x, y)-(xd, yd), c: LINE (a, b)-(xd, yd), c: LINE (640 - x, 480 - y)-(xd, yd), c: LINE (640 - a, 480 - b)-(xd, yd), c
       LINE (x, 480 - y)-(xd, yd), c: LINE (a, 480 - b)-(xd, yd), c: LINE (640 - x, y)-(xd, yd), c: LINE (640 - a, b)-(xd, yd), c
      NEXT mm
  CASE 9
      LINE (x, y)-(x + 15, y + 15), c: LINE -(x - 15, y + 15), c: LINE -(x, y), c: LINE (a, b)-(a + 15, b + 15), c: LINE -(a - 15, b + 15), c: LINE -(a, b), c
      LINE (640 - x, 480 - y)-(640 - x + 15, 480 - y + 15), c: LINE -(640 - x - 15, 480 - y + 15), c: LINE -(640 - x, 480 - y), c: LINE (640 - a, 480 - b)-(640 - a + 15, 480 - b + 15), c: LINE -(640 - a - 15, 480 - b + 15), c: LINE -(640 - a, 480 -  b), c
      LINE (x, 480 - y)-(x + 15, 480 - y + 15), c: LINE -(x - 15, 480 - y + 15), c: LINE -(x, 480 - y), c: LINE (a, 480 - b)-(a + 15, 480 - b + 15), c: LINE -(a - 15, 480 - b + 15), c: LINE -(a, 480 - b), c
      LINE (640 - x, y)-(640 - x + 15, y + 15), c: LINE -(640 - x - 15, y + 15), c: LINE -(640 - x, y), c: LINE (640 - a, b)-(640 - a + 15, b + 15), c: LINE -(640 - a - 15, b + 15), c: LINE -(640 - a, b), c
  CASE ELSE
      PRINT "ERROR!!!! heEHHEhhaHHAhaHAHa"
END SELECT




SELECT CASE style
  CASE 1
      'color pulsing
      c = c + 1: IF c = 16 THEN c = 1
  CASE 2
      'color blending
      IF c >= 15 THEN cc = 1 ELSE IF c <= 1 THEN cc = 0
      IF cc = 1 THEN c = c - 1 ELSE IF cc = 0 THEN c = c + 1
END SELECT

notgonadoit:
mycount = mycount + 1: IF mycount > 5 THEN mycount = 0: GOSUB pal

LOOP UNTIL INKEY$ <> ""
END

tt:
CLS
RETURN

pp:
redo:
rr = INT(RND * 14) + 1
IF rr = lrr THEN GOTO redo            'ensures a new color each push
lrr = rr
FOR cx = 1 TO 15
IF rr = 1 THEN rx = cx: gx = 0: bx = 0      'red
IF rr = 2 THEN rx = 0: gx = cx: bx = 0      'green
IF rr = 3 THEN rx = 0: gx = 0: bx = cx      'blue
IF rr = 4 THEN rx = cx: gx = cx: bx = cx    'white to black
IF rr = 5 THEN rx = cx: gx = cx: bx = 0     'yellow
IF rr = 6 THEN rx = 0: gx = cx: bx = cx     'aquaish
IF rr = 7 THEN rx = cx: gx = 0: bx = cx     'purplish
IF rr = 8 THEN rx = INT(cx / 2): gx = INT(cx / 6.3): bx = INT(cx / 6.3)'brown
IF rr = 9 THEN rx = cx: gx = INT(cx / 2): bx = 0'orange
IF rr = 10 THEN rx = cx: gx = INT(cx / 1.3): bx = INT(cx / 6.3)'gold
IF rr = 11 THEN rx = cx: gx = INT(cx / 4.5): bx = INT(cx / 1.5)'hotpink
IF rr = 12 THEN rx = INT(cx / 2): gx = INT(cx / 1.9): bx = INT(cx / 1.75)'cold grey
IF rr = 13 THEN rx = INT(cx / 2.3): gx = INT(cx / 1.3): bx = INT(cx / 6.3)'slime
IF rr = 14 THEN rx = INT(cx / 1.6): gx = cx: bx = INT(cx / 6)'yelow-gren
OUT &H3C8, cx: OUT &H3C9, (rx * 4) + 3: OUT &H3C9, (gx * 4) + 3: OUT &H3C9, (bx * 4) + 3
OUT &H3C8, 0: FOR mca = 1 TO 3: OUT &H3C9, 0: NEXT mca
NEXT cx
GOSUB getorg
RETURN

getorg:
FOR sx = 1 TO 15
OUT &H3C7, sx: rox(sx) = INP(&H3C9): gox(sx) = INP(&H3C9): box(sx) = INP(&H3C9)
NEXT sx
RETURN

pal:
FOR xx = 1 TO 15
dd = xx - 1: IF dd = 0 THEN dd = 15
OUT &H3C8, xx: OUT &H3C9, rox(dd): OUT &H3C9, gox(dd): OUT &H3C9, box(dd)
NEXT xx
GOSUB getorg
RETURN

inc:
IF grad = 1 THEN grad = 2: GOTO ymcam
IF grad = 2 THEN grad = 4: GOTO ymcam
IF grad = 4 THEN grad = 8: GOTO ymcam
IF grad = 8 THEN grad = 16: GOTO ymcam
IF grad = 16 THEN grad = 20: GOTO ymcam
IF grad = 20 THEN grad = 1
ymcam:
RETURN

shpcng:
shape = shape + 1
IF shape = 10 THEN shape = 1
RETURN

csty:
style = style + 1
IF style >= 3 THEN style = 1
RETURN

stopitnow:
IF wannaseeit = 1 THEN GOTO alrty
IF wannaseeit = 0 THEN wannaseeit = 1: GOTO alrty2
alrty:
wannaseeit = 0
alrty2:
RETURN

FUNCTION nnn  'neg 1 or pos 1
nnn = (INT((RND * 2) + 1) * 2 - 3)
END FUNCTION

FUNCTION num    '5-9
num = (INT(RND * 5) + 5)
END FUNCTION
