program Przygodowka_szablon;
uses crt;

const

 MAXITEMS=5;
 
 map :array [1..16,1..12] of byte =
 ((1,1,1,1,1,1,1,1,1,1,1,1),
  (1,0,0,0,1,0,1,1,0,0,1,1),
  (1,0,1,0,0,0,0,0,1,0,1,1),
  (1,0,1,0,1,0,1,1,0,0,1,1),
  (1,1,1,1,1,1,1,1,1,1,1,1),
  (1,0,0,1,1,0,0,1,0,0,0,1),
  (1,0,1,0,0,1,0,1,0,0,1,1),
  (1,0,1,0,0,1,0,1,0,0,0,1),
  (1,1,1,0,0,1,0,1,0,0,1,1),
  (1,0,0,1,1,0,0,0,0,0,0,1),
  (1,0,0,1,1,0,0,1,0,0,0,1),
  (1,0,0,0,0,0,0,1,0,0,1,1),
  (1,0,0,1,1,0,0,1,0,0,1,1),
  (1,0,0,1,1,0,0,1,0,0,0,1),
  (1,0,0,1,0,0,0,1,0,0,0,1),
  (1,1,1,1,1,1,1,1,1,1,1,1));
 
  places_ :array[1..6] of string =
  ('Jestes na lesnej sciezce.',
   'Mozesz isc na :',
   'Przed toba jaskinia.',
   'Przed toba wyjscie z jaskini.',
   'Jestes w ciemnej jaskini.',
   'Jestes w podziemnym labiryncie.');
   
  
  items :array [1..MAXITEMS] of string = ('KAMIEN','SZTYLET','PATYK','LISC','SZNUREK');
  
  
var
    X :byte; Y:byte; JASKINIA: byte; MAPVISIBLE :byte; INCAVE :byte; ITEMHERE :byte;
    ITEMINLOC :array [1..MAXITEMS] of byte;
    LOCITEMX  :array[1..MAXITEMS] of byte;
    LOCITEMY  :array[1..MAXITEMS] of byte; 
    PLACE_    :string[200]; C_ :string[15];
    
    VERB_ :string; INV_ :string[15]; INV :array[1..MAXITEMS] of byte; LOCX :byte; LOCY :byte; TMP_ :string;
    LOCN, LOCS, LOCE, LOCW, OLDX, OLDY :byte;
    N_, S_, E_, W_ :string[10];
    
    noun :string[15];
    cmd  :string[50];
    i :byte;
    
    
    
procedure look;
begin
{6452 IF LOCY>5 THEN RESTORE 6005:READ PLACE$
6453 PRINT :PRINT PLACE$;:PRINT " ";:ITEMHERE=0
6454 FOR I=1 TO MAXITEMS:IF ITEMINLOC(I)=1 AND LOCITEMX(I)=LOCX AND LOCITEMY(I)=LOCY THEN ITEMHERE=1
6455 NEXT I:IF ITEMHERE=1 THEN PRINT "Tu lezy ";
6456 RESTORE 6504:FOR I=1 TO MAXITEMS:READ VERB$
6457 IF ITEMINLOC(I)=1 AND LOCITEMX(I)=LOCX AND LOCITEMY(I)=LOCY THEN PRINT VERB$;:PRINT " ";
6458 NEXT I:PRINT :PRINT "NACISNIJ <RETURN>";:INPUT VERB$:PRINT 
6459 ITEMHERE=0:RETURN 
}

end;


procedure open;
begin
{
204 IF (JASKINIA=1) AND (LOCX=8) AND (LOCY=3) THEN PRINT "Jaskinia jest otwarta.":JASKINIA=0
205 IF JASKINIA=1 THEN PRINT "Nie mozesz tu nic otworzyc.":PRINT "Nacisnij <RETURN>":INPUT VERB$
207 RETURN 
}
end;


procedure show_inv;
begin
{
1000 PRINT :PRINT "Posiadasz: ":RESTORE 6504:FOR I=1 TO MAXITEMS:READ INV$
1001 IF INV(I)>0 THEN PRINT INV$;:INPUT VERB$
1002 NEXT I:RETURN 
}
end;


procedure show_map;
begin
{
198 RESTORE 6530:X=5:IF LOCY>5 THEN X=16
200 FOR I=1 TO X:FOR J=1 TO 12:READ C:COLOR C:FOR X=1 TO 4:PLOT J*4,I*4+X:DRAWTO (J+4)*4,I*4+X
201 PLOT J*4,I*4+4:DRAWTO J*4+4,I*4+4:NEXT X:NEXT J:NEXT I
202 COLOR 2:PLOT LOCX*4+2,LOCY*4+2:OLDX=LOCX:OLDY=Y:MAPVISIBLE=1
203 RETURN 
}
end;



function end_check :boolean;
begin

end_check:=false;

IF (INV[3]=1) AND (LOCITEMX[1]=10) AND (LOCITEMY[1]=4) AND (INV[5]=1) THEN end_check:=true;

end;


procedure get;
begin
{
6440 PRINT "Co bierzesz ";:INPUT TMP$
6441 RESTORE 6504:FOR I=1 TO MAXITEMS:READ VERB$
6442 IF LOCX=LOCITEMX(I) AND LOCY=LOCITEMY(I) AND VERB$=TMP$ THEN INV(I)=1:LOCITEMX(I)=-1:LOCITEMY(I)=0
6443 IF LOCITEMX(I)=-1 THEN ITEMINLOC(I)=ITEMINLOC(I)-1:ITEMHERE=3:LOCITEMX(I)=0
6444 NEXT I:IF ITEMHERE=3 THEN PRINT :PRINT "Wziales ";:PRINT TMP$
6445 ITEMHERE=0:RETURN 
}
end;


procedure drop;
begin

{
6446 PRINT "Co chcesz zostawic ";:INPUT TMP$:RESTORE 6504:FOR I=1 TO MAXITEMS:READ VERB$
6447 IF INV(I)=1 AND VERB$=TMP$ THEN GOTO 6449
6448 NEXT I:RETURN 
6449 INV(I)=0:LOCITEMX(I)=LOCX:LOCITEMY(I)=LOCY:ITEMINLOC(I)=ITEMINLOC(I)+1
6450 PRINT "Zostawiles ";:PRINT TMP$
6451 RETURN 
}
end;


procedure enter;
begin

{

220 OLDX=LOCX:OLDY=LOCY
221 IF LOCX=10 AND LOCY=3 AND INCAVE=1 THEN LOCX=8:LOCY=3:PRINT "Wyszedles z jaskini."
222 IF LOCX=8 AND LOCY=3 AND JASKINIA=0 AND INCAVE=0 THEN LOCX=10:LOCY=3:PRINT "Wszedles do jaskini"
223 IF (LOCX=10 OR LOCX=8) AND LOCY=3 THEN IF INCAVE=0 THEN INCAVE=1:GOTO 229
224 IF (LOCX=10 OR LOCX=8) AND LOCY=3 THEN IF INCAVE=1 THEN INCAVE=0
225 IF LOCX=9 AND LOCY=4 THEN LOCY=6:PRINT "Wszedles do labiryntu.":GOTO 229
226 IF LOCX=9 AND LOCY=6 THEN LOCY=4:PRINT "Wszedles do jaskini.":GOTO 229
229 RETURN 
}

end;



procedure move_hero;
begin
{
COLOR 0:PLOT OLDX*4+2,OLDY*4+2:COLOR 1:PLOT LOCX*4+2,LOCY*4+2
}
end;

begin
	

N_:='POLNOC'; S_:='POLUDNIE'; E_:='WSCHOD'; W_:='ZACHOD';
C_:='CO ROBISZ ';
LOCX:=6;LOCY:=3;

FOR I:=1 TO MAXITEMS DO INV[I]:=0;


repeat
  
  VERB_:='KONIEC';
  
  clrscr;

  writeln('QUEST ver. beta 04.01'); writeln;

  writeln('AUTOR: SMAKU NOV.18.2015'); writeln;

  writeln('SLOWNIK: N,S,E,W,LOOK,GET,DROP,INV, MAP,EXIT,OPEN,ENTER'); writeln;

  writeln('ZADANIE:'); writeln;

  writeln('Zostaw kamien w odpowiednim miejscu jaskini i z patykiem oraz sznurkiem znajdz wyjscie z lasu. Wejscie do labiryntu podziemnego znajduje sie w jaskini.'); writeln;

  writeln('GRAJ    - rozpoczecie gry.');
  writeln('KONIEC  - wyjscie z gry.'); writeln;

  write('Co robisz ?'); readln(VERB_);
  
  VERB_:='KONIEC';
  
until (VERB_='GRAJ') or (VERB_='KONIEC');

