@ledsun blog

無味の味は佳境に入らざればすなわち知れず

Rubyでテトリスを実装する その8

Rubyでテトリスを実装する その7 - @ledsun blog の続きです。

今回は

  • 行を消すロジックの修正
  • T字形テトリミノの追加
  • デバッグ表示の追加

です。

行を消すロジックの修正

より宣言的にならないか工夫してみました。

https://github.com/ledsun/tetoris/blob/e5bb87a3c6a24049e8b3ea973a5965c25b5d643b/lib/field.rb#L34-L44

    filled_rows = in_field_rows.select { |row| row.filled? }
    return if filled_rows.empty?

    # 埋まった行を消す
    filled_rows.each { |row| row.clear! }

    # 消した行より上の、インフィールド内のすべてのブロックを消した行分下にずらす
    # 下から順番にずらす
    # 上からずらすと、ずらしたブロックがずらす前のブロックと衝突してしまう
    y = filled_rows.last.y
    in_field_blocks_over(y).reverse.each { |block| block.down filled_rows.size, self }

T字型テトリミノの追加

他のテトリミノも実装予定です。

デバッグ表示の追加

やはりデバッグが難しいです。 例外時に盤面の情報を出せるようにしてみました。

例外時に盤面の情報を出力しているスクリーンショット