'=========================================================================== ' Subject: GRAVITY LINES Date: 04-12-96 (14:36) ' Author: Stephan Doughty Code: QB, QBasic, PDS ' Origin: hbj@pop.ntplx.net Packet: EGAVGA.ABC '=========================================================================== 'Written By Stephen Doughty 'Watch, learn, play, enjoy. 5 REM Gravline.BAS 10 K = 35: S = 7: I = 1 'K must be a multiple of 7 15 RANDOMIZE TIMER 20 DEF FNR = (INT(RND * 5) + 5) 'Line separation 30 DEF FNZ = (INT((RND * 2) + 1) * 2 - 3) 'Makes -1 or 1 40 DIM X(K): DIM Y(K): DIM A(K): DIM B(K): DIM H(S): DIM C(S) 50 FOR Q = 0 TO 6: READ C(Q): H(Q) = K * (S - Q) / S: NEXT Q 'Loads line separation array with data 60 DATA 0,4,6,14,2,1,5 70 X = INT(RND * 640) + 1: XB = FNR * FNZ 'Picks X,Y and A,B points 80 Y = INT(RND * 480) + 1: YB = FNR * FNZ 'and line step values 90 A = INT(RND * 640) + 1: AB = FNR * FNZ 100 B = INT(RND * 480) + 1: BB = FNR * FNZ 110 G1 = FNZ: G2 = FNZ 'Gravity (- or +) 120 SCREEN 12 130 M = X - A: N = Y - B: XY = (M * M + N * N): IF XY < 10 THEN G1 = -G1: G2 = -G2 'Lines 130-150 are a Gravity routine 140 XB = XB - 100 * (G1 * M + XB / 3) / XY: YB = YB - 100 * (G1 * N + YB / 3) / XY 150 AB = AB - 100 * (G2 * M + AB / 3) / XY: BB = BB - 100 * (G2 * N + BB / 3) / XY 160 IF X + XB < 0 OR X + XB > 640 THEN XB = -SGN(XB) * FNR: YB = YB * FNZ: G1 = -SGN(G1) 'Checks for edges of screen 170 IF Y + YB < 0 OR Y + YB > 480 THEN YB = -SGN(YB) * FNR: XB = XB * FNZ: G1 = -SGN(G1) 'if off screen then change line variable 180 IF A + AB < 0 OR A + AB > 640 THEN AB = -SGN(AB) * FNR: BB = BB * FNZ: G2 = -SGN(G2) 'and change gravity 190 IF B + BB < 0 OR B + BB > 480 THEN BB = -SGN(BB) * FNR: AB = AB * FNZ: G2 = -SGN(G2) 200 X = X + XB: Y = Y + YB: A = A + AB: B = B + BB 'Adds movement variables to XY coordinates 210 X(I) = X: Y(I) = Y: A(I) = A: B(I) = B 'Puts points in an array 220 I = I + 1 + ((I = K) * K) 'increments point array 230 FOR Q = 6 TO 0 STEP -1 'for next loop for color and erase 240 J = I + H(Q) + (I + H(Q) > K) * K 'Divides array for color change 250 LINE (X(J), Y(J))-(A(J), B(J)), C(Q) 260 LINE (640 - X(J), 480 - Y(J))-(640 - A(J), 480 - B(J)), C(Q) 270 LINE (X(J), 480 - Y(J))-(A(J), 480 - B(J)), C(Q) 280 LINE (640 - X(J), Y(J))-(640 - A(J), B(J)), C(Q) 290 NEXT Q 300 IF INKEY$ <> "" THEN END ELSE 130 'Used to escape