目次へもどる

FieldController?

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

ただし,フィールドを制御するのはプレイヤーだけでなくCPUも考えられるので, それらの親クラスとしてFieldController?を定義した.

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ではフィールドを作成している.

ここで新しくフェイズという単語が現れた. ぷよぷよはいくつかの段階にわかれて処理が行われている. フェイズとはその処理の段階を表す.

  1. ブロックの消去
  2. ブロックの落下(スキマスイッチ)
  3. 新しいブロックを落とす 簡単にしてしまうと大体この3フェイズで良さそうだ. 現状では新しいブロックを操作して落とすことはできないので,1,2の二つのフェイズを行き来することになる.

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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-30 (金) 21:59:17 (1846d)