minesweeper example added

This commit is contained in:
Norayr Chilingarian 2014-02-03 16:48:44 +04:00
parent 1e13d96ce1
commit a2fbb3aaa4
4 changed files with 666 additions and 0 deletions

View file

@ -0,0 +1,216 @@
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 Fraktal(x1,y1,x2,y2: INTEGER);
BEGIN;
IF ~abbruch THEN
INC(Zaehler);
IF Zaehler>Ende THEN abbruch:=TRUE; END;
Linie(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;
Linie(x1,y1,x2,y2);
Linie(x2,y2,x3,y3);
Linie(x3,y3,x4,y4);
Linie(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.

View file

@ -0,0 +1,411 @@
MODULE Minesweeper;
IMPORT X:=oocXYplane, L:=Linie, In := compatIn, Out := Console, RN:=ethRandomNumbers;
VAR
Feld: ARRAY 41, 41 OF INTEGER;
Spielfeld: ARRAY 41, 41 OF INTEGER;
Bombenfeld: ARRAY 41, 41 OF BOOLEAN;
Anzahl: ARRAY 42, 42 OF INTEGER;
Test: ARRAY 42, 42 OF BOOLEAN;
Nummer,Bomben : INTEGER;
Feldgroesse,Schritte: INTEGER;
PROCEDURE FuelleKaestchen(x,y: INTEGER);
VAR i: INTEGER;
BEGIN
FOR i:=0 TO 8 DO;
IF i MOD 2=0 THEN
L.Linie(40+10*x+9-i,40+10*y+1,40+10*x+1,40+10*y+9-i);
L.Linie(40+10*x+9, 40+10*y+1+i,40+10*x+1+i,40+10*y+9);
END;
END;
END FuelleKaestchen;
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 MaleFeld;
VAR i,j: INTEGER;
BEGIN
X.Open;
Signatur;
Schritte:=0;
FOR i:=1 TO Feldgroesse DO; FOR j:=1 TO Feldgroesse DO; Feld[i,j]:=0; END; END;
FOR i:=1 TO Feldgroesse DO; FOR j:=1 TO Feldgroesse DO; Spielfeld[i,j]:=11; END; END;
FOR i:=1 TO Feldgroesse DO; FOR j:=1 TO Feldgroesse DO; Bombenfeld[i,j]:=FALSE; END; END;
FOR i:=0 TO Feldgroesse+1 DO; FOR j:=0 TO Feldgroesse+1 DO; Test[i,j]:=FALSE; END; END;
FOR i:=0 TO Feldgroesse+1 DO; FOR j:=0 TO Feldgroesse+1 DO; Anzahl[i,j]:=0; END; END;
FOR i:=0 TO Feldgroesse+1 DO; Test[i,0]:=TRUE; END;
FOR i:=0 TO Feldgroesse+1 DO; Test[i,Feldgroesse+1]:=TRUE; END;
FOR i:=0 TO Feldgroesse+1 DO; Test[0,i]:=TRUE; END;
FOR i:=0 TO Feldgroesse+1 DO; Test[Feldgroesse+1,i]:=TRUE; END;
FOR i:=0 TO 10*Feldgroesse DO;
IF i MOD 10 = 0 THEN
L.Linie(50,50+i,50+10*Feldgroesse,50+i);
L.Linie(50+i,50,50+i,50+10*Feldgroesse);
END;
END;
FOR i:=0 TO Feldgroesse-1 DO;
FOR j:=0 TO Feldgroesse-1 DO;
FuelleKaestchen(1+i,1+j);
Feld[i+1,j+1]:=11;
END;
END;
END MaleFeld;
PROCEDURE MarkKaestchen(x,y: INTEGER);
VAR i: INTEGER;
BEGIN
L.Linie(40+10*x+1,40+10*y+1,40+10*x+9,40+10*y+1);
L.Linie(40+10*x+9,40+10*y+1,40+10*x+9,40+10*y+9);
L.Linie(40+10*x+9,40+10*y+9,40+10*x+1,40+10*y+9);
L.Linie(40+10*x+1,40+10*y+9,40+10*x+1,40+10*y+1);
END MarkKaestchen;
PROCEDURE LoescheKaestchen(x,y: INTEGER);
VAR i: INTEGER;
BEGIN
FOR i:=1 TO 9 DO;
L.LoescheLinie(40+10*x+1,40+10*y+i,40+10*x+9,40+10*y+i);
END;
END LoescheKaestchen;
PROCEDURE KreuzeKaestchen(x,y: INTEGER);
VAR i: INTEGER;
BEGIN
FOR i:=1 TO 9 DO;
L.Linie(40+10*x+i,40+10*y+i,40+10*x+10-i,40+10*y+10-i);
L.Linie(40+10*x+10-i,40+10*y+i,40+10*x+i,40+10*y+10-i)
END;
END KreuzeKaestchen;
PROCEDURE EinsKaestchen(x,y: INTEGER);
BEGIN
L.Linie(40+10*x+3,40+10*y+5,40+10*x+6,40+10*y+8);
L.Linie(40+10*x+6,40+10*y+8,40+10*x+6,40+10*y+2);
END EinsKaestchen;
PROCEDURE ZweiKaestchen(x,y: INTEGER);
BEGIN
L.Linie(40+10*x+3,40+10*y+8,40+10*x+6,40+10*y+8);
L.Linie(40+10*x+3,40+10*y+5,40+10*x+6,40+10*y+5);
L.Linie(40+10*x+3,40+10*y+2,40+10*x+6,40+10*y+2);
L.Linie(40+10*x+6,40+10*y+8,40+10*x+6,40+10*y+5);
L.Linie(40+10*x+3,40+10*y+5,40+10*x+3,40+10*y+2);
END ZweiKaestchen;
PROCEDURE DreiKaestchen(x,y: INTEGER);
BEGIN
L.Linie(40+10*x+3,40+10*y+8,40+10*x+6,40+10*y+8);
L.Linie(40+10*x+3,40+10*y+5,40+10*x+6,40+10*y+5);
L.Linie(40+10*x+3,40+10*y+2,40+10*x+6,40+10*y+2);
L.Linie(40+10*x+6,40+10*y+8,40+10*x+6,40+10*y+5);
L.Linie(40+10*x+6,40+10*y+5,40+10*x+6,40+10*y+2);
END DreiKaestchen;
PROCEDURE VierKaestchen(x,y: INTEGER);
BEGIN
L.Linie(40+10*x+3,40+10*y+8,40+10*x+3,40+10*y+5);
L.Linie(40+10*x+3,40+10*y+5,40+10*x+6,40+10*y+5);
L.Linie(40+10*x+5,40+10*y+7,40+10*x+5,40+10*y+2);
END VierKaestchen;
PROCEDURE FuenfKaestchen(x,y: INTEGER);
BEGIN
L.Linie(40+10*x+3,40+10*y+8,40+10*x+6,40+10*y+8);
L.Linie(40+10*x+3,40+10*y+5,40+10*x+6,40+10*y+5);
L.Linie(40+10*x+3,40+10*y+2,40+10*x+6,40+10*y+2);
L.Linie(40+10*x+3,40+10*y+8,40+10*x+3,40+10*y+5);
L.Linie(40+10*x+6,40+10*y+5,40+10*x+6,40+10*y+2);
END FuenfKaestchen;
PROCEDURE SechsKaestchen(x,y: INTEGER);
BEGIN
L.Linie(40+10*x+3,40+10*y+5,40+10*x+6,40+10*y+5);
L.Linie(40+10*x+3,40+10*y+2,40+10*x+6,40+10*y+2);
L.Linie(40+10*x+3,40+10*y+8,40+10*x+3,40+10*y+2);
L.Linie(40+10*x+6,40+10*y+5,40+10*x+6,40+10*y+2);
END SechsKaestchen;
PROCEDURE SiebenKaestchen(x,y: INTEGER);
BEGIN
L.Linie(40+10*x+3,40+10*y+8,40+10*x+7,40+10*y+8);
L.Linie(40+10*x+3,40+10*y+2,40+10*x+7,40+10*y+8);
END SiebenKaestchen;
PROCEDURE AchtKaestchen(x,y: INTEGER);
BEGIN
L.Linie(40+10*x+3,40+10*y+8,40+10*x+7,40+10*y+8);
L.Linie(40+10*x+3,40+10*y+5,40+10*x+7,40+10*y+5);
L.Linie(40+10*x+3,40+10*y+2,40+10*x+7,40+10*y+2);
L.Linie(40+10*x+3,40+10*y+8,40+10*x+3,40+10*y+2);
L.Linie(40+10*x+7,40+10*y+8,40+10*x+7,40+10*y+2);
END AchtKaestchen;
PROCEDURE BombeKaestchen(x,y: INTEGER);
BEGIN
L.Linie(40+10*x+3,40+10*y+6,40+10*x+7,40+10*y+6);
L.Linie(40+10*x+2,40+10*y+5,40+10*x+8,40+10*y+5);
L.Linie(40+10*x+2,40+10*y+4,40+10*x+8,40+10*y+4);
L.Linie(40+10*x+3,40+10*y+3,40+10*x+7,40+10*y+3);
L.Linie(40+10*x+5,40+10*y+8,40+10*x+5,40+10*y+3);
END BombeKaestchen;
PROCEDURE Zufall(a: INTEGER);
VAR z: LONGINT; i,j,k,l:INTEGER; fertig: BOOLEAN;
gesetzt: ARRAY 41,41 OF BOOLEAN;
BEGIN
Nummer:=0;
RN.InitSeed(a);
FOR i:=1 TO Feldgroesse DO; FOR j:=1 TO Feldgroesse DO; gesetzt[i,j]:=FALSE; END; END;
WHILE ~fertig DO;
z:= ENTIER(Feldgroesse*Feldgroesse*RN.Uniform());
FOR i:=1 TO Feldgroesse DO
FOR j:=1 TO Feldgroesse DO
IF z=0 THEN
IF ~gesetzt[i,j] THEN
Bombenfeld[i,j]:=TRUE;;
FOR k:=1 TO 3 DO;
FOR l:=1 TO 3 DO;
INC(Anzahl[i-2+k,j-2+l]);
END;
END;
gesetzt[i,j]:=TRUE;
INC(Nummer);
IF Nummer=Bomben THEN fertig:=TRUE END;
END;
END;
DEC(z);
END;
END;
END;
END Zufall;
PROCEDURE Kontrolle(x,y: INTEGER);
BEGIN
LoescheKaestchen(x,y);
INC(Schritte);
IF Feld[x,y]=1 THEN KreuzeKaestchen(x,y); END;
IF Feld[x,y]=2 THEN EinsKaestchen(x,y); END;
IF Feld[x,y]=3 THEN ZweiKaestchen(x,y); END;
IF Feld[x,y]=4 THEN DreiKaestchen(x,y); END;
IF Feld[x,y]=5 THEN VierKaestchen(x,y); END;
IF Feld[x,y]=6 THEN FuenfKaestchen(x,y); END;
IF Feld[x,y]=7 THEN SechsKaestchen(x,y); END;
IF Feld[x,y]=8 THEN SiebenKaestchen(x,y); END;
IF Feld[x,y]=9 THEN AchtKaestchen(x,y); END;
IF Feld[x,y]=10 THEN BombeKaestchen(x,y); END;
IF Feld[x,y]=11 THEN FuelleKaestchen(x,y); END;
END Kontrolle;
PROCEDURE AnzahlBomben(x,y: INTEGER);
BEGIN;
IF ~(((x<1)OR(x>Feldgroesse))OR((y<1)OR(y>Feldgroesse))) THEN
IF Anzahl[x,y]=1 THEN
IF Feld[x,y]=11 THEN EinsKaestchen(x,y); Feld[x,y]:=2; Test[x,y]:=TRUE;END;
ELSIF Anzahl[x,y]=2 THEN
IF Feld[x,y]=11 THEN ZweiKaestchen(x,y); Feld[x,y]:=3; Test[x,y]:=TRUE;END;
ELSIF Anzahl[x,y]=3 THEN
IF Feld[x,y]=11 THEN DreiKaestchen(x,y); Feld[x,y]:=4; Test[x,y]:=TRUE;END;
ELSIF Anzahl[x,y]=4 THEN
IF Feld[x,y]=11 THEN VierKaestchen(x,y); Feld[x,y]:=5;Test[x,y]:=TRUE;END;
ELSIF Anzahl[x,y]=5 THEN
IF Feld[x,y]=11 THEN FuenfKaestchen(x,y); Feld[x,y]:=6;Test[x,y]:=TRUE;END;
ELSIF Anzahl[x,y]=6 THEN
IF Feld[x,y]=11 THEN SechsKaestchen(x,y); Feld[x,y]:=7;Test[x,y]:=TRUE;END;
ELSIF Anzahl[x,y]=7 THEN
IF Feld[x,y]=11 THEN SiebenKaestchen(x,y); Feld[x,y]:=8;Test[x,y]:=TRUE;END;
ELSIF Anzahl[x,y]=8 THEN
IF Feld[x,y]=11 THEN AchtKaestchen(x,y);Feld[x,y]:=9;Test[x,y]:=TRUE; END;
END;
END;
END AnzahlBomben;
PROCEDURE OeffneFreieKaestchen(x,y: INTEGER);
VAR i,j: INTEGER;
BEGIN
FOR i:=0 TO 2 DO
FOR j:=0 TO 2 DO
IF ~Test[x-1+i,y-1+j] THEN
IF ~(((x-1+i<1) OR (y-1+j<1)) OR ((x-1+i>Feldgroesse) OR (y-1+j>Feldgroesse))) THEN
Test[x-1+i,y-1+j]:=TRUE;
IF Feld[x-1+i,y-1+j]=11 THEN
LoescheKaestchen(x-1+i,y-1+j);
IF Anzahl[x-1+i,y-1+j]>0 THEN
AnzahlBomben(x-1+i,y-1+j);
ELSE
Feld[x-1+i,y-1+j]:=0;
OeffneFreieKaestchen(x-1+i,y-1+j);
END;
END;
END;
END;
END;
END;
END OeffneFreieKaestchen;
PROCEDURE Start*;
VAR x,y,i,j, Zaehler,VermuteteBomben: INTEGER; key: CHAR; geloest,abbruch,wechsel: BOOLEAN;
BEGIN
In.Open; x:=234;
In.Int(x);
Feldgroesse:=10;
In.Int(Feldgroesse);
Bomben:=15;
In.Int(Bomben);
Out.Ln;
MaleFeld;
Zufall(x);
x:=1; y:=1; Zaehler:=0; abbruch:=FALSE; wechsel:=FALSE;
VermuteteBomben:=0;
WHILE ~abbruch DO;
key:=X.Key();
IF Bomben+5>Feldgroesse*Feldgroesse THEN Out.String("Weniger Bomben !"); key:="q";END;
IF key="8" THEN
Kontrolle(x,y);
INC(y);
IF y>Feldgroesse THEN y:=Feldgroesse; END; END;
IF key="2" THEN
Kontrolle(x,y);
DEC(y);
IF y<1 THEN y:=1;END; END;
IF key="6" THEN
Kontrolle(x,y);
INC(x);
IF x>Feldgroesse THEN x:=Feldgroesse; END; END;
IF key="4" THEN
Kontrolle(x,y);
DEC(x);
IF x<1 THEN x:=1;END; END;
IF key="5" THEN
IF Feld[x,y]=11 THEN Feld[x,y]:=1; Spielfeld[x,y]:=1; INC(VermuteteBomben);
ELSIF Feld[x,y]=1 THEN Feld[x,y]:=11; Spielfeld[x,y]:=11; DEC(VermuteteBomben); END;
wechsel:=TRUE;
Out.String("VermuteteBomben: ");Out.Int(VermuteteBomben,3);
Out.Char("/"); Out.Int(Bomben,3); Out.Ln;
IF VermuteteBomben=Bomben THEN
geloest:=TRUE;
FOR i:=1 TO Feldgroesse DO;
FOR j:=1 TO Feldgroesse DO;
IF Bombenfeld[i,j] THEN
IF Feld[i,j]#1 THEN geloest:=FALSE; Out.Char("."); END;
END;
END;
END;
IF geloest THEN Out.String("Bravo, du hast alle Bomben entdeckt."); Out.Ln; key:="q";
Out.String("Koeffizient: "); Out.Int(100*Feldgroesse DIV Bomben * Schritte,3); Out.Ln; END;
END;
END;
IF key=" " THEN
IF ~Bombenfeld[x,y] THEN
IF Spielfeld[x,y]=11 THEN
IF Anzahl[x,y]>=1 THEN LoescheKaestchen(x,y);
AnzahlBomben(x,y); MarkKaestchen(x,y);
ELSE
LoescheKaestchen(x,y);
Feld[x,y]:=0;
MarkKaestchen(x,y);
Test[x,y]:=TRUE;
OeffneFreieKaestchen(x,y);
END;
END;
ELSE
IF Spielfeld[x,y]=11 THEN
Out.String("Treffer, Spiel leider fertig !"); Out.Ln;
FOR i:=1 TO Feldgroesse DO; FOR j:=1 TO Feldgroesse DO;
IF Bombenfeld[i,j] THEN
LoescheKaestchen(i,j);
BombeKaestchen(i,j);
IF Feld[i,j]=1 THEN MarkKaestchen(i,j);END;
END;
END; END;
key:="q";
END;
END;
END;
IF wechsel THEN
LoescheKaestchen(x,y);
wechsel:=FALSE;
END;
IF Feld[x,y]=1 THEN MarkKaestchen(x,y); KreuzeKaestchen(x,y);
ELSIF Feld[x,y]=2 THEN MarkKaestchen(x,y); EinsKaestchen(x,y);
ELSIF Feld[x,y]=3 THEN MarkKaestchen(x,y); ZweiKaestchen(x,y);
ELSIF Feld[x,y]=4 THEN MarkKaestchen(x,y); DreiKaestchen(x,y);
ELSIF Feld[x,y]=5 THEN MarkKaestchen(x,y); VierKaestchen(x,y);
ELSIF Feld[x,y]=6 THEN MarkKaestchen(x,y); FuenfKaestchen(x,y);
ELSIF Feld[x,y]=7 THEN MarkKaestchen(x,y); SechsKaestchen(x,y);
ELSIF Feld[x,y]=8 THEN MarkKaestchen(x,y); SiebenKaestchen(x,y);
ELSIF Feld[x,y]=9 THEN MarkKaestchen(x,y); AchtKaestchen(x,y);
ELSIF Feld[x,y]=10 THEN MarkKaestchen(x,y); BombeKaestchen(x,y);
ELSIF Feld[x,y]=11 THEN MarkKaestchen(x,y); FuelleKaestchen(x,y);
ELSE
MarkKaestchen(x,y);
END;
IF key="q" THEN abbruch:=TRUE; END;
END;
END Start;
PROCEDURE Anleitung*;
BEGIN
Out.String("Minesweeper Version Beta 1"); Out.Ln;
Out.String("8 = nach oben ; ");
Out.String("2 = nach unten");Out.Ln;
Out.String("4 = nach links; ");
Out.String("6 = nach rechts");Out.Ln;
Out.String("5 = Bombe markieren");Out.Ln;
Out.String("(SPACE) = oeffnen");Out.Ln;
Out.String("q = abbrechen");Out.Ln;
Out.String("Minesweeper.Start Level Feldgroesse AnzahlBomben"); Out.Ln;
Out.String("Level = LONGINT Zahl"); Out.Ln;
Out.String("Feldgroesse = 3 - 40"); Out.Ln;
Out.String("AnzahlBomben = 1-(Feldgroesse^2-5)"); Out.Ln;
Out.String("z.B. Minesweeper.Start 13546 10 18");Out.Ln;
END Anleitung;
BEGIN
Start
END Minesweeper.

View file

@ -0,0 +1,22 @@
Build by typing
# make
Start Minesweeper with
./Minesweeper a b c ~
a Level (1-100);
b Row/Collumns of area;
c Number of bombs in area.
During the game, the following keys are availiable:
8 ... up
2 ... down
4 ... left
6 ... right
5 ... mark bomb (where you think one is)
Space ... open field
q ... quit

View 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 Linie.Mod Minesweeper.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