[[目次へもどる>PuyoPuyo]]
* ゲームモードを作ろう [#z4713d5a]
#contents

さて,いよいよ対戦できるようにしていきたいところだが,
折角シングルプレイ的なやつはできているので,
ゲームモードを追加して,シングルプレイをできるようにしておこう.

とりあえずジャマーが発生しないように適当にコメントアウトしておく.

#sh(ruby){{
class Field
  def eliminate
    @eliminated = false
    make_connect_table
    fair_connect_table
    @chain += 1 unless @connect_table.empty?
    @sm.score += @sm.calc_chain_score(@connect_table, @chain)
    scene = GameMain.scene
    unless @connect_table.empty?
      # @jm.jammers += @jm.calc_jammer(@sm.chain_score, @jammer_rate, scene.margin_time, scene.playtime)
    end
    eliminate_connection
    @eliminated
  end
end
}}

ゲームモードの追加先も微妙なのでとりあえずGameMainに変数を作り,
値を書き換えることでゲームモードが変更できるようにしておこう.

#sh(ruby){{
module GameMain
  @scene = []
  @gamemode = :single_player

  def self.main
    scene = case @gamemode
            when :single_player
              SceneSinglePlayer
            end
    scene_push(scene)
    StarRuby::Game.run(320, 240, :title => "PuyoPuyo", :fps => 60) do |game|
      break if @scene.empty?
      @scene.last.main
    end
  end
end
}}
あとはシングルプレイ用のクラスをScenePuyoPuyoのサブクラスとして作る.
このとき,ScenePuyoPuyoのupdateではプレイヤーすべてのFieldControllerが
deadならシーンを終了するように変更しておいた.

#sh(ruby){{
ss ScenePuyoPuyo < SceneBase
  attr_reader :playtime
  attr_reader :margin_time

  def start
    @playtime = 0
    @margin_time = 96

    @players = []
  end

  def main
    super
  end

  def gameover
    GameMain.scene_change ScenePuyoPuyo
  end

  def update
    super
    all_dead = @players.all? do |controller|
      controller.update
      controller.dead?
    end
    @playtime += 1
    gameover if all_dead
  end
end
}}

#sh(ruby){{
class SceneSinglePlayer < ScenePuyoPuyo
  def start
    super
    @players.push(Player1.new(16,16,6,12,16))
  end

  def gameover
    GameMain.scene_change SceneSinglePlayer
  end
end
}}


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