В этом приложении приведён пример программы на языке Pascal, охватывающий основные возможности языка, описанные в настоящих методических указаниях. Программой реализуется игра «сапёр». В тексте программы размещены поясняющие комментарии.
Program Mines;
Uses CRT; {подключение библиотеки расширенного ввода-вывода}
Const
NR=10; NC=20; {размер поля NR строк и NC столбцов}
NM=10; {количество мин}
Type
TMineMark=(mmClosed, mmOpened, mmMarked, mmSuspicious);
TMineNumber=0..8; {количество мин}
TFieldCell = Record
Mine : Boolean; {наличие мины}
Mark : TMineMark; {отметка}
Around : TMineNumber; {количество мин вокруг ячейки}
End;
TMineField=Array[1..NR,1..NC] of TFieldCell;
Var
Field:TMineField;
X,Y,R:Integer;
pc,sc:Char;
Procedure InitField(var F:TMineField); {очистка игрового поля}
Var i,j:Integer;
Begin
For i:=1 to NR Do For j:=1 to NC Do Begin
F[i,j].Mine:=False; F[i,j].Mark:=mmClosed;
F[i,j].Around:=0;
End;
End;
Procedure FillMines(var F:TMineField); {расстановка мин}
Var i,j,k,m:Integer;
Begin
For k:=1 to NM do Begin
m:=Random(NR*NC-k+1)+1; {оставшееся количество ячеек}
For i:=1 to NR Do For j:=1 to NC Do
If Not F[i,j].Mine Then Begin
m:=m-1;
If m=0 Then F[i,j].Mine:=True;
End;
End;
End;
Procedure CountAround(var F:TMineField);
{считать количество мин вокруг ячеек}
Var i,j,ii,jj:Integer;
Begin
For i:=1 to NR Do For j:=1 to NC Do
If not F[i,j].Mine Then
For ii:=-1 to 1 Do For jj:=-1 to 1 Do
{обойти соседние ячейки}
If (i+ii>=1) And (i+ii<=NR) And
(j+jj>=1) And (j+jj<=NC) Then
{если ячейка пределах поля}
If F[i+ii,j+jj].Mine Then
F[i,j].Around:=F[i,j].Around+1;
End;
Procedure OpenField(var F:TMineField; R,C:Integer); {открыть}
Var i,j,ii,jj:Integer; Comp:Boolean;
Begin
If F[R,C].Mark=mmClosed Then F[R,C].Mark:=mmOpened;