yucatio@システムエンジニア

趣味で作ったものいろいろ

最終的に出来上がる配列の確認と関数の準備 (KATAMINOを解くプログラムを作成する)

★前回の記事

yucatio.hatenablog.com

前回、もととなるピースの配列を作成しました。 ここから各ピースを転置・反転したものを作成していきます。

現在各ピースは、

  [
    [1, 1, 1, 0],
    [0, 0, 1, 1]
  ]

のように2次元配列で表現されています。これを最終的には(最大で)8種類の回転・反転したものを求め、ピースが存在する場所のリストで表します。

例えば、以下のピースだと、

f:id:yucatio:20190704073902p:plain

もとの配列は以下で、

[
    [1, 1, 1, 1],
    [0, 1, 0, 0]
]

最終的に作成する配列は以下のようになります。

[
  [{"x":0,"y":0},{"x":0,"y":1},{"x":0,"y":2},{"x":0,"y":3},{"x":1,"y":1}],  // 0番のspin
  [{"x":0,"y":0},{"x":1,"y":0},{"x":2,"y":0},{"x":2,"y":1},{"x":3,"y":0}],  // 1番のspin
  [{"x":0,"y":2},{"x":1,"y":0},{"x":1,"y":1},{"x":1,"y":2},{"x":1,"y":3}],  // 2番のspin
  [{"x":0,"y":1},{"x":1,"y":0},{"x":1,"y":1},{"x":2,"y":1},{"x":3,"y":1}],  // 3番のspin
  [{"x":0,"y":1},{"x":1,"y":0},{"x":1,"y":1},{"x":1,"y":2},{"x":1,"y":3}],  // 4番のspin
  [{"x":0,"y":1},{"x":1,"y":1},{"x":2,"y":0},{"x":2,"y":1},{"x":3,"y":1}],  // 5番のspin
  [{"x":0,"y":0},{"x":0,"y":1},{"x":0,"y":2},{"x":0,"y":3},{"x":1,"y":2}],  // 6番のspin
  [{"x":0,"y":0},{"x":1,"y":0},{"x":1,"y":1},{"x":2,"y":0},{"x":3,"y":0}]   // 7番のspin
]

この配列の各要素と順番は以下の8種類の回転・反転に対応しています。(参考:

yucatio.hatenablog.com

)

f:id:yucatio:20190704075922p:plain

これ以降、この各回転・反転のことをスピン(spin)と呼びます。

プログラミングしていきましょう。 KATAMINO_ORG_ARRAYの各要素を変換していくので、map関数を使います。mapの中で、createKataminoSpinList関数を呼んでいます。この関数は、各ピースから、そのピースのスピンを求め、それぞれのスピンのピースの場所をリストで表現したものを返します。

const KATAMINO_ARRAY = KATAMINO_ORG_ARRAY.map(piece => createKataminoSpinList(piece))

/*
 * 各ピースを回転・反転した時のピースの場所のリストを作成する
 */
function createKataminoSpinList(piece) {
  console.log("piece", piece)

  return piece
}

出力が以下のようになっていればOKです。

f:id:yucatio:20190704075327p:plain

以上で最終的に出来上がる配列とmapを使用してピースの回転リストを作成する準備ができました。


★次回の記事

yucatio.hatenablog.com

★目次

yucatio.hatenablog.com