Sposobow jest mnostwo, wszystko zalezy od tego, jak dokladnie wyglada labirynt.
Jezeli sciany sa 'grube' (czyli zapelniajace cale komorki, jak np w DynaBlaster), mape 256x256 mozesz sobie zapisac widzac labirynt po prostu jako bitmape - 8KB. Specjalne pola zapisujesz sobie w dodatkowej tablicy, posortowane po indeksie tego pola (2 bajty) i zawierajace informacje co w tym polu jest jakos skompresowane (pewnie 1-2 bajty). Wiec jak masz 1000 takich pol pojdzie Ci na to z 4KB. Wyszukujesz ofkorz binarnie.
Jezeli sciany sa 'chude' (jak sciany np w wolfenstein), to trzeba inaczej. Jezeli sa to glownie 'zwykle' korytarze, a drzwi/teleporty itp sa stosunkowo rzadkie, mozesz sobie np zakodowac kazda komorke przy uzyciu 4 bitow na sciany, a specjalne pola znowu trzymamy w tablicy dodatkowej poindeksowanej pozycja pola. Dla 64x64 masz 2KB na mape + jakies 2-4 bajty na kazde pole specjalne.
Podobnie, mozesz sobie policzyc np jakie kombinacje scian z poprzedniego przykladu sa najczestsze, bo moze sie okazac, ze zwykly korytarz pionowy i poziomy przewazaja (znowu, zaleznie od labiryntu), i na przyklad 4 najbardziej popularne kombinacje zapisujesz na 2 bitach (albo nawet 2 na 1), a wyjatki w specjalnej tablicy. Ale to bedzie lepsze tylko jesli masz duzo powtarzajacych sie komorek (np dlugie waskie korytarze).
Inna metoda to powtarzajace sie fragmenty mapy.
No i jakies po prostu standardowe formy kompresji mozesz wyprobowac na tym wszystkim.
Metoda Nosty'ego bedzie dosc pamieciozerna, bo nawet dla 64x64 potrzebujesz 4 kierunki * 12 bitow -> 6 bajtow / komorke na sam ksztalt labiryntu. To bedzie dobre jesli bedziesz mial mape w wiekszosci pusta.
Ogolnie, przyjrzyj sie mapom, poanalizuj ich wlasciwosci, i wymyslisz cos.
Powodzenia!