# Sokoban (The wherehouse keeper) #
# Original author
# @ $
# $
# N80 Ver, name-tech
1981-9999
Hiroyuki.Imabayashi
2019.06.03
10 WIDTH 40,25:CONSOLE 0,25,0,1:DEFINT A-Z
20 DIM SM$(6),SC(6),SO$(6),MC$(19),MA(31,19),MX,MY,H,PX,PY,PL,PR,PD,PU,P,PM(2),LR,UD,S
30 FOR I=0 TO 6 :READ SM$(I):NEXT
40 FOR I=0 TO 6 :READ SC(I):NEXT
50 FOR I=0 TO 6 :READ SO$(I):NEXT
51 ' Sokoban Char
52 DATA " ",.@,$,*,#,
53 DATA 0,5,3,5,6,5,2
54 ' N80 Char
55 DATA " ",.,#,0,0,
90 GOSUB 900 : ' マップ セイセイヘ
100 ' ハイレツ アフレ タイサク
110 IF PX<2 THEN PL=4 ELSE PL=MA(PX-2,PY)
120 IF PX>MX-2 THEN PR=4 ELSE PR=MA(PX+2,PY)
130 IF PY<2 THEN PD=4 ELSE PD=MA(PX,PY-2)
140 IF PY>MY-2 THEN PU=4 ELSE PU=MA(PX,PY+2)
200 ' ニュウリョクマチ
200 I0=INP(0):I1=INP(1)
210 IF I0=239 AND MA(PX-1,PY)+PL<8 THEN LR=-1:GOTO 300:' L
220 IF I0=191 AND MA(PX+1,PY)+PR<8 THEN LR=+1:GOTO 300:' R
230 IF I1=254 AND MA(PX,PY-1)+PD<8 THEN UD=-1:GOTO 400:' U
240 IF I0=251 AND MA(PX,PY+1)+PU<8 THEN UD=+1:GOTO 400:' D
250 IF I0=254 THEN 620
260 IF I1=127 THEN 640
270 GOTO 200
300 ' サユウ イドウ
300 PM(0)=MA(PX,PY):PM(1)=MA(PX+LR,PY):PM(2)=MA(PX+LR+LR,PY)
310 IF PM(1)=0 OR PM(1)=1 THEN MA(PX,PY)=PM(0)-2:MA(PX+LR,PY)=PM(1)+2
320 IF PM(1)=4 OR PM(1)=5 THEN MA(PX,PY)=PM(0)-2:MA(PX+LR,PY)=PM(1)-2:MA(PX+LR+LR,PY)=PM(2)+4
330 PM(0)=MA(PX,PY):PM(1)=MA(PX+LR,PY):PM(2)=MA(PX+LR+LR,PY)
340 FOR I=0 TO 2: LOCATE PX+(LR*I),PY:PP=PM(I): COLOR SC(PP):? SO$(PP): NEXT
350 PX=PX+LR:LR=0: GOTO 500
400 ' ジョウゲ イドウ
400 PM(0)=MA(PX,PY):PM(1)=MA(PX,PY+UD):PM(2)=MA(PX,PY+UD+UD)
410 IF PM(1)=0 OR PM(1)=1 THEN MA(PX,PY)=PM(0)-2:MA(PX,PY+UD)=PM(1)+2
420 IF PM(1)=4 OR PM(1)=5 THEN MA(PX,PY)=PM(0)-2:MA(PX,PY+UD)=PM(1)-2:MA(PX,PY+UD+UD)=PM(2)+4
430 PM(0)=MA(PX,PY):PM(1)=MA(PX,PY+UD):PM(2)=MA(PX,PY+UD+UD)
440 FOR I=0 TO 2: LOCATE PX,PY+(UD*I):PP=PM(I): COLOR SC(PP):? SO$(PP): NEXT
450 PY=PY+UD:UD=0:GOTO 500
500 ' シュウノウ ハンティ
500 S=S+1:P=0: BEEP1: BEEP0
510 FOR I=1 TO MY-1:
520 FOR J=1 TO MX-1
530 IF MA(J,I)=5 THEN P=P+1
540 NEXT
550 NEXT
555 COLOR 7: LOCATE 9,23: PRINT USING "ニモツ ##コノウチ##コ シュウノウ ホスウ###ホ.";H;P;S
560 IF H=P THEN 600
570 GOTO 100
600 ' シュウリョウ メッセージ
600 COLOR 6: LOCATE 2,13:? "ソウコ カタズキマシタ! (^o^)b ヤッタネ": BEEP
610 LOCATE 2,15:? "オメデトウ!! アナタ セイシャインニ サイヨウ サレマシタ。":PRINT: END
620 COLOR 3: LOCATE 2,20:? "サイチョウセン ガンバレ!!(^^)p (^_^) ガンバレ": BEEP
630 LINE (0,0)-(31,19),BF:GOSUB 909:LINE(0,20)-(40,20),0,B:S=0:GOTO 100
640 COLOR 2: LOCATE 2,13:? "クビ クビニナリマシタ!": PRINT: BEEP: BEEP: END
900 ' マップ セイセイ
900 ? CHR$(12)
901 READ MY,MX
905 FOR I=0 TO MY
906 READ MC$(I)
907 NEXT
909 H=0
910 FOR I=0 TO MY
920 FOR J=0 TO MX
921 Z$= MID$(MC$(I),J+1,1)
922 FOR A=0 TO 6
923 IF Z$=SM$(A) THEN S=A
924 NEXT
930 MA(J,I)=S
931 LOCATE J,I: COLOR SC(S):? SO$(S)
933 IF S=2 THEN PX=J:PY=I
934 IF S=1 OR S=5 THEN H=H+1
940 NEXT
950 NEXT
950 RETURN
1000 DATA 6,6
1001 DATA"#####"
1002 DATA" # # "
1003 DATA "# # "
1004 DATA "##..* #"
1005 DATA "#$$##"
1006 DATA "# "
1007 DATA "###### "
' 20 level 01
' Title : Double Phase
' Author (サク) ラビ
' Replay : rdrdLLdd1luRdrUd1U.
google lens ?