15パズル編


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

4x4の二次元配列を用意し、以下のように数字を配列せよ。数字のないところは空白とする。

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


この配列を画面上に表示せよ。可能ならば各数字をマウスなどで直接選択できるようにせよ。ラベル付きのボタンを4x4に並べて表示してもよい。表示された各配列の各要素を「駒」と呼ぶことにする。

1から15までの数字を入力する手段を実装せよ。配列をボタンで実現した場合には、押したボタンに書かれている数字が入力となるようにせよ。

入力された数字の駒がある配列の位置を特定せよ。

入力によって特定された配列の位置と同じ縦の列に空白がある時には、その数字と空白の間の駒をシフトする手続きを実装せよ。たとえば上図の場合において4が選択された時には4、8、12の駒が下に一つ移動することになり、元の4の位置が空白になる。

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


入力によって特定された配列の位置と同じ横の行に空白がある時には、その数字と空白の間の駒をシフトするように手続きを追加実装せよ。たとえば上図の場合において2が選択された時には2、3の駒が右に一つ移動することになり、元の2の位置が空白になる。

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


上記拡張された手続きにおいて、移動が成立した場合には戻り値として0を、対応する行や列に空白が無く、移動が成立しない場合に戻り値として-1を返すようにせよ。

1から15までの乱数を繰り返し生成し上記手続きに適用して、パズルの問題を作成せよ。繰り返し回数は200回位が適当だと思われる。

これまでに実装した駒の指示手段と移動手続き使用してプレイヤーが駒を動かせるようにせよ。

プレイヤーによる移動操作の結果を都度チェックして駒が最初の図の状態になっていることを検査し、ゲームの終了を判定せよ。

(2012/01/18)