2 OPTION BASE 0 10 RANDOMIZE :: DIM K(7,9),N(16),S(16),E(16),W(16),TM(10),SM(10),UM(7),KM(10),TX(50),TY(50),XM(10),YM(10) 20 CALL CLEAR :: CALL MAGNIFY(3) :: CALL SCREEN(2) :: CALL CI :: CALL CHI 30 RESTORE 40 :: FOR T=1 TO 16 :: READ N(T),S(T),E(T),W(T) :: NEXT T 40 DATA 137,137,137,137,137,137,136,137,137,136,137,137,137,136,136,137,137,137,137,136 50 DATA 137,137,136,136,137,136,137,136,137,136,136,136,136,137,137,137,136,137,136,137,136,136,137,137 60 DATA 136,136,136,137,136,137,137,136,136,137,136,136,136,136,137,136,136,136,136,136 70 CALL CLEAR :: GOSUB 10000 80 CALL PL(K(,),N(),S(),E(),W()) 81 RY=INT(RND*7)+1 :: RX=INT(RND*9)+1 :: IF K(RY,RX)=1 THEN 81 ELSE X=RX*3+2 :: Y=RY*3-1 82 RX=1 :: RY=0 :: GOSUB 5000 :: RX=-1 :: GOSUB 5000 :: RY=-1 :: RX=0 :: GOSUB 5000 :: RY=1 :: GOSUB 5000 83 CALL GCHAR(Y,X,TE) :: TE=TE-8 :: CALL HCHAR(Y,X,TE) 90 FM=0 :: CALL SPRITE(#1,96,16,Y*8-11,X*8-11) :: GOSUB 6000 100 CALL JOYST(1,RX,RY) :: IF RX AND RY THEN 130 ELSE IF RX=0 AND RY=0 THEN 130 110 X=X+RX/4 :: Y=Y-RY/4 :: CALL GCHAR(Y,X,T) :: IF T<>128 AND T<>136 THEN X=X-RX/4 :: Y=Y+RY/4 :: GOTO 100 115 CALL LOCATE(#1,Y*8-11,X*8-11) 120 GOSUB 5000 130 IF FM=10 THEN FM=0 :: GOSUB 7000 135 FM=FM+1 140 GOTO 100 5000 SX,LY,SY,LX=0 5005 IF RY>0 THEN SY,LY=-1 :: SX=-1 :: LX=1 5010 IF RY<0 THEN SY,LY=1 :: SX=-1 :: LX=1 5020 IF RX<0 THEN SX,LX=-1 :: SY=-1 :: LY=1 5030 IF RX>0 THEN SX,LX=1 :: SY=-1 :: LY=1 5040 FOR R=SY TO LY :: FOR C=SX TO LX 5050 CALL GCHAR(Y+R,X+C,TE) :: IF TE>129 THEN TE=TE-8 ELSE 5060 5055 CALL HCHAR(Y+R,X+C,TE) 5060 NEXT C :: NEXT R 5070 RETURN 6000 FOR T=1 TO 5 :: TM(T)=INT(RND*7)+1 6010 XM(T)=INT(RND*27)+4 :: YM(T)=INT(RND*21)+1 :: CALL GCHAR(YM(T),XM(T),TE) :: IF TE<>136 THEN 6010 6020 CALL SPRITE(#T+1,100,1,YM(T)*8-11,XM(T)*8-11) 6030 NEXT T 6040 RETURN 7000 FOR T=1 TO 5 :: F=1 :: AX=(XM(T)>X)-(XM(T)Y)-(YM(T)129 THEN F=1 ELSE F=8 7036 GOTO 7070 7040 XM(T)=XM(T)+AX :: YM(T)=YM(T)+AY :: GOTO 7070 7050 XM(T)=XM(T)+AX :: GOTO 7070 7060 YM(T)=YM(T)+AY 7070 CALL COLOR(#T+1,F) :: CALL LOCATE(#1+T,YM(T)*8-11,XM(T)*8-11) :: NEXT T 7080 RETURN 10000 FOR R=1 TO 7 :: FOR C=1 TO 9 10010 IF C=1 THEN V1=0 ELSE L1=K(R,C-1) :: V1=-(INT(L1/2)=L1/2) 10020 IF R=1 THEN V2=0 ELSE L2=K(R-1,C) :: IF L2=0 THEN V2=1 ELSE V2=((L2-INT((L2-1)/4)*4)>2)*-2 10030 V3=V2 OR V1 :: SL=INT(RND*4)+1 :: IF V3=0 THEN IF RND*4>2 THEN K(R,C)=1 :: GOTO 10070 10031 IF R=1 AND C=1 THEN K(1,1)=4 :: GOTO 10070 10032 IF R=1 AND C=9 THEN K(1,9)=V1*6+1 :: GOTO 10070 10033 IF R=7 AND C=1 THEN K(7,1)=V2*4+2 :: GOTO 10070 10034 IF R=7 AND C=9 THEN K(7,9)=1-(V3=1)*4-(V3=2)*8-(V3=3)*12 :: GOTO 10070 10035 IF R>1 AND R<7 AND C>1 AND C<9 THEN 10036 ELSE 10040 10036 SV=-(K(R,C-1)=0)-2*(K(R-1,C)=0)+1 :: SQ=INT(RND*5)+1 :: IF 5-SVLO/4)*2-1 10060 IF R=7 AND LO-INT((LO-1)/4)*4>2 THEN K(R,C)=K(R,C)-1+(INT(LO/2)=LO/2) 10070 NEXT C :: NEXT R 10080 RETURN 20000 SUB CI :: RESTORE 20010 :: FOR T=1 TO 14 :: READ C,CC :: CALL COLOR(T,C,CC) :: NEXT T 20010 DATA 16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,15,2,13,4 20020 SUBEND 20030 SUB CHI :: RESTORE 20050 20040 READ A,A$ :: IF A=0 THEN 20050 ELSE CALL CHAR(A,A$) :: GOTO 20040 20050 DATA 128,00000000000000007EDBBDF7EFBDDB7E,136,CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 20060 DATA 96,00010301037D4555456D3B1706061E000084C484C484C4FEC4C0C0E0606078 20070 DATA 100,00081131317B7F7F773331311312130000E0C0F080C0C0CCF08CC0E02020B800 20080 DATA 0, 20090 SUBEND 25000 SUB KARTA :: FOR R=1 TO 21 STEP 2 :: FOR C=4 TO 30 :: CALL GCHAR(R,C,TE) :: IF TE>129 THEN TE=TE-8 :: CALL HCHAR(R,C,TE) 25010 NEXT C :: NEXT R 25020 FOR R=2 TO 21 STEP 2 :: FOR C=4 TO 30 :: CALL GCHAR(R,C,TE) :: IF TE>129 THEN TE=TE-8 :: CALL HCHAR(R,C,TE) 25030 NEXT C :: NEXT R 25040 SUBEND 30000 SUB PL(K(,),N(),S(),E(),W()) 30010 FOR R=1 TO 7 :: FOR C=1 TO 9 30015 Y=R*3-2 :: X=C*3+1 :: IF K(R,C)=0 THEN CALL HCHAR(Y,X,136,3) :: CALL HCHAR(Y+1,X,136,3) :: CALL HCHAR(Y+2,X,136,3) :: GOTO 30040 30020 FOR I=0 TO 2 :: CALL HCHAR(Y+I,X,137,3) :: NEXT I 30030 L=K(R,C) :: CALL HCHAR(Y,X+1,N(L)) :: CALL HCHAR(Y+2,X+1,S(L)) :: CALL HCHAR(Y+1,X+2,E(L)) :: CALL HCHAR(Y+1,X,W(L)) 30035 IF N(L)=137 AND S(L)=137 AND E(L)=137 AND W(L)=137 THEN 30040 ELSE CALL HCHAR(Y+1,X+1,136) 30040 NEXT C :: NEXT R :: SUBEND