Minoのブロック配置の データ構造 K.Yonezawa MinoBlocksクラスの必要性 MinoクラスのインスタンスはMinoのブロック並びを管理し、 TetrisFieldインスタンスにそのブロック並びが有効(置ける) かを問い合わせる 「Minoのブロック並び」を保持するクラスがあると、一度に複 数ブロック座標をまとめてTetrisFieldに渡すことが出来て楽 MinoBlocksクラスの要件 N個(Create時に指定)のブロック座標と状態(色)が保持 できること TetrisFieldオブジェクトが、MinoBlocksで表せるMinoと ぶつからないか判別できること 移動が簡単に出来ること 出来れば、無駄なメモリが不要なようにしたい 上下左右 回転させることが出来ること 将来的に複雑なMinoを実装する場合、回転出来ると便利 (TetraMinoの場合はあまり重要ではないが…) MinoBlocksの表現法 ベース座標とそこからの相対座標(ベクトル)により表す (0, -1) Base (1, -1) (1, 0) (1, 1) Block(i)の絶対座標 = Baseの絶対座標 + Block(i)の相対座標 MinoBlockの移動 Base座標にのみ移動分を加えればよい (0, -1) (1, -1) Base (1, 0) offset (2, -2) (1, 1) Base (OLD) Base += offset (2次元ベクトル) MinoBlockの回転 Base座標を中心とした回転なら、各相対座標の 単純計算だけで事足りる 90度 A (0, -1) B (1, -1) Base C (1, 0) D (1, 1) 90度回転 回転後x = - 回転前y 回転後y = 回転前x 270度回転 回転後x = 回転前y 回転後y = -回転前x D (-1, 1) Base A (1, 0) C (0, 1) B (1, 1)
© Copyright 2024 ExpyDoc