ゲーム vs. Sinatra Masafumi Yokoyama Sinatra/Padrino 勉強会 2014/12/20
自己紹介 @myokoym Sinatra 札幌将棋アマ三段ヌルゲーマー
札幌の将棋事情 北海道将棋会館 札幌市中央区南 4 西 9 北海道将棋連盟のブログ http://doshoren.blog.fc2.com/ 札幌将棋情報のブログ http://blogs.yahoo.co.jp/sapporoshogijoho
Ruby Kaja 2013
よろしくお願いします m( )m
話すこと 第一部 2013 年から 2014 年にかけての Sinatra 札幌での活動について 第二部 表題の件
第一部
2013/11/24 年表 ( 序盤 ) 最初の勉強会 Sinatraと見せかけてRabbitの話 2014/02/08 札幌市中央区 Ruby 会議 01 RubyでGUIする話
札幌市中央区 Ruby 会議 01
2014/05/10 年表 ( 中盤 ) 二回目の勉強会 Sinatra と見せかけて Gosu( ゲーム用ライブラリ ) の話 2014/06/14 OSC 2014 Hokkaido Sinatra の帽子を使ったゲームを展示
OSC OSC 2014 2014 Hokkaido Hokkaido ゲーム vs. Sinatra Powered by Rabbit 2.1.4
2014/08/17 年表 ( 終盤 ) SinatraSapporoSuturday#01 ArduinoでLEDをチカチカして納涼 2014/10/11 2014/11/16 SinatraSapporoSaturday#02 SinatraSapporoSunday#03 Padrinoを使い始めた
ちょっと wait events.count event event.sinatra メイン? end
#=> 0
理由 何かと組み合わせて使っていた
何か 1. Rabbit http://slide.rabbit-shocker.org/authors/myokoym/ sinatrasapporo01/ 2. Gosu http://slide.rabbit-shocker.org/authors/myokoym/ sinatrasapporo02/
何か 1. Rabbit http://slide.rabbit-shocker.org/authors/myokoym/ sinatrasapporo01/ 2. Gosu http://slide.rabbit-shocker.org/authors/myokoym/ sinatrasapporo02/
Rabbit Rubyist 用プレゼンツール http://rabbit-shocker.org/
Lavie さん
Rabbit 文章はテキストで記述 RD Wiki Markdown など 装飾 ( テーマ ) は Ruby で記述 RubyGems で簡単に追加 バージョン管理しやすい
Ruby-GNOME2 http://ruby-gnome2.sourceforge.jp/ja/
Ruby-GNOME2 Ruby-GNOME2 は GNOME で使用される GTK+ などの主要なライブラリの Ruby バインディング集です http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ ruby-list/49734
Ruby-GNOME2 GTK+ はマルチプラットフォーム対応の GUI ツールキットなので マルチプラットフォーム対応の GUI アプリケーションを Ruby で書くことができます http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ ruby-list/49734
バージョンについて Ruby/GTK2 Ruby/GTK3
Ruby/GTK2 GTK+ 2 の Ruby バインディング gem install gtk2 旧バージョン GTK+ 2 の開発はほぼ終了 採用実績が多く 安定性は高い Rabbit( プレゼンツール ) mikutter(twitter クライアント )
Ruby/GTK3 GTK+ 3 の Ruby バインディング gem install gtk3 新バージョン GTK+ 3 に対応 GObject Introspection 新機能 (CSS 対応の強化など ) 新ウィジェット
迷ったら Twitter やメーリングリストなどでご相談ください 日本語 ML あります ruby-gnome2-devel-ja
何か 1. Rabbit http://slide.rabbit-shocker.org/authors/myokoym/ sinatrasapporo01/ 2. Gosu http://slide.rabbit-shocker.org/authors/myokoym/ sinatrasapporo02/
Gosu Gosu is a 2D game development library for the Ruby and C++ programming languages, available for Mac OS X, Windows, and Linux. http://www.libgosu.org/
Gosu 2Dゲーム開発ライブラリ RubyとC++ 向けマルチプラットフォーム OS X Windows Linux Raspbian ios(c++) Android(WIP)
Gosu 0.8.6 現時点での最新リリース版 gem install gosu SDL2ベース Ruby 2.1 対応 RubyInstaller for Windows も
SDL https://www.libsdl.org/
SDL Simple DirectMedia Layer マルチメディアライブラリ主にゲーム用途 C 言語で記述マルチプラットフォーム
SDL2 zlib License MIT より緩い ios Android 対応などなど
第一部まとめ
Sinatra 最高
第二部
テーマ vs.
vs.(versus) 前置詞 1. ( 訴訟 競技などで ) 対, に対する 2. と対比して 比較して
対比させてみる
粒度を合わせる GUI アプリケーション Ruby/GTK2 GTK+ ゲーム Gosu SDL Web アプリケーション Sinatra Rack
ポイント 動作環境 画面構成 更新方法
ポイント 動作環境 画面構成 更新方法
動作環境 GTK+ SDL Rack デスクトップ ( ネイティブ ) アプリ デスクトップ ( ネイティブ ) アプリ Webサーバー Web ブラウザー
構図 ネイティブアプリ vs. Web アプリ
ネイティブアプリ 動作速度が速い デバイスの機能を活かせる push 通知など
Web アプリ リリース インストールが楽他のサービスと連携しやすい 使われる技術が限られる HTTP JavaScript
適材適所
ポイント 動作環境 画面構成 更新方法
画面構成 GUIアプリ ゲーム系 Webアプリ (OSと紐付いた ) パーツを組み合わせる 一から形を決めて描画する ( ブラウザの ) パーツを組み合わせる
誰もがデザイナー (,, Д )
ポイント 動作環境 画面構成 更新方法
更新方法 GTK+ SDL Rack イベント駆 動 フレームレート イベント HTTP JavaScrip t
更新方法 イベント駆動 フレームレート HTTP
更新方法 イベント駆動 フレームレート HTTP
イベント駆動 起動すると共にイベントを待機し 起こったイベントにしたがって処理を行う
イベント駆動 イベントを待機 イベントハンドラ イベント マウス キーボードなど
イベントハンドラ ( コールバック関数 ) イベントが起こったときの処理を記述 クリックやアクティブ化など
Ruby/GTK2 のイベントハンドラ window.signal_connect("destroy") do # ウィンドウが閉じられた時の処理 end button.signal_connect("clicked") do # ボタンがクリックされた時の処理 end
イベント駆動 CPU に優しい ( 当社比 )
更新方法 イベント駆動 フレームレート HTTP
フレームレート 1 秒間に一定回数の処理を行う 1 秒間に 60 回の場合 60fps frame per second
1 フレームの主な処理 状態の更新 イベントや時間経過による 画面への描画
Gosu class Game < Gosu::Window def update # 1 秒間に約 60 回呼ばれる end def draw # update とセットで呼ばれる end end Game.new(640, 480, false).show
ゲーム系 自由度が高い 常に CPU 使ってる感ある
更新方法 イベント駆動 フレームレート HTTP
HTTP 何を どう したいか リクエスト - レスポンス型
何を URL http://< ホスト名 >/[ パス ]...
どう メソッド GET POST...
Sinatra get "/" do # http://host.name/ の処理 end post "/new" # フォーム等の /new の処理 end
リクエスト - レスポンス型 いわゆるクラサバ サーバーがレスポンスを返したら一区切り 基本的に状態を保存しない セッションや DB などを使えば可能
JavaScript プログラミング言語 何でもできる マルチメディアな使い方も
結論 やっぱり 適材適所
おわりに Sinatra 楽しいょ! ゲームや GUI も楽しいょ! 組み合わせても ゲームのデータやハイスコアを Web で管理するとか コミュニティでチーム開発?