mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-07 04:32:24 +00:00
parent
1872ee2a33
commit
4b4c2c1454
7 changed files with 1380 additions and 0 deletions
234
src/test/X11/tetris/Linie.Mod
Normal file
234
src/test/X11/tetris/Linie.Mod
Normal file
|
|
@ -0,0 +1,234 @@
|
|||
MODULE Linie;
|
||||
|
||||
IMPORT XYplane := oocXYplane, In := compatIn;
|
||||
|
||||
VAR abbruch: BOOLEAN;
|
||||
Zaehler,Wert1, Wert2, Wert3, Wert4,Wert5, Wert6, Wert7, Wert8,Ende: INTEGER;
|
||||
|
||||
(* Version 1.0 / 6.April 96 / Peter Brantschen *)
|
||||
|
||||
PROCEDURE Linie*(StartX,StartY,EndeX,EndeY: INTEGER);
|
||||
|
||||
VAR i,x,y,LaengeX,LaengeY: INTEGER;
|
||||
|
||||
|
||||
BEGIN
|
||||
LaengeX:=EndeX-StartX;
|
||||
LaengeY:=EndeY-StartY;
|
||||
IF LaengeX>=0 THEN
|
||||
IF LaengeY>=0 THEN
|
||||
FOR i:=0 TO LaengeX DO;
|
||||
IF LaengeX#0 THEN
|
||||
x:=StartX+i;
|
||||
y:=StartY + (i*LaengeY)DIV LaengeX;
|
||||
XYplane.Dot(x,y,1);
|
||||
END;
|
||||
END;
|
||||
FOR i:=0 TO LaengeY DO;
|
||||
IF LaengeY#0 THEN
|
||||
x:=StartX + (i*LaengeX) DIV LaengeY;
|
||||
y:=StartY + i;
|
||||
XYplane.Dot(x,y,1);
|
||||
END;
|
||||
END;
|
||||
ELSE
|
||||
FOR i:=0 TO LaengeX DO;
|
||||
IF LaengeX#0 THEN
|
||||
x:=StartX+i;
|
||||
y:=StartY + (i*LaengeY)DIV LaengeX;
|
||||
XYplane.Dot(x,y,1);
|
||||
END;
|
||||
END;
|
||||
FOR i:=LaengeY TO 0 DO;
|
||||
IF LaengeY#0 THEN
|
||||
x:=StartX + (i*LaengeX) DIV LaengeY;
|
||||
y:=StartY + i;
|
||||
XYplane.Dot(x,y,1);
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
ELSE
|
||||
IF LaengeY>=0 THEN
|
||||
FOR i:=LaengeX TO 0 DO;
|
||||
IF LaengeX#0 THEN
|
||||
x:=StartX+i;
|
||||
y:=StartY + (i*LaengeY)DIV LaengeX;
|
||||
XYplane.Dot(x,y,1);
|
||||
END;
|
||||
END;
|
||||
FOR i:=0 TO LaengeY DO;
|
||||
IF LaengeY#0 THEN
|
||||
x:=StartX + (i*LaengeX) DIV LaengeY;
|
||||
y:=StartY + i;
|
||||
XYplane.Dot(x,y,1);
|
||||
END;
|
||||
END;
|
||||
ELSE
|
||||
FOR i:=LaengeX TO 0 DO;
|
||||
IF LaengeX#0 THEN
|
||||
x:=StartX+i;
|
||||
y:=StartY + (i*LaengeY)DIV LaengeX;
|
||||
XYplane.Dot(x,y,1);
|
||||
END;
|
||||
END;
|
||||
FOR i:=LaengeY TO 0 DO;
|
||||
IF LaengeY#0 THEN
|
||||
x:=StartX + (i*LaengeX) DIV LaengeY;
|
||||
y:=StartY + i;
|
||||
XYplane.Dot(x,y,1);
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
|
||||
END Linie;
|
||||
|
||||
PROCEDURE LoescheLinie*(StartX,StartY,EndeX,EndeY: INTEGER);
|
||||
|
||||
VAR i,x,y,LaengeX,LaengeY: INTEGER;
|
||||
|
||||
|
||||
BEGIN
|
||||
LaengeX:=EndeX-StartX;
|
||||
LaengeY:=EndeY-StartY;
|
||||
IF LaengeX>=0 THEN
|
||||
IF LaengeY>=0 THEN
|
||||
FOR i:=0 TO LaengeX DO;
|
||||
IF LaengeX#0 THEN
|
||||
x:=StartX+i;
|
||||
y:=StartY + (i*LaengeY)DIV LaengeX;
|
||||
XYplane.Dot(x,y,0);
|
||||
END;
|
||||
END;
|
||||
FOR i:=0 TO LaengeY DO;
|
||||
IF LaengeY#0 THEN
|
||||
x:=StartX + (i*LaengeX) DIV LaengeY;
|
||||
y:=StartY + i;
|
||||
XYplane.Dot(x,y,0);
|
||||
END;
|
||||
END;
|
||||
ELSE
|
||||
FOR i:=0 TO LaengeX DO;
|
||||
IF LaengeX#0 THEN
|
||||
x:=StartX+i;
|
||||
y:=StartY + (i*LaengeY)DIV LaengeX;
|
||||
XYplane.Dot(x,y,0);
|
||||
END;
|
||||
END;
|
||||
FOR i:=LaengeY TO 0 DO;
|
||||
IF LaengeY#0 THEN
|
||||
x:=StartX + (i*LaengeX) DIV LaengeY;
|
||||
y:=StartY + i;
|
||||
XYplane.Dot(x,y,0);
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
ELSE
|
||||
IF LaengeY>=0 THEN
|
||||
FOR i:=LaengeX TO 0 DO;
|
||||
IF LaengeX#0 THEN
|
||||
x:=StartX+i;
|
||||
y:=StartY + (i*LaengeY)DIV LaengeX;
|
||||
XYplane.Dot(x,y,0);
|
||||
END;
|
||||
END;
|
||||
FOR i:=0 TO LaengeY DO;
|
||||
IF LaengeY#0 THEN
|
||||
x:=StartX + (i*LaengeX) DIV LaengeY;
|
||||
y:=StartY + i;
|
||||
XYplane.Dot(x,y,0);
|
||||
END;
|
||||
END;
|
||||
ELSE
|
||||
FOR i:=LaengeX TO 0 DO;
|
||||
IF LaengeX#0 THEN
|
||||
x:=StartX+i;
|
||||
y:=StartY + (i*LaengeY)DIV LaengeX;
|
||||
XYplane.Dot(x,y,0);
|
||||
END;
|
||||
END;
|
||||
FOR i:=LaengeY TO 0 DO;
|
||||
IF LaengeY#0 THEN
|
||||
x:=StartX + (i*LaengeX) DIV LaengeY;
|
||||
y:=StartY + i;
|
||||
XYplane.Dot(x,y,0);
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
|
||||
END LoescheLinie;
|
||||
|
||||
PROCEDURE Linie2(x1,y1,x2,y2: INTEGER);
|
||||
|
||||
VAR dx,dy,sx,sy,d,x,y: INTEGER;
|
||||
|
||||
BEGIN
|
||||
dx:=ABS(x2-x1); IF (x2-x1)#0 THEN sx:=(x2-x1)DIV ABS(x2-x1); ELSE sx:=0; END;
|
||||
dy:=ABS(y2-y1); IF (y2-y1)#0 THEN sy:=(y2-y1) DIV ABS(y2-y1); ELSE sy:=0; END;
|
||||
d:=2*dy-dx; x:=x1; y:=y1;
|
||||
XYplane.Dot(x,y,1);
|
||||
WHILE x#x2 DO
|
||||
IF (d>0) OR ((d=0)&(sy=1)) THEN
|
||||
y:=y+sy; d:=d-2*dx;
|
||||
END;
|
||||
x:=x+sx; d:=d+2*dy;
|
||||
XYplane.Dot(x,y,1);
|
||||
END;
|
||||
END Linie2;
|
||||
|
||||
|
||||
PROCEDURE Fraktal(x1,y1,x2,y2: INTEGER);
|
||||
|
||||
BEGIN;
|
||||
IF ~abbruch THEN
|
||||
INC(Zaehler);
|
||||
IF Zaehler>Ende THEN abbruch:=TRUE; END;
|
||||
Linie2(x1,y1,x2,y2);
|
||||
Fraktal(x1+ Wert1,y1+Wert2,x2+Wert3,y2+Wert4);
|
||||
END;
|
||||
|
||||
END Fraktal;
|
||||
|
||||
PROCEDURE Fraktal4Eck(x1,y1,x2,y2,x3,y3,x4,y4: INTEGER);
|
||||
|
||||
BEGIN
|
||||
IF ~abbruch THEN
|
||||
INC(Zaehler);
|
||||
IF Zaehler>Ende THEN abbruch:=TRUE; END;
|
||||
Linie2(x1,y1,x2,y2);
|
||||
Linie2(x2,y2,x3,y3);
|
||||
Linie2(x3,y3,x4,y4);
|
||||
Linie2(x4,y4,x1,y1);
|
||||
Fraktal4Eck(x1+ Wert1,y1+Wert2,x2+Wert3,y2+Wert4,x3+ Wert5,y3+Wert6,x4+Wert7,y4+Wert8);
|
||||
END;
|
||||
|
||||
END Fraktal4Eck;
|
||||
|
||||
PROCEDURE Start*;
|
||||
|
||||
BEGIN
|
||||
XYplane.Open;
|
||||
In.Open;
|
||||
In.Int(Wert1); In.Int(Wert2); In.Int(Wert3); In.Int(Wert4);In.Int(Ende);
|
||||
abbruch:=FALSE;
|
||||
Zaehler:=0;
|
||||
Fraktal(150,150,250,250);
|
||||
END Start;
|
||||
|
||||
PROCEDURE Start4Eck*;
|
||||
|
||||
BEGIN
|
||||
XYplane.Open;
|
||||
In.Open;
|
||||
In.Int(Wert1); In.Int(Wert2); In.Int(Wert3); In.Int(Wert4);
|
||||
In.Int(Wert5); In.Int(Wert6); In.Int(Wert7); In.Int(Wert8);In.Int(Ende);
|
||||
abbruch:=FALSE;
|
||||
Zaehler:=0;
|
||||
Fraktal4Eck(150,150,150,250,250,250,250,150);
|
||||
END Start4Eck;
|
||||
|
||||
END Linie.
|
||||
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue