PRG:QUEENS
セツメイEXPLANATION
「nクイーン問題」を解くパズル。n個のチェスのクイーンを、お互いに取られないような位置にn×nの盤面に全て配置する。This is a puzzle game to solve "n-queens problem": placing chess queens on the board so that no two queens threaten each other.
クイーンの動きは、上下左右斜めの8方向に遮る物がない限り進める。(将棋の飛車と角行を合わせた動き)Thus, a solution requires that no two queens share the same row, column, or diagonal.
タッチペンでクイーンを模したキャラを移動・配置。十字キーの上下で盤のサイズを変更。Bボタンでリセット。Move and place the character as a queen by touch-pen. You can expand or contract the board by D-pad. You can reset the board by B button.
QRコードQR CODE
プログラムコードPROGRAM CODE
表示 Show
B | ボタンの状態 |
C$ | キャラクターデータ設定用 |
D | 盤面初期化時のクイーンの列数 |
F() | クイーンの状態(0:盤外, 1:正常, 7:取られる位置) |
I,J | 汎用ループカウンタ |
L | 現在操作中のスプライト番号 |
N | 盤面のサイズ |
Q | 盤面サイズの変更量 |
T | タッチの状態 |
V,W | クイーン同士が取られる位置関係か判定用 |
X,Y | 離散値化したタッチの座標 |
X(),Y() | クイーンの座標 |
Z | 問題が解けたか判定用 |
01. CLEAR:N=8DIM X(12),Y(12),F(12)BGMPLAY 27PNLTYPE”OFFЛ
02. @IЛ
03. ACLS:GPAGE 1SPPAGE 1FOR I=0TO 127CHRREAD(”SPU1”,I+128),C$CHRSET”SPS”,I,C$NEXTЛ
04. D=2+(N>4)+(N>9)FOR I=0TO N-1FOR J=0TO N-1GFILL J*16,I*16,J*16+15,I*16+15,9-(I+J)%2*2NEXTЛ
05. SPSET I,0,6,1,0,3X(I)=(N+I/D+1OR 0)*16Y(I)=I%D*16NEXT:L=-1GOSUB@JЛ
06. @LЛ
07. X=TCHX AND 240Y=TCHY AND 240T=TCHSTЛ
08. FOR I=0TO(L*T<0)*N-1IF SPHITRC(I,X,Y,1,1)THEN SPCHR I,25L=IЛ
09. NEXT:IF L>=0THEN SPOFS L,X,Y:ON T GOSUB@RЛ
10. B=BTRIG()Q=(B==2)*(N<12)-(B==1)*(N>4)N=N+QЛ
11. VSYNC 1ON!Q*(B!=32)GOTO@I,@LЛ
12. @RЛ
13. IF!SPHIT(L)THEN X(L)=X:Y(L)=YЛ
14. @JЛ
15. FOR I=0TO N-1F(I)=N*16>X(I)AND N*16>Y(I)NEXTЛ
16. FOR I=0TO N-2FOR J=I+1TO N-1V=X(I)-X(J)W=Y(I)-Y(J)Л
17. IF(!V+!W+!(V-W)+!(V+W))*F(I)*F(J)THEN F(I)=7F(J)=7Л
18. NEXT:NEXTЛ
19. Z=N:FOR I=0TO N-1SPOFS I,X(I),Y(I)SPCHR I,F(I)*4Z=Z-(F(I)==1)NEXTЛ
20. IF L>=0THEN BEEP 9-(F(L)>1)*5+!Z*23Л
21. L=-1RETURNЛ
※コードのHTML生成にPTC2HTMLを使用しています。
モドル BACK