Думаю, кому-нить пригодится. Итак, поехали. Для начала для тех, кто в танке, уясню: int = 4 байта short = 2 байта byte = 1 байт Файл можно разделить на две части: заголовок и треки.
Заголовок
Заголовок состоит из 3-х частей: заголовок легкого, заголовок среднего, заголовок сложного уровней.
Структура заголовка (повторяется 3 раза - для каждого уровня сложности): Код int count - кoл-во уровней
Далее идет блок, который повторяется count раз: Код int address - адрес начала трека, номер байта (значение этого байта - 0x33) string name - название трека byte 0x00 - закрывающий нулевой байт
Треки
Эту часть файла тоже можно условно разделить на 2 части: информация о треке и точки трека. Адрес начала этой части - int address из заголовки. Код byte 0x33 signed int* start_x - положение старта (игрока) по оси X signed int* start_y - положение старта (игрока) по оси Y signed int* finish_x - положение финиша по оси X signed int* finish_y - положение финиша по оси Y (в принципе ни от чего не зависит, постоянно 0) short points - количество точек (включая первую точку, которая 2 int) signed int - первая точка по оси X (координата) signed int - первая точка по оси Y (координата)
Далее идет запись трека (точек), последовательность байтов. Одна точка - два байта (x и y). Эта запись повторяется points-1 раз: Код signed byte x signed byte y
Оба байта - со знаком. Их значение - это смещение относительно предыдущей точки. Если byte x равен -1, то byte y не читается, а читаются 2 int-а: Код signed int x signed int y Если значение signed int y больше 127, оно игнорируется и принимается за ноль.
Далее - без изменений, как раньше, byte x и byte y.
Порядок байт - от старшего к младшему (big-endian).
int-ы, помеченные звездочками, записаны по-особому. Их нужно читать так:
6 июня 2011, автор z-kzn-z ------------------------------------------------------------------------------ Обсудить статью на форуме: http://www.dinedi.ru/forum/23-274-1
|