スーパーローテーションシステムにおける回転のルールは

Tスピンを実装のための準備 スーパーローテーションシステム(その7)

にあるとおりです。そこでこれに対応できるメソッドを作成します。

まずOミノは回転しても同じ形なので考える必要はありません。Iミノは特殊なので後回しにします。S、Z、J、L、Tの回転させるメソッドを作成します。

回転させたときに各ブロックがどの座標に移動するか考えます。そして移動先の座標が移動可能な場所なのかを判断します。フィールドの外だったり、すでにブロックが存在する場合は普通の回転はできません。その場合はスーパーローテーションシステムのルールで回転軸をズラして回転できないか判断させます。(実際には回転軸をズラして回転させるのではなく、回転させたものをズラしている)

以下は回転先の座標を管理するためのクラスです。

以下は回転させたときに各ブロックがどこへ移動するか取得するためのメソッドです。ミノを作成するときに blocks[0]が回転軸になるように作成しているのでこれを利用しています。

以下は移動先が移動可能であるかどうか調べるためのメソッドです。

移動可能であることがわかったら対応するオブジェクトを取得する必要があります。以下はBlockPositionのリストからブロックのオブジェクトのリストを取得するメソッドです。

あとは上記のメソッドを利用して回転処理をおこないます。

スペースキーを押したら回転させます。

Iミノの処理は以下のとおりです。

Iミノの回転処理時におけるブロックの移動先を取得するメソッドです。