#include<ncurses.h>
WINDOW*w,*W;int l=1,n;char*r="\176qxlqqkwxmxtjvun",s[81],p,q,S,t,o,O,m[23][80],
M[24][80];FILE*f;y(char*l){for(;*l==32;l++);return*l==35?1:0;}X(int n,int o){0?
0:                                                                           0;
0?                               "VBPPP Fbxbona"                             :"
";                                                                           22
;mvwaddch(w,n,o,(m[n][o]&16?acs_map[r[m[n][o]&15]]:m[n][o]&32?acs_map[96]:32)|(
m[n][o]&64?256:0));}E(){wclear(W);mvwprintw(W,0,0,"Level %d",l);;mvwprintw(W,0,
74,"%d/%d",S-t,S);wrefresh(W);}P(){memcpy(m,M,1840);for(p=0;p<23;p++)for(q=0;/*
$1                                                                           -5
#9  d j           Chfu nyy gur qvnzbaqf bagb gur oyhr gnetrg fdhnerf.        )|
~!   n f          Cerff 'd' gb erfgneg gur pheerag yriry.                    +=
?.    q           Hfr gur 'j' 'n' 'f' naq 'q' xrlf sbe zbirzrag.             =0
1;                                                                           F(
*/q<80;q++)X(p,q);;p=M[23][0];q=M[23][1];;t=M[23][2];12;E();mvwaddch(w,p,q,64);
wrefresh(w);}F(){return fgets(s,81,f)?0:1;}G(){F()?exit(1):0;}main(int v,char*c
[]                                                                           ){
v==1?printf(            "Usage: %s <datafile> [level]\n"            ,c[0]),exit
(1                                                                           ):
0;f=fopen(c[1],"r");v==3?n=atoi(c[2]):0;G();for(;!y(s);G());for(;l<n;l++){for(;
y(s);G());for(;!y(s);G());}initscr();start_color();cbreak();noecho();curs_set(0
);                                                                           7?
""   "Qngn svyrf ner va gur fgnaqneq fbxbona yriry sbezng. Fbzr rkpryyrag"   ""
""                    "nqqvgvbany yriryf pna or sbhaq ng:"                   ""
""              "uggc://hfref.oragbaern.pbz/~fnfdhngpu/fbxbona/"             :"
";                                                                           2;
init_pair(1,7,4);W=newwin(1,80,0,0);refresh();for(;1;){for(n=0;n<23;n++)for(o=0
;o<80;o++)M[n][o]=0;n=t=S=o=O=0;for(;y(s);o=0,n++){for(;s[o];o++)o>O?O=o:0,s[o]
==43||s[o]==64?p=n,q=o:0,M[n][o]=s[o]==35?(n?M[n-1][o]&16?M[n-1][o]|=2,8:0:0)|(
o?M[n][o-1]&16?M[n][o-1]|=1,4:0:0)|16:s[o]==36?t++,S++,16,32:s[o]==46?64:s[o]==
42?S++,96:s[o]==43?t++,S++,64:0;if(F())break;}M[23][0]=p;M[23][1]=q;M[23][2]=t;
w=newwin(23,O,1,40-O/2);P();for(;t>0;){X(p,q);O=getch();n=o=0;;O==119?n=-1:(O==
97?o=-1:(O==115?n=1:(O==100?o=1:O==113&&P())));!(m[p+n][q+o]&16)?m[p+n][q+o]&32
?!(m[p+n+n][q+o+o]&48)?p+=n,q+=o,(m[p][q]&=223),(m[p+n][q+o]|=32),X(p+n,q+o),m[
p+n][q+o]&64?t--,E():0,m[p][q]&64?t++,E():0:0:(p+=n,q+=o):0;mvwaddch(w,p,q,64|(
m[p][q]&64?256:0));wrefresh(w);}for(;!y(s);)if(F())break;if(feof(f))break;l++;;
9;     werase(w)    ;    wrefresh(w)    ;    delwin(w)    ;}    endwin()     ;}
