PROGRAM GRAFIKDEMO (INPUT,OUTPUT,GRAPHIC); (* 1.9.1986 FLORIAN MATTHES *) (* DAS PROGRAMM ZEICHNET 1 ODER 2 WANDERNDE LINIEN AUF *) (* DEM GRAFIKBILDSCHIRM. (ATARI LAESST GRUESSEN) *) CONST XMAX = 159; XMAX2 = 318; (* = 2 * XMAX *) YMAX = 199; YMAX2 = 398; (* = 2 * YMAX *) NLINES= 20; TYPE POINT = RECORD X,Y : INTEGER; XSTEP,YSTEP: INTEGER; END; VAR P1,P2 : POINT; P3,P4 : POINT; LINES : ARRAY[0..NLINES] OF RECORD X1,Y1,X2,Y2: INTEGER END; I,J : INTEGER; TWOLINES: BOOLEAN; PROCEDURE INIT(VAR P: POINT); (* BERECHNE ZUFAELLIGE POSITION & BEWEGUNGSRICHTUNG *) BEGIN WITH P DO BEGIN X:= INT(XMAX * RANDOM(0)); Y:= INT(YMAX * RANDOM(0)); XSTEP:= 3+INT(XMAX DIV 40 * RANDOM(0)); YSTEP:= 3+INT(YMAX DIV 40 * RANDOM(0)); END; END; (* INIT *) PROCEDURE BOUNCE(VAR P: POINT); (* BEWEGE DEN PUNKT P AUF DEM BILDSCHIRM. LASSE P AM *) (* BILDSCHIRMRAND ABPRALLEN. *) BEGIN WITH P DO BEGIN X:= X + XSTEP; IF X>XMAX THEN BEGIN X:= XMAX2 - X; XSTEP:= -XSTEP END ELSE IF X<0 THEN BEGIN X:= -X; XSTEP:= -XSTEP END; Y:= Y + YSTEP; IF Y>YMAX THEN BEGIN Y:= YMAX2 - Y; YSTEP:= -YSTEP END ELSE IF Y<0 THEN BEGIN Y:= -Y; YSTEP:= -YSTEP END; END; END; (* BOUNCE *) PROCEDURE DRAWLINE(CREGISTER:INTEGER; P1,P2:POINT); (* VERBINDE P1 MIT P2 IN DER FARBE CREGISTER *) BEGIN DRAW(CREGISTER,P1.X,P1.Y,P2.X,P2.Y); WITH LINES[I] DO (* MERKE LINIE *) BEGIN X1:= P1.X; Y1:= P1.Y; X2:= P2.X; Y2:= P2.Y; END; END; (* DRAWLINE *) BEGIN COLOR(0,1); COLOR(1,2); COLOR(2,6); COLOR(5,5); WRITE("WIEVIELE LINIEN? (1-2) :1" #157); READLN(I); TWOLINES:= (I<>1); GRAPHIC(3,1); INIT(P1); INIT(P2); (* ZWEI PUNKTE DEFINIEREN *) INIT(P3); INIT(P4); (* ZWEI PUNKTE DEFINIEREN *) FOR J:= 0 TO NLINES-1 DO (* NOCH KEINE LINIEN DA *) WITH LINES[J] DO BEGIN X1:=0; Y1:=0; X2:=0; Y2:=0 END; I:=NLINES-1; J:= 0; WHILE NOT KEYPRESSED DO BEGIN IF ODD(I) AND TWOLINES THEN DRAWLINE(2,P3,P4) ELSE DRAWLINE(1,P1,P2); WITH LINES[J] DO (* LOESCHE LINIE *) DRAW(0,X1,Y1,X2,Y2); BOUNCE(P1); BOUNCE(P2); (* ENDPUNKTE BEWEGEN *) BOUNCE(P3); BOUNCE(P4); (* ENDPUNKTE BEWEGEN *) I:= (I + 1) MOD NLINES; J:= (J + 1) MOD NLINES; (* ZYKLISCH WEITERZAEHLEN *) END; GRAPHIC(0); END.