[[目次へもどる>PuyoPuyo]]
* FieldController [#x8393a36]
#contents

さて,ブロックを配置するフィールドがとりあえず作れたので,今度はそれを制御する人が必要である.すなわちプレイヤーだ.

ただし,フィールドを制御するのはプレイヤーだけでなくCPUも考えられるので,
それらの親クラスとしてFieldControllerを定義した.
#sh(ruby){{
class FieldController
  @@row_s = 6
  @@line_s = 12
  def initialize(x,y)
    @x = x; @y = y
    init_field
    init_phase
  end
  def init_field
    @field = Field.new(@@row_s, @@line_s)
  end
  def init_phase
    @phase = :falldown
    @wait = 0
  end
  def update
    draw_field
    return if update_wait
    case @phase
    when :falldown
      update_falldown
    when :eliminate
      update_eliminate
    end
  end
  def update_wait
    @wait > 0 ? (@wait -=1; true) : false
  end
  def update_falldown
    fallen = @field.falldown
    @wait = 60 if fallen
    @phase = :eliminate
  end
  def update_eliminate
    eliminated = @field.eliminate
    @wait = 60 if eliminated
    @phase = :falldown
  end

  def draw_field
    @field.draw_field(@x,@y)
  end
end
}}
まずフィールドを配置する場所の情報を受け取りつつインスタンスを作成.
init_fieldではフィールドを作成している.

ここで新しくフェイズという単語が現れた.
ぷよぷよはいくつかの段階にわかれて処理が行われている.
フェイズとはその処理の段階を表す.
+ ブロックの消去
+ ブロックの落下(スキマスイッチ)
+ 新しいブロックを落とす
簡単にしてしまうと大体この3フェイズで良さそうだ.
現状では新しいブロックを操作して落とすことはできないので,1,2の二つのフェイズを行き来することになる.

あとは簡単で,updateメソッドにて,フェイズに基づいた処理を行い,処理が終わったら次のフェーズに移ればいい.


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS