PuyoPuyoChap11
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[目次へもどる>PuyoPuyo]]
* ControlBlock(着地編) [#g4220240]
#contents
現状では落下してちゃんと止まるけど,ずっとそのままなので
ちゃんと着地させて次のフェーズに進めるようにしよう.
** 着地について [#r1541eae]
ぷよぷよはブロックの落下が止まってしばらくすると着地する.
これはコントロールブロックにタイマー@postponeを用意するこ...
コントロールブロックをセットしたときにタイマーもセットし...
ブロックの落下がとまるとタイマーが減少し,0になったら着地...
0になる前なら左右に移動したりできるが,減ったタイマーは戻...
着地の処理だが,これはコントロールブロックが持っているブ...
ブロックの位置に基づいてテーブルに追加すれば良い.
#sh(ruby){{
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
}}
#sh(ruby){{
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
}}
** フェーズの進行 [#i0938ee1]
ブロックが着地したらフェーズを:falldownにする.
また,落下フェイズは落下が終わると消去フェイズへ進むが,
消去フェイズから次のフェイズへは
+ 一つも消えたブロックが無ければ:control_blockフェイズ
+ ブロックが消えればもう一度:falldownフェイズ~
へと進む.
これで連鎖が進行する.
#sh(ruby){{
class FieldController
def update_control_block
active = @field.update_control_block
@phase.change :falldown unless active
end
def update_eliminate
eliminated = @field.eliminate
@phase.change eliminated ? :falldown : :control_block
end
end
}}
** 実行 [#x6637b84]
ブロックの操作はできないがとりあえずブロックが積まれてい...
#media(PuyoPuyoChap11/PuyoPuyoChap11.flv);
終了行:
[[目次へもどる>PuyoPuyo]]
* ControlBlock(着地編) [#g4220240]
#contents
現状では落下してちゃんと止まるけど,ずっとそのままなので
ちゃんと着地させて次のフェーズに進めるようにしよう.
** 着地について [#r1541eae]
ぷよぷよはブロックの落下が止まってしばらくすると着地する.
これはコントロールブロックにタイマー@postponeを用意するこ...
コントロールブロックをセットしたときにタイマーもセットし...
ブロックの落下がとまるとタイマーが減少し,0になったら着地...
0になる前なら左右に移動したりできるが,減ったタイマーは戻...
着地の処理だが,これはコントロールブロックが持っているブ...
ブロックの位置に基づいてテーブルに追加すれば良い.
#sh(ruby){{
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
}}
#sh(ruby){{
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
}}
** フェーズの進行 [#i0938ee1]
ブロックが着地したらフェーズを:falldownにする.
また,落下フェイズは落下が終わると消去フェイズへ進むが,
消去フェイズから次のフェイズへは
+ 一つも消えたブロックが無ければ:control_blockフェイズ
+ ブロックが消えればもう一度:falldownフェイズ~
へと進む.
これで連鎖が進行する.
#sh(ruby){{
class FieldController
def update_control_block
active = @field.update_control_block
@phase.change :falldown unless active
end
def update_eliminate
eliminated = @field.eliminate
@phase.change eliminated ? :falldown : :control_block
end
end
}}
** 実行 [#x6637b84]
ブロックの操作はできないがとりあえずブロックが積まれてい...
#media(PuyoPuyoChap11/PuyoPuyoChap11.flv);
ページ名: