ControlBlock?(着地編) †現状では落下してちゃんと止まるけど,ずっとそのままなので ちゃんと着地させて次のフェーズに進めるようにしよう. 着地について †ぷよぷよはブロックの落下が止まってしばらくすると着地する. これはコントロールブロックにタイマー@postponeを用意することで実現した. コントロールブロックをセットしたときにタイマーもセットしておく. ブロックの落下がとまるとタイマーが減少し,0になったら着地する. 0になる前なら左右に移動したりできるが,減ったタイマーは戻らない. 着地の処理だが,これはコントロールブロックが持っているブロックをそのまま ブロックの位置に基づいてテーブルに追加すれば良い. class ControlBlock def set(pivot, *belongs, postpone) @pivot = pivot @belongs = belongs @postpone = postpone end def update_postpone @postpone -= 1 end def postpone?; @postpone > 0; end end class Field def update_control_block return true if @ctrl_block.move_y? if @ctrl_block.can_falldown?(@table) @ctrl_block.falldown(-1, @block_s) else if @ctrl_block.postpone? @ctrl_block.update_postpone else control_block_land return false end end return true end def control_block_land @active_blocks.concat @ctrl_block.blocks @ctrl_block.blocks.each do |block| @table[block.row][block.line] = block end @ctrl_block.clear end end フェーズの進行 †ブロックが着地したらフェーズを:falldownにする. また,落下フェイズは落下が終わると消去フェイズへ進むが, 消去フェイズから次のフェイズへは
実行 †ブロックの操作はできないがとりあえずブロックが積まれていく. Loading the player ...
|