'=========================================================================== ' Subject: BOUNCING BOX WITHIN A BOX Date: 12-17-97 (01:04) ' Author: Andrey Berezansky Code: QB, QBasic, PDS ' Origin: nikolai@nsi.co.il Packet: EGAVGA.ABC '=========================================================================== ' Another example of simple (SCREEN 9) graphics . ' Program can be much smaller if using 1 DO instead of 2 FORs ... ' Press ESC to quit . ' Programmed by BEREZANSKY ANDREY (email - nikol@cs.bgu.ac.il) ' DATE - 05/12/97 DEFINT A-Z SCREEN 9: CLS : RANDOMIZE TIMER y1 = 2: sec = 1: sec2 = 1: th1 = 1: th2 = 1 LINE (1, 1)-(631, 331), 4, B 10 FOR x1 = 2 TO 429 LINE (x1, y1)-(x1 + 200, y1 + 160), 3, B 'big LINE (x1 + sec, y1 + sec2)-(x1 + sec + 50, y1 + sec2 + 40), 4, B 'small CIRCLE (x1 + sec + th1, y1 + sec2 + th2), 5, 11 'circle IF INKEY$ = CHR$(27) THEN END FOR ii = 1 TO 5000: NEXT ii ' pause LINE (x1, y1)-(x1 + 200, y1 + 160), 0, B 'erase LINE (x1 + sec, y1 + sec2)-(x1 + sec + 50, y1 + sec2 + 40), 0, B 'erase CIRCLE (x1 + sec + th1, y1 + sec2 + th2), 5, 0 'erase '*********** big one y direction *************************** IF mm = 0 THEN y1 = y1 + 1 ELSE y1 = y1 - 1 IF y1 > 169 THEN mm = 1 IF y1 < 3 THEN mm = 0 '*********************************************************** '*********** small one y-x direction *********************** IF mmx = 0 THEN sec = sec + 1 ELSE sec = sec - 2 IF sec > 148 THEN mmx = 1 IF sec < 2 THEN mmx = 0 IF mmy = 0 THEN sec2 = sec2 + 1 ELSE sec2 = sec2 - 1 IF sec2 > 118 THEN mmy = 1 IF sec2 < 2 THEN mmy = 0 '*********************************************************** '*********** circle direction ****************************** IF mmx2 = 0 THEN th1 = th1 + 1 ELSE th1 = th1 - 1 IF th1 > 44 THEN mmx2 = 1 IF th1 < 3 THEN mmx2 = 0 IF mmy2 = 0 THEN th2 = th2 + 1 ELSE th2 = th2 - 1 IF th2 > 34 THEN mmy2 = 1 IF th2 < 6 THEN mmy2 = 0 '*********************************************************** NEXT 20 FOR x1 = x1 TO 2 STEP -1 LINE (x1, y1)-(x1 + 200, y1 + 160), 3, B 'big LINE (x1 + sec, y1 + sec2)-(x1 + sec + 50, y1 + sec2 + 40), 4, B 'small CIRCLE (x1 + sec + th1, y1 + sec2 + th2), 5, 11 'circle IF INKEY$ = CHR$(27) THEN END FOR ii = 1 TO 5000: NEXT ii 'pause LINE (x1, y1)-(x1 + 200, y1 + 160), 0, B 'erase LINE (x1 + sec, y1 + sec2)-(x1 + sec + 50, y1 + sec2 + 40), 0, B 'erase CIRCLE (x1 + sec + th1, y1 + sec2 + th2), 5, 0 'erase '*********** big one y direction *************************** IF mm = 0 THEN y1 = y1 + 1 ELSE y1 = y1 - 1 IF y1 > 169 THEN mm = 1 IF y1 < 3 THEN mm = 0 '*********************************************************** '*********** small one y-x direction *********************** IF mmx = 0 THEN sec = sec + 2 ELSE sec = sec - 1 IF sec > 148 THEN mmx = 1 IF sec < 2 THEN mmx = 0 IF mmy = 0 THEN sec2 = sec2 + 1 ELSE sec2 = sec2 - 1 IF sec2 > 118 THEN mmy = 1 IF sec2 < 2 THEN mmy = 0 '************************************************************ '*********** circle direction ****************************** IF mmx2 = 0 THEN th1 = th1 + 1 ELSE th1 = th1 - 1 IF th1 > 44 THEN mmx2 = 1 IF th1 < 3 THEN mmx2 = 0 IF mmy2 = 0 THEN th2 = th2 + 1 ELSE th2 = th2 - 1 IF th2 > 34 THEN mmy2 = 1 IF th2 < 6 THEN mmy2 = 0 '*********************************************************** NEXT GOTO 10