Я довольно новый программист, но я считаю, что мой google-fu достаточно компетентен, и я потратил несколько часов на поиск.
У меня есть простое приложение SDL, которое читает из двоичного файла (2 байта как магическое число, затем 5 байтов на «плитку»), затем он отображает каждую плитку в буфере, байты определяют x, y, id, проходимость и тому подобное.Так что на самом деле это просто уровень загрузки.
Он отлично работает на любом компьютере с Windows (протестировано на Windows Server 2008, 7/64 и 7/32), но когда я компилирую его на Linux, он отображает случайные листы в случайных позициях.Я хотел бы сказать, что он читает не ту часть в ОЗУ, но я запутал магическое число, поэтому оно вернуло бы ошибку, если бы первые 2 байта отсутствовали.
Я бы с удовольствием вычислилЭто само по себе, но теперь это меня пугает, и я не смогу продвинуться дальше, если не смогу программировать на ходу (мой ноутбук работает под управлением Linux).Я использую G ++ на Linux, Mingw32g ++ на Windows.
bool loadlevel(int level_number)
{
int length;
std::string filename;
filename = "Levels/level";
filename += level_number+48;
filename += ".lvl";
std::ifstream level;
level.open(filename.c_str(),std::ios::in|std::ios::binary);
level.seekg(0,std::ios::end);
length = level.tellg();
level.seekg(0,std::ios::beg);
char buffer[length];
level.read(buffer,length);
if (buffer[0] == 0x49 && buffer[1] == 0x14)
{
char tile_buffer[BYTES_PER_TILE];
int buffer_place = 1;
while(buffer_place < length)
{
for (int i = 1;i <= BYTES_PER_TILE;i++)
{
tile_buffer[i] = buffer[buffer_place+1];
buffer_place++;
}
apply_surface(tile_buffer[1],tile_buffer[2],tiles,screen,&clip[tile_buffer[3]]);
}
}
else
{
// File is invalid
return false;
}
level.close();
return true;
}
Заранее спасибо!