IF VERB_='GRAJ' then
 { POCZATEK GRY}
  begin

	FOR I:=1 TO MAXITEMS do ITEMINLOC[I]:=0;

	ITEMINLOC[5]:=1; LOCITEMX[5]:=2; LOCITEMY[5]:=14;

	ITEMINLOC[3]:=1; LOCITEMX[3]:=8; LOCITEMY[3]:=3;ITEMINLOC[1]:=1;LOCITEMX[1]:=9;LOCITEMY[1]:=2;

	LOCN:=1;LOCS:=1;LOCE:=1;LOCW:=1;JASKINIA:=1;MAPVISIBLE:=0;INCAVE:=0;ITEMHERE:=0;

	FOR I:=1 TO MAXITEMS do INV[I]:=0; INV[2]:=1;INV[4]:=1;




IF VERB_='EXIT' THEN writeln; writeln('KONIEC GRY. DZIEKUJEMY.'); writeln('Nacisnij RETURN>'); readln(VERB_); VERB_:='KONIEC';


IF VERB_='E' THEN IF LOCE=0 THEN begin write('Idziesz na wschod. ');OLDX:=LOCX;OLDY:=LOCY;LOCX:=LOCX+1; end;
IF VERB_='N' THEN IF LOCN=0 THEN begin write('Idziesz na polnoc. ');OLDX:=LOCX;OLDY:=LOCY;LOCY:=LOCY-1; end;
IF VERB_='W' THEN IF LOCW=0 THEN begin write('Idziesz na zachod. ');OLDX:=LOCX;OLDY:=LOCY;LOCX:=LOCX-1; end;
IF VERB_='S' THEN IF LOCS=0 THEN begin write('Idziesz na poludnie. '); OLDX:=LOCX; OLDY:=LOCY; LOCY:=LOCY+1; end;


IF VERB_='MAP' THEN show_map;
IF VERB_='LOOK' THEN look;
IF VERB_='OPEN' THEN open;
IF VERB_='INV' THEN show_inv;

ITEMHERE:=0;
FOR I:=1 TO MAXITEMS do IF (ITEMINLOC[I]=1) AND (LOCITEMX[I]=LOCX) AND (LOCITEMY[I]=LOCY) THEN ITEMHERE:=1;


IF ITEMHERE=1 THEN write('Tu cos jest. '); ITEMHERE:=0;

IF VERB_='GET' THEN get;
IF VERB_='DROP' THEN drop;
IF VERB_='ENTER' THEN enter;


IF (LOCX=2) AND (LOCY=4) AND (end_check) then begin VERB_:='KONIEC'; writeln; writeln('WYSZEDLES Z LASU. GRATULACJE.');writeln('Nacisnij <RETURN>');readln(VERB_); end;

IF MAPVISIBLE=1 THEN move_hero;


{
w basic:

itemhere=0 *80-90) usunąc powtórzenie

zmienna LOCWY - poprawić



98 GRAPHICS 6:COLOR 2
99 RESTORE 6300:READ PLACE$:RESTORE 6504:READ INV$

100 PRINT :PRINT C$;:INPUT VERB$:PRINT :FOR I=1 TO MAXITEMS:IF ITEMINLOC(I)=1 THEN INTEMHERE=1:NEXT I

101 RESTORE 6530+LOCY-2:FOR I=1 TO LOCX:READ LOC:NEXT I:LOCN=LOC
102 RESTORE 6530+LOCY-1:FOR I=1 TO LOCX-1:READ LOC:NEXT I:LOCW=LOC
103 READ LOC:READ LOC:LOCE=LOC
104 RESTORE 6530+LOCY:FOR I=1 TO LOCX:READ LOC:NEXT I:LOCS=LOC



109 RESTORE 6000:READ PLACE$:IF (LOCX=8) AND (LOCY=3) THEN RESTORE 6002:READ PLACE$
110 IF LOCX>8 THEN RESTORE 6004:READ PLACE$
111 IF LOCX=10 AND LOCY=3 THEN RESTORE 6003:READ PLACE$




210 RESTORE 6000:READ PLACE$:IF LOCX=8 AND LOCX=3 THEN RESTORE 6002:READ PLACE$




6501 DATA 20,80,100,50,20,20
6502 DATA 80,80,130,50,150,50
6503 DATA 40,4,150,30,150,30

}


 end;
 
	{ KONIEC }
	
	writeln('Dziekujemy, do widzenia. Koniec gry. Zapraszamy ponownie.');
	
end.