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ではフィールドを作成している. ここで新しくフェイズという単語が現れた. ぷよぷよはいくつかの段階にわかれて処理が行われている. フェイズとはその処理の段階を表す.
あとは簡単で,updateメソッドにて,フェイズに基づいた処理を行い,処理が終わったら次のフェーズに移ればいい. |