[ Back to the overview Matrix ]

Test case : Red Ball using Algol 68

Lines used: 28
BEGIN FILE window;
      INT maxx = 320, maxy = 200, min = 16;
      PROC range = (INT a, b) INT:
	 ( INT i = ROUND (random * (b-a+1)); i = 0 | b | i+a-1 );
      INT bsr = range (min, maxx), bsl = range (min, maxy);
      INT rbr := range (min, maxx), rbl := range (min, maxy), pos;
      OP XSCALE = (INT i) REAL: i/maxx, YSCALE = (INT i) REAL: i/maxy;
      VOID (draw device (window, "X", whole(maxx,0)+"x"+whole(maxy,0)));
      VOID (open (window, "Red ball", stand draw channel));
      WHILE draw background colour name (window, "green");
	    draw erase (window);
	    draw move (window, XSCALE bsr, YSCALE bsl);
	    draw colour name (window, "black");
	    draw rect (window, XSCALE (bsr-min), YSCALE (bsl-min));
	    draw move (window, XSCALE rbr, YSCALE rbl);
	    draw colour name (window, "red");
	    draw rect (window, XSCALE (rbr-min), YSCALE (rbl-min));
	    draw point (window, 0, 0);  # sic #
		# either a bug or something silly, but last object
		  isn't drawn until another one is .... #
	    WHILE CHAR c = readchar;
		  NOT char in string (c, pos, "exds")
	       DO SKIP OD;
	    bsr /= rbr OR bsl /= rbl
	 DO ( pos | (rbl < maxy | rbl +:= 1), (rbl > min | rbl -:= 1),
		    (rbr < maxx | rbr +:= 1), (rbr > min | rbr -:= 1))
	 OD
END
Contributed by andrew.walker at nottingham.ac.uk