Ruby で手軽にゲームを開発
MyGame は Ruby で簡単にゲームを作るためのライブラリです。 自分のゲーム開発の経験をもとにゲームに必要な処理を簡単な API にまとめています。特定のライブラリ API を参考にしているわけではありませんが、ソニー・プレーステーションのゲームソフト開発に携わることが多かったので、その設計思想から影響を受けているかもしれません。
MyGame 本体は小さな Ruby スクリプトにすぎません。 ただし、 MyGame の中で Ruby/SDL を使っています。
特徴とコンセプト
- ゲームプログラミングに必要な機能をシンプルなインターフェースで提供
- 初心者が Ruby やプログラミングの学習に使えるように
- ライブラリ自体の実装も極力シンプルかつ小さく
スクリーンショット
ニュース
- 「アクションゲームのサンプルスクリプト」をアップしました。(2009/07/14)
- 「Ruby ゲーム開発のハブサイト」がオープン。Rubyを利用したゲーム開発が活発になってきました。(2008/07/06)
- 「サンプルゲームプニャリン競争」をアップしました。(2007/07/08)
- 書籍『Rubyではじめるゲームプログラミング』が発売されました。この書籍ではMyGameを使ったプログラミングが詳しく解説されています。(2007/07/05)
- RejectKaigi2007にてMyGameで実装したゲームのデモを発表しました。(2007/06/10)
- 日本Ruby会議2007で発表された「Ruby/SDLとその周辺」にてMyGameが紹介されました。(2007/06/10)
- 0.9.1をリリースしました。(2007/05/26)
- 内部実装が書籍「Rubyist Magazine出張版」にて添削され信頼性が向上しました(2007年1月までにコードへフィードバック済み)。(2007/04/07)
- 実装がだいぶ安定してきました。キーワード引数導入後は、たいした変更はありません。(2007/03/20)
- ちゃんと動くものが置いてあるはずですが、現在激しく開発中で頻繁にコードを書き換えています。(2007/01/09)
関連書籍
書籍『Rubyではじめるゲームプログラミング』が工学社より発売中です。この書籍ではMyGameを使ったプログラミングが詳しく解説されています。 |
ダウンロードとインストール
ダウンロード
- 最新版はmygame-0.9.1.tar.gzです。
- Windows用のRuby/SDL同梱版はmygame-0.9.1-rubysdl-1.3.0-mswin32-1.8.5-p12.zipです。
- その他のバージョンのリストです。
Subversion リポジトリ
次のようにして Subversion リポジトリからチェックアウトすることができます( Subversion リポジトリはテスト中です)。
svn checkout http://svn.sourceforge.jp/svnroot/mygame/trunk mygame
インストール
圧縮ファイル (mygame-xxx.tar.gz) を解凍し install_mygame.rb を実行するとインストールされます。
※ MyGame の動作には Ruby と Ruby/SDL が必要です。 Windows にインストールする例。
サンプルゲームのダウンロード
上記サンプルはスクリプト、画像共に Ruby License です。
リファレンス
- リファレンス
- MyGame リファレンスマニュアル
- wiki
- http://dgames.jp/rubygame/?MyGame
ライセンス
Ruby License です。
ただし、フォントやサンプルデータについてはそれぞれのライセンスに従います。 zipファイルに同梱されているRuby/SDLについてはRuby/SDLのライセンスに従ってください。
サンプルプログラム
ゲームプログラミングに必要な処理を驚くほど短く書けます。 次のサンプルはプログラムの断片ではなく、それぞれが完結したプログラムです。
スクリーンウィンドウ生成
require 'mygame/boot'
画像描画
require 'mygame/boot' Image.render "mglogo.bmp"
フォント描画
require 'mygame/boot' Font.render "Hello"
サウンド再生
require 'mygame/boot' Wave.play "sample.wav"
キー入力
require 'mygame/boot' mian_loop do puts "押された!" if key_pressed?(Key::SPACE) end
オブジェクトにする場合
require 'mygame/boot' img = Image.new("sample.bmp") fnt = Font.new("Hello") wav = Wave.new("sample.wav") main_loop do img.render fnt.render wav.play if new_key_pressed?(Key::SPACE) end
マウス等のイベント処理
require 'mygame/boot' add_event(:mouse_motion) {|event| puts "x:#{event.x} y:#{event.y}" }
シーンクラスによるシーン管理
require 'mygame/boot' class Title < Scene::Base # タイトルシーン def init # 初期化処理(シーン生成時に呼ばれる) @image = Image.new("title.jpg") end def quit # 終了処理(シーン終了時に呼ばれる) end def update # 更新処理(毎フレーム呼ばれる) if new_key_pressed?(Key::SPACE) self.next_scene = Game # Game シーンへ遷移 end end def render # 描画処理(毎フレーム呼ばれる) @image.render end end class Game < Scene::Base # ゲームシーン # ゲームシーン定義(略) end Scene.main_loop Title # シーンクラスを実行