目次へもどる

ゲームモードを作ろう

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

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

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?に変数を作り, 値を書き換えることでゲームモードが変更できるようにしておこう.

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ならシーンを終了するように変更しておいた.

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
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
Last-modified: 2013-08-30 (金) 22:06:22 (1902d)