1日目 

昨日はゲームの状態を String で近似化したけど、これを改善しよう。

ゲームのモデル化 

画面には 10x20 のグリッドがほしい。現在のピースのみが異なる色で表示されてほしい。次のピースを表示するウィンドウについては後で考える。ピースの種類は case object で表現できる:

sealed trait PieceKind
case object IKind extends PieceKind
case object JKind extends PieceKind
case object LKind extends PieceKind
case object OKind extends PieceKind
case object SKind extends PieceKind
case object TKind extends PieceKind
case object ZKind extends PieceKind

それぞれのブロックは case class で表せる:

case class Block(pos: (Int, Int), kind: PieceKind)

現在のピースとグリッドの両方とも Seq[Block] で表現できる。

case class GameView(blocks: Seq[Block], gridSize: (Int, Int), current: Seq[Block])

これで AbstractUIGameView のインスタンスを返すように変更できる。

  def view: GameView =
    GameView(
      Seq(Block((5, 5), TKind), Block((6, 5), TKind), Block((7, 5), TKind), Block((6, 6), TKind), Block((0, 0), TKind)),
      (10, 20),
      Seq(Block((5, 5), TKind), Block((6, 5), TKind), Block((7, 5), TKind), Block((6, 6), TKind)))