「15パズル」作成②「盤面モデルの作成」

学習の目的

  • 1.盤面モデルを作成

  • 2.空きマスを調べる関数を作成

では、本格的にプログラムを作成していきましょう。

1.盤面モデルを作成

では、「15パズル」の盤面モデルを作成します。

4×4の二次元の配列(リスト)を作成します。

ここでは、盤面モデルと呼ぶことにします。

以下のプログラムを新しいセルに入力して実行してください。

tiles = [
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12],
    [13,14,15,0]
]

リストを定義しているだけなので、実行しても結果は何も表示されません。

以下の図のように、セルの左に緑のチェックマークがついていたら、問題ありません。

作成した盤面モデルを、tilesという名前の変数に代入しています。

複雑な感じがしますけど、各行のマスの値のリストがリストになっていると考えればいいんですね。

最後の値が0になってるけど、「15パズル」に0ってないよね。

いいところに気づきましたね。

このプログラムでは、0を空きマスとして扱うことにします。

なるほど、空きを表すデータとして、0を入れておくんですね。

そうですね。

また、この配列のイメージは以下の通りです。

実際にデータを表現するときは、tiles[行の番号][列の番号]で表現します。

盤面モデルの初期状態

今はクリアの状態になっていますが、後ほどバラバラにするプログラムも作成します。


問題:tiles[2][3]の入っている値は何でしょうか?

ヒント

どうしてもわからなければ、以下のプログラムを新しいセルで実行してみてください。

print(tiles[2][3])

2.空きマスを調べる関数を作成

続いて、空きマスの位置を調べる関数を作成します。

戻り値として、上からの番号と、左からの番号を返してくれる関数です。

以下のプログラムを新しいセルに入力して実行してください。

def find_blank():
    for i in range(4):
        for j in range(4):
            if tiles[i][j] == 0:
                return i, j

これは関数を作成しただけです。実行しても何も表示はされません。

これは、2重の繰り返しを作成し、変数tilesの内容を確認します。

if文を使い、0が見つかったら、その時の行の位置(i)と列の位置(j)をそれぞれreturnで返却します。

tilesの中の空きマスはtiles[3][3]の位置にあります。

以下のプログラムを実行して、それを確認してみましょう。

以下のプログラムを新しいセルに入力して実行してください。

i , j = find_blank()
print(i,j)

「3 3」と表示されれば成功です。

結果がそれ以外の場合は、関数を見直してみてください。

問題 : 盤面モデルが以下の図のようになっている場合、「i , j = find_blank()」で帰ってくる値は何でしょうか?

i

j

※この再現版では提出は行いません(送信先は未接続です)

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる