Upřímně řečeno, nejsem si úplně jistý. Inc(pomradek) zvětšuje proměnnou Pomradek o 1, tím prochází budoucí bludiště od prvního do posledního řádku - OK. Cyklus for pomSloupec:=1 to Length(radek) prochází řetězec Radek a příslušný řádek bludiště od prvního do posledního znaku - taky OK. Příkaz TPole[pomSloupec,pomRadek]:=radek[pomSloupec] vloží do proměnné Tpole na pomsloupec-tý sloupec a pomradek-tý řádek příslušný znak z řetězce Radek - taky OK, tím se bludiště naplní načtenými daty ze souboru.
Jediné, co nechápu, je ten case. Původní účel asi byl, že políčko se "$" se obsluhuje jinak a místo přímého uložení do pole se z něj třeba udělají souřadnice panáčka a do pole se zapíše volno. Ale panáček měl být *, tak nevím. Taky nevím, co přesně dělá procedura Vykresli - v jejích parametrech nevidím žádné informace o tom, kdy končí řádek, takže by je nejspíš nedokázala na obrazovce správně zalamovat, to bude asi problém. Nejradši bych z tohohle místa kreslení vyhodil a řešil ho až potom během hlavního cyklu hry, tady v tomhle místě by asi nemělo být vůbec.
Místo case bych tam dal if, ale to už je jenom detail, na funkci by to nic nezměnilo.
Potom tam chybí výpočet a zapamatování rozměrů bludiště. Chtělo by to si počet a délku řádků někam uložit.
Jinak to vypadá plus mínus funkčně (tedy jestli je bludiště definované jako array[1..něco,1..něco] of char). Mimochodem, jestli nemáte objektovost v zadání, možná by stálo za to to napsat normálně, bez objektů - bylo by to asi jednodušší.