[[目次へもどる>PuyoPuyo]]
* GameMain [#n376831e]
#contents

シーンができたので今度はシーンを管理する機構,すなわちゲームの処理のメインとなる部分を作る.

** シーンの追加考察 [#d737411b]
まずシーンについてだが,
シーンの切り替えについてはいくつかのパターンがある.
+ change
+ push
+ jump

changeは「タイトル画面→ゲーム画面」のように単純にシーンが切り替わる.
pushは「マップ画面→メニュー画面→マップ画面」のようにもとのシーンを保持したままシーンを切り替え,また戻ってくるような切り替え.
jumpは「リセットボタン」のようにとにかくそのシーンへぶっ飛ぶ切り替え.

これらを実現するデータ構造としてはスタックが適切である.
changeならスタックトップのシーンをポップして新たなシーンをプッシュすればよい.
pushなら単純にシーンをプッシュして,戻るときはポップする.
jumpはスタックを全部捨てれば良い.

今回はこれらの実装はおいおいやればどうにでもなるのでpushだけ作っといた.
どうせ当分ScenePuyoPuyoしかないので問題ない.

** GameMainの定義 [#u2ae0639]
ゲームのメイン処理は複数存在しないので,クラスではなくモジュールで実装する.
#sh(ruby){{
module GameMain
  @scene = []

  def self.main
    scene_push(ScenePuyoPuyo)
    StarRuby::Game.run(320, 240, :title => "PuyoPuyo", :fps => 60) do |game|
      break if @scene.empty?
      @scene.last.main
    end
  end
  
  def self.game
    StarRuby::Game.current
  end
  def self.screen
    StarRuby::Game.current.screen
  end

  def self.scene_push(scene)
    @scene.push scene.new
    @scene.last.start
  end

  def self.scene_pop
    @scene.pop.terminate
  end
end

if __FILE__ == "game_main.rb"
  require "./require.rb"
  GameMain.main
end
}}
上記の説明のとおりシーンはスタックで管理すれば良いので@sceneに配列を作っておく.

「main」メソッドではStarRubyを使ってゲームウインドウを作成し,メインループを作っている.
このループ内でスタックトップのシーンのmainメソッドを呼びまくる.
シーンスタックが空になればゲームが終了する仕組みになっている.

以後,テストプレイはgame_main.rbをトップレベルで実行することで行う.
 $ ruby game_main.rb


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