В файлах с расширением .pmn
игра Пентамино для Windows 95 сохраняет игровую ситуацию. В изложении используются термины, вводимые в файле помощи игры Пентамино winpenta.hlp. Все участки кода записаны по правилам языка программирования Visual Basic.
Файл .pmn имеет следующую структуру:
Type tsave
sq(1 To Q_NET_X, 1 To Q_NET_Y) As Byte
penta(1 To 12) As tpentasave
marked As Integer
name As String * 20
End Type
Ниже объясняется назначение каждого поля этой структуры.
Игровое поле разбито на поля-клетки, причем по горизонтали в нем 27 полей, а по вертикали - 24 поля. Константы Q_NET_X и Q_NET_Y как раз и содержат эти значения:
Global Const Q_NET_X = 27
Global Const Q_NET_Y = 24
Массив sq(1 To Q_NET_X, 1 To Q_NET_Y) As Byte описывает состояние каждого поля игрового окна. Переменная sq(i, j) принимает следующие значения:
sq(i, j)=0 - если в поле нет элемента фигуры и поле не выделено;
sq(i, j)=255 - если поле выделено (помечено темно-серым квадратом при включенном режиме Выделить) и в нем нет элемента фигуры;
sq(i, j)=1..12 - если в поле имеется элемент фигуры с соответствующим номером. Номера фигур аналогичны их номерам в окне фигур и имеют значения от 1 до 12.
Массив penta описывает состояние всех фигур пентамино. Переменная penta(i) имеет следующую структуру:
Type tpentasave
Index(1 To 5) As tcoord
curcomb As Byte
status As Byte
End Type
Переменная Index(i) содержит координаты i-го элемента фигуры пентамино и описывается структурой:
Type tcoord
x As Integer
y As Integer
End Type
Index(i).x, Index(i).y - номера поля соответственно по горизонтали и вертикали в игровом окне, где расположен i-й элемент фигуры.
1 <= Index(i).x <= Q_NET_X
1 <= Index(i).y <= Q_NET_Y
Знак <= означает "меньше или равно".
Этот массив действителен для фигуры, стоящей в игровом окне (имеющей статус, равный 2). Для фигуры со статусом 1 этот массив недействителен и при записи файла .pmn не заполняется. При последующем чтении файла .pmn координаты фигуры вычисляются на основании внутрипрограммной информации, а не информации из файла.
curcomb - текущая позиция фигуры (также учитывается только если фигура имеет статус, равный 2).
1 <= curcomb <= максимальное число позиций фигуры
В окне фигур curcomb=1 всегда.
status - статус фигуры. Может принимать значения 1 (фигура в окне фигур) и 2 (фигура в игровом окне).
Возвращаемся к рассмотрению структуры tsave.
marked - переменная, указывающая, включен (marked=-1) или выключен (marked=0) режим Выделить.
name - имя поля (отображается в нижней части информационного окна).
Размер получившейся структуры равен
Q_NET_X*Q_NET_Y*Len(Byte)+12*(5*(Len(Integer)+Len(Integer))+Len(Byte)+
+Len(Byte))+Len(Integer)+Len(String*20)=27*24*1+12*(5*(2+2)+1+1)+2+20=
=934 байта