'===========================================================================
' 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
