Last active
April 19, 2025 02:15
-
-
Save fu-sen/201189e0c1ffb333206598ef10a9f69f to your computer and use it in GitHub Desktop.
箱入り娘 Klotski | MSX-BASIC https://msxjpn.jimdofree.com/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/%E7%AE%B1%E5%85%A5%E3%82%8A%E5%A8%98/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
' Klotski | MSX-BASIC | |
' Copyright (c) 2025 BALLOON | FU-SEN | |
' The MIT License (MIT) - https://mit.balloon.net.eu.org/#2025 | |
100 DEFINT A-Z | |
110 DIM P(19) | |
120 SCREEN 1,3 | |
130 KEY OFF | |
140 SPRITE$(0)=CHR$(0)+STRING$(14,127)+STRING$(2,0)+STRING$(14,254) | |
150 SPRITE$(4)=CHR$(0)+STRING$(14,127)+STRING$(2,0)+STRING$(14,255) | |
160 SPRITE$(5)=CHR$(0)+STRING$(14,255)+STRING$(2,0)+STRING$(14,254) | |
170 SPRITE$(8)=CHR$(0)+STRING$(15,127)+CHR$(0)+STRING$(15,254) | |
180 SPRITE$(10)=STRING$(15,127)+CHR$(0)+STRING$(15,254) | |
190 SPRITE$(12)=CHR$(0)+STRING$(15,127)+CHR$(0)+STRING$(15,255) | |
200 SPRITE$(13)=CHR$(0)+STRING$(15,255)+CHR$(0)+STRING$(15,254) | |
210 SPRITE$(14)=STRING$(15,127)+CHR$(0)+STRING$(15,255) | |
220 SPRITE$(15)=STRING$(15,255)+CHR$(0)+STRING$(15,254) | |
230 SPRITE$(16)=STRING$(6,0)+STRING$(4,3)+STRING$(12,0)+STRING$(4,192) | |
240 SPRITE$(17)=STRING$(8,255)+STRING$(8,0)+STRING$(8,255) | |
250 RESTORE | |
260 FOR I=0 TO 19 | |
270 READ P(I) | |
280 PUT SPRITE I,((I MOD 4)*32+64,INT(I/4)*32+16),15,P(I) | |
290 NEXT I | |
300 PUT SPRITE 20,(96,176),14,17 | |
310 PUT SPRITE 21,(128,176),14,17 | |
320 X=1 | |
330 Y=4 | |
340 C=0 | |
350 PUT SPRITE X+Y*4,,10-C*2 | |
360 IF P(13)=12 THEN DEF USR=&H156:U=USR(0):END | |
370 S=STICK(0)+STICK(1) | |
380 MX=X-((X>0)*(S=7))+((X<3)*(S=3)) | |
390 MY=Y-((Y>0)*(S=1))+((Y<4)*(S=5)) | |
400 IF STRIG(0)+STRIG(1)=0 GOTO 440 | |
410 IF P(X+Y*4)=16 GOTO 440 | |
420 C=1-C | |
430 PUT SPRITE X+Y*4,,15 | |
440 IF STRIG(0)+STRIG(1)<0 GOTO 440 | |
450 IF MX=X AND MY=Y GOTO 350 | |
460 PUT SPRITE X+Y*4,,15 | |
470 IF STICK(0)+STICK(1)>0 GOTO 470 | |
480 IF C=0 THEN X=MX:Y=MY:GOTO 350 | |
490 P=P(X+Y*4) | |
500 A=P/4 | |
510 B=P MOD 4 | |
520 AX=A MOD 2 | |
530 AY=A/2 | |
540 BX=B MOD 2 | |
550 BY=B/2 | |
560 FOR YY=0 TO AY | |
570 FOR XX=0 TO AX | |
580 P((X+XX-BX)+(Y+YY-BY)*4)=16 | |
590 PUT SPRITE (X+XX-BX)+(Y+YY-BY)*4,,15,16 | |
600 NEXT XX | |
610 NEXT YY | |
620 O=1 | |
630 FOR YY=0 TO AY | |
640 FOR XX=0 TO AX | |
650 IF (MX+XX-BX)+(MY+YY-BY)*4<0 OR (MX+XX-BX)+(MY+YY-BY)*4>19 THEN O=0:GOTO 670 | |
660 IF P((MX+XX-BX)+(MY+YY-BY)*4)<16 THEN O=0 | |
670 NEXT XX | |
680 NEXT YY | |
690 IF O=1 THEN X=MX:Y=MY | |
700 FOR YY=0 TO AY | |
710 FOR XX=0 TO AX | |
720 P((X+XX-BX)+(Y+YY-BY)*4)=P+(YY-BY)*2+XX-BX | |
730 PUT SPRITE (X+XX-BX)+(Y+YY-BY)*4,,15,P((X+XX-BX)+(Y+YY-BY)*4) | |
740 NEXT XX | |
750 NEXT YY | |
760 GOTO 350 | |
770 DATA 8,12,13, 8 | |
780 DATA 10,14,15,10 | |
790 DATA 8, 4, 5, 8 | |
800 DATA 10, 0, 0,10 | |
810 DATA 0,16,16, 0 |
Author
fu-sen
commented
Jan 22, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment