昨日はゲームの状態を 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])
これで AbstractUI
が GameView
のインスタンスを返すように変更できる。
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)))