8パターンのスピンを作成する (KATAMINOを解くプログラムを作成する)

★前回の記事

yucatio.hatenablog.com

前回までで、ピースの転置・反転のプログラムが作成できたので、残りのピースを作成します。 8パターンのスピンの作成については以下の記事を参照してください。

yucatio.hatenablog.com

各spinは0番を始めとして矢印の順番で生成します。

f:id:yucatio:20190702083723p:plain

前回までで0番と7番、1番のスピンを作成したので、今回は残りの6、2、5、3、4番を順に作成します。

function createKataminoSpinList(piece) {
  // 回転した形を格納する配列
  let spinArray = []

  spinArray[0] = copyArrayOfArray(piece)
  // 0番を転置したものが7番
  spinArray[7] = transpose(spinArray[0])
  // 7番をコピーして上下反転したものが1番
  spinArray[1] = copyArrayOfArray(spinArray[7]).reverse()
  // 1番を転置したものが6番
  spinArray[6] = transpose(spinArray[1])
  // 6番をコピーして上下反転したものが2番
  spinArray[2] = copyArrayOfArray(spinArray[6]).reverse()
  // 2番を転置したものが5番
  spinArray[5] = transpose(spinArray[2])
  // 5番をコピーして上下反転したものが3番
  spinArray[3] = copyArrayOfArray(spinArray[5]).reverse()
  // 3番を転置したものが4番
  spinArray[4] = transpose(spinArray[3])

  console.log("spinArray", spinArray)

  return spinArray
}

実行してみて、下記のようになって入れば成功です。

f:id:yucatio:20190715140542p:plain

上記は以下の8つのスピンを表しています。(上記画像では7個しか表示されていませんので、実行結果をご自身でご確認ください)

f:id:yucatio:20190715140644p:plain

ちなみに、以下のようにインデックス0,1,2..の順に格納しなかったのは、画面にスピンを順に表示したときに、裏返さず同じ向きで回転させた方がきれいだからです。

function createKataminoSpinList(piece) {
  // 回転した形を格納する配列を宣言する
  let spinArray = []

  spinArray[0] = copyArrayOfArray(piece)
  spinArray[1] = transpose(spinArray[0])
  spinArray[2] = copyArrayOfArray(spinArray[1]).reverse()
  spinArray[3] = transpose(spinArray[2])
  spinArray[4] = copyArrayOfArray(spinArray[3]).reverse()
  spinArray[5] = transpose(spinArray[4])
  spinArray[6] = copyArrayOfArray(spinArray[5]).reverse()
  spinArray[7] = transpose(spinArray[6])

  console.log("spinArray", spinArray)

  return spinArray
}

以上で各ピース、8パターンのスピンを作成することができました。

配列の中身は現在以下の図のように、各ピースに重複したスピンが含まれています。

f:id:yucatio:20190621121150p:plain

次回は重複を取り除いていきます。


★次回の記事

yucatio.hatenablog.com

★目次

yucatio.hatenablog.com