Итак, поехали. Для начала для тех, кто в танке, уясню:
int =
4
байта
short =
2
байта
byte
=
1
байт
Итак. Грубо говоря, файл можно разделить на
2
части: заголовок и сам файл.
1
. Заголовок. Заголовок, в свою очередь, можно поделить на
3
части: заголовок легкого, заголовок среднего, заголовок сложного уровней.
Структура заголовка (схематично): [int кол-во уровней на easy]
[int кол-во уровней на medium]
[int кол-во уровней на hard]
Это и есть "
3
части" заголовка.
Рассмотрим их поподробнее.
Сначала идет int - количество уровней (на опр. уровне сложности).
Потом идет запись (объединяю в контейнер):
. Эта запись повторяется столько раз, сколько уровней на данном уровне сложности - адрес начала для каждого трека.
Потом аналогично для medium и для hard.
2
. Сами треки
Эту часть файла тоже можно условно разделить на
2
части: информация о треке и сам трек.
Как раз начало этой, адрес, где эта запись начинается в файле (номер байта) мы читаем в заголовке файла. То есть если в mrg файле
30
уровней (
10
/
10
/
10
), то таких "записей уровня" будет
30
- они просто идут друг за другом, ничем не разделяются.
"Информация" в файле записана следующим образом:
[
byte
- 0x33 - с этого байта начинаются все треки][int* - положение старта по оси X][int* - положение старта по оси Y (положение не флажка, а мотыка)][int* - положение финиша по оси X][int* - положение финиша по оси Y (в принципе ни от чего не зависит, постоянно
0
)][short - количество точек][int - первая точка по оси X][int - первая точка по оси Y]
Сам трек записывается как последовательность байтов
: [
byte
- точка по оси X][
byte
точка по оси Y][
byte
- точка по оси X][
byte
точка по оси Y]...[
byte
- точка по оси X][
byte
точка по оси Y].
2
байта - X и Y =
1
точка. (количество точек, как я уже сказал, записано в "заголовке", "информации" уровня).