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/18 00:26:57

MixJuice GET URL : kidspod.club/mj/463

ハノイの塔

『ハノイの塔』は、棒に刺さっている円盤を別の棒に移し替えるパズルゲームです。

【ルール】
三本の棒があり、左の棒に円盤が大きさの順に刺さっています。
これらの左の棒の全ての円盤を、右の棒へ移し替えて下さい。

円盤は 1 枚ずつ移動させることができ、
小さな円盤の上に大きな円盤を移動させることはできません。

【操作】
1 : 左の棒を選択
2 : 中央の棒を選択
3 : 右の棒を選択

【更新履歴】
2018/02/18 初版公開
2018/02/28 コード最適化

【ソースコード解説】
《変数》
C : Character, 選択状態を示すキャラクタ
K : Key, キー入力値
S : Select, 円盤の移動元の選択状態(-1:選択していない, 0:左, 1:中央, 2:右)
T : Target, 円盤の移動先の選択状態(0:左, 1:中央, 2:右)
U : 円盤の移動元の一番上にある円盤の位置( 0 ~ 11 )
V : 円盤の移動先の一番上にある円盤の位置( 0 ~ 11 )
W : Write, 描画する円盤の位置( 0 ~ 11 )
Z : 一時変数(円盤の描画に利用)
I,J : Iterator, ループ変数

《配列》
[0] ~ [3] : 左の棒の円盤
[4] ~ [7] : 中央の棒の円盤
[8] ~ [11] : 右の棒の円盤

《コード》
5 : タイトル
10 : 初期化
20 ~ 40 : 棒の描画
50 : 円盤の初期化
60 : 選択状態の初期化
70 : キー入力受付
80 : 移動元が選択された際の処理
90 : 移動先が選択された際の処理
100 ~ 110 : U の算出
120 ~ 130 : V の算出
140 : 円盤を移動できるかどうかの判定
150 ~ 160 : 円盤の移動
170 : ゲームクリア判定
180 : 選択状態の消去
190 : 無効な選択状態を示す「x」の描画
200 : 選択状態の描画
210 : 円盤の描画または消去

  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

SOURCE CODE

5 'Tower of Hanoi
10 CLS:CLV:CLP
20 FOR I=0 TO 30:LC I,17:?CHR$(1);:NEXT
30 FOR I=0 TO 2:FOR J=1 TO 5:LC 5+10*I,17-J:?CHR$(1);:NEXT:NEXT
40 FOR I=0 TO 2:LC 5+10*I,19:?I+1;:NEXT
50 FOR W=0 TO 3:[W]=4-W:GSB 210:NEXT
60 CLK:S=-1
70 K=INKEY():IF K<#31||K>#33 GOTO 70
80 IF S=-1 S=K-#31:C=#E2:GSB 200:IF [S<<2] GOTO 70 ELSE GOTO 190
90 T=K-#31:IF S=T GOTO 180 ELSE C=#E3:GSB 200
100 U=S<<2|3
110 IF ![U]&&U&3>0 U=U-1:GOTO 110
120 V=T<<2|3
130 IF ![V]&&V&3>0 V=V-1:GOTO 130
140 IF [U]>[V]&&[V]!=0 GOTO 190
150 IF [V] V=V+1
160 [V]=[U]:[U]=0:W=U:GSB 210:W=V:GSB 210
170 IF [11]=1 LC 13,21:?"CLEAR!":END
180 C=0:FOR K=#31 TO #33:GSB 200:NEXT:GOTO 60
190 WAIT 15:LC 5+(K-#31)*10,10:?"x";:WAIT 45:?CHR$(28,0);:GOTO 180
200 LC 5+(K-#31)*10,9:?CHR$(C);:RTN
210 Z=[W]:FOR I=0 TO Z+(Z=0)*4:FOR J=0 TO 1:LC 5+W>>2*10+(J*2-1)*I,16-(W&3):?CHR$((Z!=0)*2+(Z=0)&(I=0));:NEXT:NEXT:RTN

COMMENT

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

古典的パズルを見事に再現しましたね。難易度も決して高くなく、操作感も矢印キーを使うよりも素早く扱えて素敵です。