こんにちは。ティーマネジメントの田中です。
こちらは後半記事 1/2となります。
前半記事で15パズルについての説明を行いました。
後半記事では、15パズルをどのようにFileMaker データベースで実現したかの考え方について、解説できればと思っています。
ご興味のある方はぜひご覧ください。
ゲームが遊べたらいい、という方は、前半記事の方にFileMakerファイルと、45日間の無料評価版FileMakerがダウンロードできる、Claris公式リンクをつけておりますので、前半記事をご覧ください。
マス番号とパネル
15パズルでは、16個のマスが必要になります。
まず、16個のマスに1~16までの番号をつけて、管理できるようにします。
これをマス番号とします。
続いて、それぞれのマスについて、「行番号」と「列番号」を考えます。
タテが行、ヨコが列です。
それぞれのマスについて、行番号と列番号を表にすると、
このようになります。
行番号は、「マス番号を4で割った数から、切り上げた整数」
列番号は、「マス番号を4で割った余りの数(余りが0となる場合は4とする)」
という考え方で求めることができます。
この行番号と列番号は後の計算に使います。
次に、仮に1から15までのパネルを配置してみます。
これは、完成となる配置から規定回数ランダムに動かした配置なので、「詰み」の配置ではありません。
「詰み」となる配置についても、後に解説します。
説明用として作ったパネルの配置を使いましょう。
正しい配置と、現在の番号について表に当てはめると、次のようになります。
さて、ゲームをクリアするには、パネルを動かしていく必要があります。
つまり、今配置されているパネルの中で、「動かせるパネル」「動かせないパネル」が存在します。
仮に配置した画像を見て頂くと分かるのですが、ここで動かせるのは「7」と「15」のパネルです。
ということは、マス番号でいうと「12」と「15」です。
空きマスとなるマス番号は「16」なので、
「16」が空いているときは、「12」「15」に配置されているパネルを、「16」に移動できる ということになります。
マスの選択とパネルの移動
先ほどの表に、「このパネルは移動することができるか」というステータスを設定してみます。
1と0の値で表します。1は可能、0は不可能です。
マス番号が16に隣接するマス番号は、12 , 15 です。
隣接するマスは、行番号と列番号を使って、条件をつけることができます。
文章にしてみると、
① 空欄マス(16)と同じ行(4)にあり、列の値の差が1であること。
もしくは、
② 空欄マス(16)と同じ列(4)にあり、行の値の差が1であること。
です。
マス番号12について上記の条件を考えると、
空欄マスと同じ列(4)にあり、行の値の差は 4 - 3 = 1であることから、条件に当てはまります。
マス番号15について上記の条件を考えると、
空欄マスと同じ行(4)にあり、列の値の差は 4 - 3 = 1であることから、条件に当てはまります。
条件に当てはまったときは1 , 当てはまらないときは0として考えると、先ほどの表のようになります。
ユーザの操作を考える
スライドができるパネル、できないパネルを先ほどの表で示しました。
次に、ユーザの操作を考えます。
マス番号を選択して、空いているマスにスライドしますので、マス番号を選択したときにスクリプトを実行して、スクリプト引数としてはマス番号を設定しておけば、
選択したマスがスライドできる場合の処理、スライドできない場合の処理、という風に場合分けできます。
後は、この処理を繰り返していき、
正しい配置
になっているか、判定すればOKです。
パズルを動かす方法と、ゲームクリアの判定について、実装方法はこれでよさそうです。
ゲームを始める前に、パネルをランダムに並べる必要があります。
これもスクリプトで行います。
次に、パネルの初期配置について考えていきます。
次回へ続きます… 次の記事へ (2024/10/24追記) → Claris FileMakerで遊べるゲーム作ってみた 後編 2/2