自己紹介
• Twitter: @akasata
• (株)Rmakeという会社をやってます
• ゲームを共有して作成するウェブサービス
「Rmake」を運営してます
– Rails2.3(Ruby 1.8)と4.0(Ruby2.0)が混在・・・orz

• 最近は提督業もやってます
mrubyでゲームを書いてみた
mrubyとは?
• まつもとさん作の新しいRuby処理系
• 組み込みに特化したRuby
– アプリケーション組み込み
– Embedded System
• 例:LEGO MINDSTORMS NXTにも搭載
– ROM 256KB、RAM 64KBの環境
mrubyの組み込みは簡単
mrb_state* mrb = mrb_open();
mrb_load_string(mrb, "puts 'hoge'");
mrb_close(mrb);

3行でrubyを組み込めます!
mrubyでゲームを書く
• 基本方針
– 様々な環境で動かす
– パフォーマンスを落とさない
– Rubyらしい記述
様々な環境で動かす
• 高いポータビリティ
– mrubyはC99の範囲内で実装

• 小さな言語仕様
– でもmrbgemsを適用することで高機能化も
• mrbgems: ビルド時にライブラリを組み込む機構

• 停止時間の短いGC
• PC/スマホ/ブラウザで動かしたい
– (ブラウザはまだ・・・)
パフォーマンスを落とさない
• スマホでも動かしたい
• Rubyはグルー(糊)言語
– 処理の大半はネイティブ(C/C++)で記述
• あたり判定
• アニメーション/モーション

– ゲームを構成する中核部分だけを
RubyをベースにしたDSLで記述
Rubyらしい記述
• 基本機能を簡単に記述するDSLを作る
– スプライト
– アニメ
– モーション
– イベント処理
– あたり判定
Rubyらしい記述 – スプライト
# スプライト「human」の定義
sprite_template :human do |st|
st.texture :human_image
st.src_size 32, 32
# 描画元のサイズ
st.dest_size 32, 32
# 描画先のサイズ
st.center_offset 32/2, 32/2 # 中心位置
end
# 座標(450, 16)に「human」を表示
scene.add :image, :template => :human,
:center_position => [450, 16]
Rubyらしい記述 – アニメーション
# 足踏みを定義する
# 16フレームごとに表示画像を切り替え
st.animation :down do |c|
c.loop true
c.copy_rect :frame => 16, :src => [0, 0]
c.wait_animation
c.copy_rect :frame => 16, :src => [1, 0]
c.wait_animation
end
Rubyらしい記述 – モーション
st.motion :default do |commands|
commands.proc_call do |sprite|
sprite.change_animation :down
end
# 座標(384, 209)に4px/frameの速度で移動
commands.move_to_v 384, 209, 4
end
Rubyらしい記述 – イベント処理
scene :start_scene do |scene|
scene.on_init do
scene.add :image, :name => :human1,
:template => :human, :center_position => [450, 16]
# スプライト「 :human1 」タップすると文章を表示
scene.event :human1, :on_click do
speak "タップすると文章を表示します“
end
end
end
デモ
•
•
•
•
•

シューティングゲーム
クレーンゲーム
3マッチパズル
脱出ゲーム
マップエディタ
宣伝 – デジゲー博出展
2013年11月17日(日) 11:00 ~ 15:00
スペース:A-31/32
大田区産業プラザPio 2F小展示ホール

mrubyでゲームを書いてみた