mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 02:52:24 +00:00
added two more examples Tron and Vier
This commit is contained in:
parent
fd8a8cac54
commit
5356b94f89
7 changed files with 1741 additions and 0 deletions
27
src/test/X11/tron/Readme.md
Normal file
27
src/test/X11/tron/Readme.md
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
This is a game historycal source taken from http://web.archive.org/web/20050212180221/http://www.vis.inf.ethz.ch/~andy/Oberon.html
|
||||||
|
|
||||||
|
It serves as an example of XYplane module usage.
|
||||||
|
|
||||||
|
build by typing:
|
||||||
|
|
||||||
|
make
|
||||||
|
|
||||||
|
run by ./Tron <number>
|
||||||
|
|
||||||
|
Start Tron with a Games.Tron a ~
|
||||||
|
a (1 - 10) speed of the game.
|
||||||
|
|
||||||
|
During the game, the following keys are availiable:
|
||||||
|
|
||||||
|
Player One:
|
||||||
|
a ... turn left
|
||||||
|
s ... turn right
|
||||||
|
d ... turbo On/Off
|
||||||
|
Player Two:
|
||||||
|
4 ... turn left
|
||||||
|
5 ... turn right
|
||||||
|
6 ... turbo on/off
|
||||||
|
General keys:
|
||||||
|
p ... pause
|
||||||
|
q ... quit
|
||||||
|
|
||||||
230
src/test/X11/tron/Tron.Mod
Normal file
230
src/test/X11/tron/Tron.Mod
Normal file
|
|
@ -0,0 +1,230 @@
|
||||||
|
MODULE Tron;
|
||||||
|
|
||||||
|
IMPORT In := compatIn, X:=oocXYplane;
|
||||||
|
|
||||||
|
(* Programmiert von Peter Brantschen, Version 1.00, 21. April 1996
|
||||||
|
Neue Features: - Tastatursteuerung nur noch links und rechts
|
||||||
|
- Spielstand zaehlen unter dem Logo
|
||||||
|
|
||||||
|
Verbesserungsvorschlaege an: INDIANA@EZINFO.VMSMAIL.ETHZ.CH
|
||||||
|
oder: PBRANTSC@G26.ETHZ.CH
|
||||||
|
|
||||||
|
Tastatur:
|
||||||
|
Spieler1:
|
||||||
|
a ... Drehung gegen den Uhrzeigersinn
|
||||||
|
s ... Drehung mit dem Uhrzeigersinn
|
||||||
|
d ... Turbo
|
||||||
|
|
||||||
|
Spieler2:
|
||||||
|
4 ... Drehung gegen den Uhrzeigersinn
|
||||||
|
5 ... Drehung mit dem Uhrzeigersinn
|
||||||
|
6 ... Turbo
|
||||||
|
|
||||||
|
p ... Pause
|
||||||
|
q ... Quit
|
||||||
|
|
||||||
|
Programmaufruf:
|
||||||
|
|
||||||
|
Games.Tron TEMPO
|
||||||
|
|
||||||
|
TEMPO ist eine Zahl zwischen 1 und 10
|
||||||
|
|
||||||
|
Gespielt wird BEST OF 51 *)
|
||||||
|
|
||||||
|
CONST links=10; rechts=350; unten=10; oben=300;
|
||||||
|
x1start=100; y1start=100; x2start=260; y2start=100; Limit=51;
|
||||||
|
|
||||||
|
VAR SiegeSpieler1, SiegeSpieler2: INTEGER;
|
||||||
|
|
||||||
|
PROCEDURE LoescheBildschirm;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
X.Clear;
|
||||||
|
END LoescheBildschirm;
|
||||||
|
|
||||||
|
PROCEDURE Linie(x1,x2,h,dicke: INTEGER);
|
||||||
|
|
||||||
|
VAR i: INTEGER;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
WHILE x1<=x2 DO;
|
||||||
|
FOR i:=0 TO (dicke-1) DO;
|
||||||
|
X.Dot(x1,h+i,1);
|
||||||
|
END;
|
||||||
|
INC(x1);
|
||||||
|
END;
|
||||||
|
END Linie;
|
||||||
|
|
||||||
|
PROCEDURE Zwischenstand;
|
||||||
|
|
||||||
|
VAR i: INTEGER;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
i:=0;
|
||||||
|
WHILE i<SiegeSpieler1 DO;
|
||||||
|
Linie(60+2*i,60+2*i,330,5);
|
||||||
|
INC(i)
|
||||||
|
END;
|
||||||
|
i:=0;
|
||||||
|
WHILE i<SiegeSpieler2 DO;
|
||||||
|
Linie(60+2*i,60+2*i,320,5);
|
||||||
|
INC(i)
|
||||||
|
END;
|
||||||
|
END Zwischenstand;
|
||||||
|
|
||||||
|
PROCEDURE Logo;
|
||||||
|
|
||||||
|
VAR i: INTEGER;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
(* T *)
|
||||||
|
FOR i:=60 TO 110 DO; X.Dot(i,400,1); END;
|
||||||
|
FOR i:=350 TO 400 DO; X.Dot(85,i,1); END;
|
||||||
|
(* R *)
|
||||||
|
FOR i:=350 TO 400 DO; X.Dot(120,i,1); END;
|
||||||
|
FOR i:=120 TO 170 DO; X.Dot(i,400,1); END;
|
||||||
|
FOR i:=120 TO 170 DO; X.Dot(i,375,1); END;
|
||||||
|
FOR i:=375 TO 400 DO; X.Dot(170,i,1); END;
|
||||||
|
FOR i:=1 TO 25 DO; X.Dot(145+i,375-i,1); END;
|
||||||
|
(* O *)
|
||||||
|
FOR i:=350 TO 400 DO; X.Dot(180,i,1); END;
|
||||||
|
FOR i:=180 TO 230 DO; X.Dot(i,400,1); END;
|
||||||
|
FOR i:=180 TO 230 DO; X.Dot(i,350,1); END;
|
||||||
|
FOR i:=350 TO 400 DO; X.Dot(230,i,1); END;
|
||||||
|
(* N *)
|
||||||
|
FOR i:=350 TO 400 DO; X.Dot(240,i,1); END;
|
||||||
|
FOR i:=1 TO 50 DO; X.Dot(240+i,400-i,1); END;
|
||||||
|
FOR i:=350 TO 400 DO; X.Dot(290,i,1); END;
|
||||||
|
(* unterstrichen *)
|
||||||
|
FOR i:=60 TO 290 DO; X.Dot(i,345,1); END;
|
||||||
|
FOR i:=60 TO 290 DO; X.Dot(i,343,1); END;
|
||||||
|
|
||||||
|
END Logo;
|
||||||
|
|
||||||
|
PROCEDURE Signatur;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
X.Dot(2,2,1);X.Dot(3,2,1); X.Dot(4,2,1); X.Dot(6,2,1);X.Dot(8,2,1); X.Dot(9,2,1); X.Dot(10,2,1); X.Dot(14,2,1);
|
||||||
|
X.Dot(19,2,1);X.Dot(20,2,1); X.Dot(21,2,1); X.Dot(23,2,1); X.Dot(24,2,1); X.Dot(25,2,1);
|
||||||
|
X.Dot(3,3,1);X.Dot(6,3,1); X.Dot(8,3,1); X.Dot(9,3,1);X.Dot(11,3,1); X.Dot(14,3,1); X.Dot(21,3,1); X.Dot(23,3,1);
|
||||||
|
X.Dot(25,3,1);
|
||||||
|
X.Dot(3,4,1);X.Dot(6,4,1); X.Dot(7,4,1); X.Dot(8,4,1);X.Dot(9,4,1); X.Dot(11,4,1); X.Dot(14,4,1);
|
||||||
|
X.Dot(19,4,1);X.Dot(20,4,1); X.Dot(21,4,1); X.Dot(23,4,1); X.Dot(24,4,1); X.Dot(25,4,1);
|
||||||
|
X.Dot(3,5,1);X.Dot(6,5,1); X.Dot(7,5,1); X.Dot(8,5,1);X.Dot(9,5,1); X.Dot(11,5,1); X.Dot(13,5,1); X.Dot(15,5,1);
|
||||||
|
X.Dot(19,5,1);X.Dot(21,5,1); X.Dot(23,5,1);
|
||||||
|
X.Dot(2,6,1);X.Dot(3,6,1); X.Dot(4,6,1); X.Dot(6,6,1);X.Dot(8,6,1); X.Dot(9,6,1); X.Dot(10,6,1); X.Dot(13,6,1);
|
||||||
|
X.Dot(15,6,1); X.Dot(17,6,1); X.Dot(19,6,1);X.Dot(20,6,1); X.Dot(21,6,1); X.Dot(23,6,1); X.Dot(24,6,1); X.Dot(25,6,1);
|
||||||
|
END Signatur;
|
||||||
|
|
||||||
|
PROCEDURE Tron*;
|
||||||
|
|
||||||
|
VAR key:CHAR; abbruch, malen,weiter: BOOLEAN;
|
||||||
|
x1,y1,xweiter1,yweiter1, Anzahl: INTEGER;
|
||||||
|
x2,y2,xweiter2,yweiter2, i: INTEGER;
|
||||||
|
imspiel1, imspiel2, pause, Ende: BOOLEAN;
|
||||||
|
Spieler1, Spieler2, Runde, Tempo1, Tempo2,langsam,schnell: INTEGER;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
X.Open;
|
||||||
|
Spieler1:=0; Spieler2:=0; Runde:=0; Ende:=FALSE;
|
||||||
|
SiegeSpieler1:=0; SiegeSpieler2:=0;
|
||||||
|
In.Open;
|
||||||
|
In.Int(i);
|
||||||
|
IF i<1 THEN i:=1 END;
|
||||||
|
IF i>10 THEN i:=10 END;
|
||||||
|
langsam:=1000 DIV i;
|
||||||
|
schnell:=600 DIV i;
|
||||||
|
weiter:=TRUE;
|
||||||
|
WHILE Runde<Limit DO;
|
||||||
|
WHILE ~weiter DO;
|
||||||
|
IF X.Key()=" " THEN weiter:=TRUE; END;
|
||||||
|
END;
|
||||||
|
weiter:=FALSE;
|
||||||
|
LoescheBildschirm;
|
||||||
|
abbruch:=FALSE; x1:=x1start; y1:=y1start;
|
||||||
|
Anzahl:=0; xweiter1:=0; yweiter1:=1;
|
||||||
|
x2:=x2start; y2:=y2start; xweiter2:=0; yweiter2:=1;
|
||||||
|
imspiel1:=TRUE; imspiel2:=TRUE; Tempo1:=langsam; Tempo2:=langsam;
|
||||||
|
Linie(links,rechts,unten,1);
|
||||||
|
Linie(links,rechts,oben,1);
|
||||||
|
FOR i:=unten TO oben DO;
|
||||||
|
Linie(links,links,i,1);
|
||||||
|
Linie(rechts,rechts,i,1);
|
||||||
|
END;
|
||||||
|
Signatur;
|
||||||
|
Zwischenstand;
|
||||||
|
Logo;
|
||||||
|
WHILE ~abbruch DO;
|
||||||
|
pause:=FALSE;
|
||||||
|
key:=X.Key();
|
||||||
|
IF key="a" THEN
|
||||||
|
IF (xweiter1=-1) & (yweiter1=0) THEN xweiter1:=0;yweiter1:=-1;
|
||||||
|
ELSIF (xweiter1=0) & (yweiter1=-1) THEN xweiter1:=1;yweiter1:=0;
|
||||||
|
ELSIF (xweiter1=1) & (yweiter1=0) THEN xweiter1:=0;yweiter1:=1;
|
||||||
|
ELSIF (xweiter1=0) & (yweiter1=1) THEN xweiter1:=-1;yweiter1:=0; END;
|
||||||
|
END;
|
||||||
|
IF key="s" THEN
|
||||||
|
IF (xweiter1=-1) & (yweiter1=0) THEN xweiter1:=0;yweiter1:=1;
|
||||||
|
ELSIF (xweiter1=0) & (yweiter1=1) THEN xweiter1:=1;yweiter1:=0;
|
||||||
|
ELSIF (xweiter1=1) & (yweiter1=0) THEN xweiter1:=0;yweiter1:=-1;
|
||||||
|
ELSIF (xweiter1=0) & (yweiter1=-1) THEN xweiter1:=-1;yweiter1:=0; END;
|
||||||
|
END;
|
||||||
|
IF key="d" THEN
|
||||||
|
IF Tempo1=schnell THEN Tempo1:=langsam ELSE Tempo1 := schnell; END;
|
||||||
|
END;
|
||||||
|
IF key="4" THEN
|
||||||
|
IF (xweiter2=-1) & (yweiter2=0) THEN xweiter2:=0;yweiter2:=-1;
|
||||||
|
ELSIF (xweiter2=0) & (yweiter2=-1) THEN xweiter2:=1;yweiter2:=0;
|
||||||
|
ELSIF (xweiter2=1) & (yweiter2=0) THEN xweiter2:=0;yweiter2:=1;
|
||||||
|
ELSIF (xweiter2=0) & (yweiter2=1) THEN xweiter2:=-1;yweiter2:=0; END;
|
||||||
|
END;
|
||||||
|
IF key="5" THEN
|
||||||
|
IF (xweiter2=-1) & (yweiter2=0) THEN xweiter2:=0;yweiter2:=1;
|
||||||
|
ELSIF (xweiter2=0) & (yweiter2=1) THEN xweiter2:=1;yweiter2:=0;
|
||||||
|
ELSIF (xweiter2=1) & (yweiter2=0) THEN xweiter2:=0;yweiter2:=-1;
|
||||||
|
ELSIF (xweiter2=0) & (yweiter2=-1) THEN xweiter2:=-1;yweiter2:=0; END;
|
||||||
|
END;
|
||||||
|
IF key="6" THEN
|
||||||
|
IF Tempo2=schnell THEN Tempo2:=langsam ELSE Tempo2 := schnell; END;
|
||||||
|
END;
|
||||||
|
IF (Anzahl MOD Tempo1) = 0 THEN Linie(x1,x1,y1,1); END;
|
||||||
|
IF (Anzahl MOD Tempo2) = 0 THEN Linie(x2,x2,y2,1); END;
|
||||||
|
IF (Anzahl MOD Tempo2) = 0 THEN INC(x2,xweiter2); INC(y2,yweiter2); END;
|
||||||
|
IF (Anzahl MOD Tempo1) = 0 THEN INC(x1,xweiter1); INC(y1,yweiter1); END;
|
||||||
|
IF (Anzahl MOD Tempo1) = 0 THEN
|
||||||
|
IF X.IsDot(x1,y1) THEN
|
||||||
|
abbruch:=TRUE;
|
||||||
|
imspiel1:=FALSE;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
IF (Anzahl MOD Tempo2) = 0 THEN
|
||||||
|
IF X.IsDot(x2,y2) THEN
|
||||||
|
abbruch:=TRUE;
|
||||||
|
imspiel2:=FALSE;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
IF Anzahl=8000 THEN Anzahl:=0; END;
|
||||||
|
IF key="q" THEN abbruch:=TRUE;Ende:=TRUE; END;
|
||||||
|
IF key="p" THEN
|
||||||
|
WHILE ~pause DO;
|
||||||
|
IF X.Key()=" " THEN pause:=TRUE; END;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
INC(Anzahl);
|
||||||
|
END;
|
||||||
|
IF ~imspiel1 THEN
|
||||||
|
IF imspiel2 THEN INC(SiegeSpieler2); END;
|
||||||
|
END;
|
||||||
|
IF imspiel1 THEN
|
||||||
|
IF ~imspiel2 THEN INC(SiegeSpieler1);
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
IF Spieler1>Spieler2 THEN Runde:=Spieler1 ELSE Runde:=Spieler2;END;
|
||||||
|
IF Ende THEN Runde:=Limit; END;
|
||||||
|
Zwischenstand;
|
||||||
|
END;
|
||||||
|
END Tron;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
Tron
|
||||||
|
END Tron.
|
||||||
17
src/test/X11/tron/makefile
Normal file
17
src/test/X11/tron/makefile
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
#for old systems like RHEL4 use
|
||||||
|
#CFLAGS=-L/usr/X11R6/lib -lX11
|
||||||
|
CFLAGS=-lX11
|
||||||
|
export CFLAGS
|
||||||
|
|
||||||
|
VOC = $(SETPATH) /opt/voc/bin/voc
|
||||||
|
|
||||||
|
all:
|
||||||
|
$(VOC) Tron.Mod -m
|
||||||
|
#$(VOC) -Cm test.Mod
|
||||||
|
#gcc -o test test.o -fPIC -g -I /opt/voc-1.0/src/lib/system/gnuc/x86_64 -I /opt/voc-1.0/lib/voc/obj -lVishapOberon -L. -L/opt/voc-1.0/lib -lX11
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm *.c
|
||||||
|
rm *.o
|
||||||
|
rm *.h
|
||||||
|
rm *.sym
|
||||||
217
src/test/X11/vier/Ausgabe.Mod
Normal file
217
src/test/X11/vier/Ausgabe.Mod
Normal file
|
|
@ -0,0 +1,217 @@
|
||||||
|
MODULE Ausgabe;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IMPORT Out := Console, XYplane := oocXYplane;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PROCEDURE RealFix*(x: REAL; n, m: INTEGER);
|
||||||
|
|
||||||
|
|
||||||
|
VAR mul: LONGINT;
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
|
||||||
|
IF x < 0 THEN Out.Char("-"); x := -x END;
|
||||||
|
|
||||||
|
|
||||||
|
IF m > 0 THEN
|
||||||
|
|
||||||
|
|
||||||
|
mul := 1;
|
||||||
|
|
||||||
|
|
||||||
|
REPEAT mul := mul*10; DEC(m) UNTIL m = 0;
|
||||||
|
|
||||||
|
|
||||||
|
Out.Int(ENTIER(x+(0.5/mul)), n);
|
||||||
|
|
||||||
|
|
||||||
|
Out.Char(".");
|
||||||
|
|
||||||
|
|
||||||
|
IF ENTIER(mul*x+0.5) MOD mul = 0 THEN
|
||||||
|
|
||||||
|
|
||||||
|
REPEAT mul := mul DIV 10; Out.Char("0") UNTIL mul = 1
|
||||||
|
|
||||||
|
|
||||||
|
ELSE Out.Int(ENTIER(mul*x+0.5) MOD mul, 0)
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
ELSE Out.Int(ENTIER(x+0.5), n)
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END RealFix;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PROCEDURE Line*(X0, Y0, X1, Y1, mode: INTEGER);
|
||||||
|
|
||||||
|
|
||||||
|
(* Draws a line from (X0, Y0) to (X1, Y1) inclusive. For all line points (x, y) the following holds
|
||||||
|
|
||||||
|
|
||||||
|
always: (min(X0, X1) <= x) & (x <= max(X0, X1) & (min(Y0, Y0) <= y) & (y <= max(Y0, Y1). *)
|
||||||
|
|
||||||
|
|
||||||
|
VAR x, y, dx, dy, d, inc, L, B, R, T, Xmin, Xmax, Ymin, Ymax: INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
|
||||||
|
L := XYplane.X; B := XYplane.Y; R := XYplane.X + XYplane.W; T := XYplane.Y + XYplane.H;
|
||||||
|
|
||||||
|
|
||||||
|
IF X0 < X1 THEN Xmin := X0; Xmax := X1 ELSE Xmin := X1; Xmax := X0 END;
|
||||||
|
|
||||||
|
|
||||||
|
IF Y0 < Y1 THEN Ymin := Y0; Ymax := Y1 ELSE Ymin := Y1; Ymax := Y0 END;
|
||||||
|
|
||||||
|
|
||||||
|
IF (L <= Xmax) & (Xmin < R) & (B <= Ymax) & (Ymin < T) THEN (* line may be visible *)
|
||||||
|
|
||||||
|
|
||||||
|
IF Xmin = Xmax THEN FOR y := Ymin TO Ymax DO XYplane.Dot(Xmin, y, mode) END
|
||||||
|
|
||||||
|
|
||||||
|
ELSIF Ymin = Ymax THEN FOR x := Xmin TO Xmax DO XYplane.Dot(x, Ymin, mode) END
|
||||||
|
|
||||||
|
|
||||||
|
ELSE
|
||||||
|
|
||||||
|
|
||||||
|
IF (Y1-Y0) < (X0-X1) THEN x := X0; X0 := X1; X1 := x; y := Y0; Y0 := Y1; Y1 := y END;
|
||||||
|
|
||||||
|
|
||||||
|
dx := 2*(X1-X0); dy := 2*(Y1-Y0); x := X0; y := Y0; inc := 1;
|
||||||
|
|
||||||
|
|
||||||
|
IF (L <= Xmin) & (Xmax < R) & (B <= Ymin) & (Ymax < T) THEN (* no clipping *)
|
||||||
|
|
||||||
|
|
||||||
|
IF dy > dx THEN d := dy DIV 2;
|
||||||
|
|
||||||
|
|
||||||
|
IF dx < 0 THEN inc := -1; dx := -dx END;
|
||||||
|
|
||||||
|
|
||||||
|
WHILE y <= Y1 DO
|
||||||
|
|
||||||
|
|
||||||
|
XYplane.Dot(x, y, mode);
|
||||||
|
|
||||||
|
|
||||||
|
INC(y); DEC(d, dx);
|
||||||
|
|
||||||
|
|
||||||
|
IF d < 0 THEN INC(d, dy); INC(x, inc) END
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
ELSE d := dx DIV 2;
|
||||||
|
|
||||||
|
|
||||||
|
IF dy < 0 THEN inc := -1; dy := -dy END;
|
||||||
|
|
||||||
|
|
||||||
|
WHILE x <= X1 DO
|
||||||
|
|
||||||
|
|
||||||
|
XYplane.Dot(x, y, mode);
|
||||||
|
|
||||||
|
|
||||||
|
INC(x); DEC(d, dy);
|
||||||
|
|
||||||
|
|
||||||
|
IF d < 0 THEN INC(d, dx); INC(y, inc) END
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
ELSE (* dot-wise clipping *)
|
||||||
|
|
||||||
|
|
||||||
|
IF dy > dx THEN d := dy DIV 2;
|
||||||
|
|
||||||
|
|
||||||
|
IF dx < 0 THEN inc := -1; dx := -dx END;
|
||||||
|
|
||||||
|
|
||||||
|
WHILE y <= Y1 DO
|
||||||
|
|
||||||
|
|
||||||
|
IF (L <= x) & (x < R) & (B <= y) & (y < T) THEN XYplane.Dot(x, y, mode) END;
|
||||||
|
|
||||||
|
|
||||||
|
INC(y); DEC(d, dx);
|
||||||
|
|
||||||
|
|
||||||
|
IF d < 0 THEN INC(d, dy); INC(x, inc) END
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
ELSE d := dx DIV 2;
|
||||||
|
|
||||||
|
|
||||||
|
IF dy < 0 THEN inc := -1; dy := -dy END;
|
||||||
|
|
||||||
|
|
||||||
|
WHILE x <= X1 DO
|
||||||
|
|
||||||
|
|
||||||
|
IF (L <= x) & (x < R) & (B <= y) & (y < T) THEN XYplane.Dot(x, y, mode) END;
|
||||||
|
|
||||||
|
|
||||||
|
INC(x); DEC(d, dy);
|
||||||
|
|
||||||
|
|
||||||
|
IF d < 0 THEN INC(d, dx); INC(y, inc) END
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END Line;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
END Ausgabe.
|
||||||
26
src/test/X11/vier/Readme.md
Normal file
26
src/test/X11/vier/Readme.md
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
This is a game historycal source taken from http://web.archive.org/web/20050212180221/http://www.vis.inf.ethz.ch/~andy/Oberon.html
|
||||||
|
|
||||||
|
It serves as an example of XYplane module usage.
|
||||||
|
|
||||||
|
build by typing:
|
||||||
|
|
||||||
|
make
|
||||||
|
|
||||||
|
run by ./Vier <number>
|
||||||
|
|
||||||
|
Start Vier gewinnt with Vier.HitMe a~
|
||||||
|
a Points to quit the program
|
||||||
|
|
||||||
|
During the game, the following keys are availiable:
|
||||||
|
|
||||||
|
Player One:
|
||||||
|
q ... move left
|
||||||
|
w ... move right
|
||||||
|
a ... mark field
|
||||||
|
Player Two:
|
||||||
|
o ... move left
|
||||||
|
p ... move right
|
||||||
|
l ... mark field
|
||||||
|
General keys:
|
||||||
|
h ... abort
|
||||||
|
|
||||||
1207
src/test/X11/vier/Vier.Mod
Normal file
1207
src/test/X11/vier/Vier.Mod
Normal file
File diff suppressed because it is too large
Load diff
17
src/test/X11/vier/makefile
Normal file
17
src/test/X11/vier/makefile
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
#for old systems like RHEL4 use
|
||||||
|
#CFLAGS=-L/usr/X11R6/lib -lX11
|
||||||
|
CFLAGS=-lX11
|
||||||
|
export CFLAGS
|
||||||
|
|
||||||
|
VOC = $(SETPATH) /opt/voc/bin/voc
|
||||||
|
|
||||||
|
all:
|
||||||
|
$(VOC) -s Ausgabe.Mod Vier.Mod -m
|
||||||
|
#$(VOC) -Cm test.Mod
|
||||||
|
#gcc -o test test.o -fPIC -g -I /opt/voc-1.0/src/lib/system/gnuc/x86_64 -I /opt/voc-1.0/lib/voc/obj -lVishapOberon -L. -L/opt/voc-1.0/lib -lX11
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm *.c
|
||||||
|
rm *.h
|
||||||
|
rm *.sym
|
||||||
|
rm *.o
|
||||||
Loading…
Add table
Add a link
Reference in a new issue