Skip to content

Instantly share code, notes, and snippets.

@fu-sen
Last active April 19, 2025 02:15
Show Gist options
  • Save fu-sen/3d60b0c1b13c0f2dd5eca0dfb6c81be9 to your computer and use it in GitHub Desktop.
Save fu-sen/3d60b0c1b13c0f2dd5eca0dfb6c81be9 to your computer and use it in GitHub Desktop.
箱入り娘 (Klotski) - SHARP POCKET COMPUTER PC-G850 series BASIC https://poke-com.jimdofree.com/basic-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/
1 ' Calendar | SHARP POCKET COMPUTER PC-G850 series BASIC
2 ' Copyright (c) 2025 BALLOON | FU-SEN
3 ' The MIT License (MIT) - https://mit.balloon.net.eu.org/#2025
100 CLS :RESTORE :DIM P(19):PX=1:PY=4:C=0
110 LINE (52,0)-(91,47),S,BF
120 LINE (55,3)-(88,44),R,BF
130 LINE (64,45)-(79,47),R,BF
140 FOR I=0 TO 19:READ P(I)
150 GCURSOR ((I MOD 4)*8+56, INT (I/4)*8+11)
160 BL=P(I):GOSUB 520:NEXT I
170 GOSUB 500:MX=PX:MY=PY
180 I$= INKEY$
190 IF I$="8" OR I$= CHR$ (4) LET MY=PY-1
200 IF I$="2" OR I$= CHR$ (5) LET MY=PY+1
210 IF I$="6" OR I$= CHR$ (14) LET MX=PX+1
220 IF I$="4" OR I$= CHR$ (15) LET MX=PX-1
230 IF I$<>" " AND I$<> CHR$ (13) GOTO 270
240 IF INKEY$ <>"" GOTO 240
250 IF P(PX+PY*4)=16 GOTO 270
260 GOSUB 500:C=1-C:GOTO 170
270 IF MX=PX AND MY=PY GOTO 180
280 IF INKEY$ <>"" GOTO 280
290 IF MX<0 OR MX>3 LET MX=PX:GOTO 180
300 IF MY<0 OR MY>4 LET MY=PY:GOTO 180
310 GOSUB 500
320 IF C=0 LET PX=MX:PY=MY:GOTO 170
330 P=P(PX+PY*4):A= INT (P/4):B=P MOD 4
340 AX=A MOD 2:AY= INT (A/2)
350 BX=B MOD 2:BY= INT (B/2)
360 FOR YY=0 TO AY:FOR XX=0 TO AX
370 P(PX-BX+XX+(PY-BY+YY)*4)=16
380 GCURSOR ((PX-BX+XX)*8+56,(PY-BY+YY)*8+11)
390 BL=16:GOSUB 520:NEXT XX:NEXT YY
400 CH=1:FOR YY=0 TO AY:FOR XX=0 TO AX
410 IF MX-BX+XX+(MY-BY+YY)*4<0 OR MX-BX+XX+(MY-BY+YY)*4>19 LET CH=0:GOTO 430
420 IF P(MX-BX+XX+(MY-BY+YY)*4)<16 LET CH=0
430 NEXT XX:NEXT YY
440 IF CH=1 LET PX=MX:PY=MY
450 FOR YY=0 TO AY:FOR XX=0 TO AX
460 P(PX-BX+XX+(PY-BY+YY)*4)=P+XX-BX+(YY-BY)*2
470 GCURSOR ((PX-BX+XX)*8+56, INT (PY-BY+YY)*8+11)
480 BL=P+XX-BX+(YY-BY)*2:GOSUB 520:NEXT XX:NEXT YY
490 IF P(13)<>12 GOTO 170 ELSE END
500 IF C=1 LINE (PX*8+56,PY*8+4)-(PX*8+63,PY*8+11),X,BF:RETURN
510 LINE (PX*8+58,PY*8+6)-(PX*8+61,PY*8+9),X,BF:RETURN
520 IF BL=0 GPRINT "007E7E7E7E7E7E00":RETURN
530 IF BL=4 GPRINT "007E7E7E7E7E7E7E":RETURN
540 IF BL=5 GPRINT "7E7E7E7E7E7E7E00":RETURN
550 IF BL=8 GPRINT "00FEFEFEFEFEFE00":RETURN
560 IF BL=10 GPRINT "007F7F7F7F7F7F00":RETURN
570 IF BL=12 GPRINT "00FEFEFEFEFEFEFE":RETURN
580 IF BL=13 GPRINT "FEFEFEFEFEFEFE00":RETURN
590 IF BL=14 GPRINT "007F7F7F7F7F7F7F":RETURN
600 IF BL=15 GPRINT "7F7F7F7F7F7F7F00":RETURN
610 GPRINT "0000000000000000":RETURN
620 DATA 8,12,13, 8
630 DATA 10,14,15,10
640 DATA 8, 4, 5, 8
650 DATA 10, 0, 0,10
660 DATA 0,16,16, 0
@fu-sen
Copy link
Author

fu-sen commented Jan 23, 2025

klotski

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment