Enjoy programming more!
Kidspod is a post site which supports young programmers.
First step to join us.
Register as a member
For members

2018/02/12 15:12:02

MixJuice GET URL : kidspod.club/mj/462

15パズル

15パズルは、駒を移動させて目的の配置まで持っていくパズルゲームです。

【ルール】
縦 4 x 横 4 の 16 マスのスペースに、 1 ~ 15 の数字が書かれた 15 個の駒が配置されています。
1 マスの空白を利用して駒をスライドさせ、駒を移動することができます。
駒が下記の配置となればゲームクリアです。

  1 2 3 4
  5 6 7 8
  9 10 11 12
  13 14 15

【操作】
矢印 : 現在位置を移動させる(現在位置は "*" で示されています)
SPACE : 駒をスライドして移動させる

【注意】
初期化の時間短縮のため、実行してから遊べるようになるまでの間はビデオ出力をオフにしています。

この挙動が気になるようでしたら 10 行目の "VIDEO0" と 100 行目の "VIDEO1" の記述を削除して下さい。
初期化の時間が若干伸びますが、ビデオ出力は常にオンのままとなります。
(Kidspod運営チーム様、ご指摘ありがとうございます)

【更新履歴】
2018/02/12 初版公開
2018/02/15 駒の初期配置がゲームクリア不可能な配置にならないよう修正( Thanks to IchigoJam-FAN の皆様)

【ソースコード解説】
《変数》
C : Character, 現在位置を示すキャラクタ
P : Position, 現在位置( 0 ~ 15 )
S : Space, 空白位置( 0 ~ 15 )
K : Key, キー入力値
R : Random, 一時変数(駒の配置を崩すために利用)
T : Temporary, 一時変数(駒の移動に利用)
U,V : 一時変数(駒を移動できるかどうかの判定に利用)
Z : 一時変数(ゲームクリアの判定に利用)
I,J,L : Iterator, ループ変数

《配列》
[0] ~ [15] : 駒の配置

《コード》
5 : タイトル
10 : 初期化
20 ~ 30 : 駒の枠の定義
40 : 駒の初期配置
50 ~ 90 : 駒の配置を崩す
100 : ゲーム開始時の初期設定
110 : キー入力受付
120 : SPACEキー押下時の処理
130 : 矢印キー押下時の処理
140 ~ 180 : 駒を移動できるかどうかの判定
190 : 駒の移動
200 ~ 220 : 駒の描画
230 : 現在位置の描画
240 ~ 250 : ゲームクリア判定

  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

SOURCE CODE

5 '15 PUZZLE
10 VIDEO0:CLS:CLV
20 POKE#700,#86,#83,#83,#84,31,28,28,28,28,#85,#80,#80,#85,31,28,28,28,28,#85,#80,#80,#85,31,28,28,28,28,#82,#83,#83,#80,0
30 FORI=0TO3:POKE#730+I*9,#80,#80,#80,#80,31,28,28,28,28:NEXT:POKE#750,0
40 S=15:FORI=0TO14:[I]=I+1:NEXT
50 FORI=0TO150
60 R=RND(4):IF RND(2) P=S&3+R<<2 ELSE P=S&12+R
70 IF P=S GOTO60
80 GSB150
90 NEXT
100 P=0:C=#2A:GSB200:VIDEO1
110 K=INKEY():IF K<28||K>32 GOTO110
120 IF K=32 GSB140:GSB200:GSB240:GOTO110
130 C=0:GSB230:P=P-(K=28)+(K=29)-(k=30)*4+(k=31)*4+(P&3=0&&K=28)*4-(P&3=3&&K=29)*4+(P<4&&K=30)*16-(P>11&&K=31)*16:C=#2A:GSB230:GOTO110
140 IF P=S RTN
150 U=(P>S)*2-1:V=ABS(P-S)
160 IF (P>>2)=(S>>2) FORJ=1TOV:P=S+U:GSB190:NEXT:P=S:RTN
170 IF (P&3)=(S&3) FORJ=1TOV>>2:P=S+U<<2:GSB190:NEXT:P=S
180 RTN
190 T=S:S=P:P=T:[P]=[S]:[S]=0:RTN
200 FORI=0TO3:FORJ=0TO3
210 L=[I*4+J]:LC J*4,I*4:?STR$(#700+#30*(L=0));:IF L LCJ*4-(l>9)+2,I*4+1:?L;
220 NEXT:NEXT
230 LC(P&3)*4+2,(P>>2)*4+2:?CHR$(C):RTN
240 Z=0:FORI=0TO15:Z=Z+([I]=I+1):NEXT:IF Z=15 LC 5,18:?"CLEAR!":END
250 RTN

COMMENT

Kidspod運営チーム
Kidspod運営チーム2018/02/23 17:57:18

最初のパズル生成のところで画面がしばらく映らなくなるのが注意点でしょうか(私はうっかり、IchigoJamを再起動してしまいました)。クリア不可能にならないようにするという工夫も見事です! これは延々と時間を取られてしまいそうですね。