[[目次へもどる>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 }}