第2回 mix c++勉強会@tokyo 資料

  • 487 views
Uploaded on

第2回 mix c++勉強会@tokyo 資料での発表スライドです

第2回 mix c++勉強会@tokyo 資料での発表スライドです

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
487
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. C++でゲームDSL 2014/03/21 第2回 mixC++勉強会@Tokyo @minamiyama1994
  • 2. 全体の概要 ● 自己紹介 ● デモンストレーション ● ライブラリの外観 ● ライブラリの実装 ● 将来性 ● (時間があれば)オマケ ● 質疑応答
  • 3. 自己紹介 ● 広島に生息する極々平凡な大学生 ● Twitter:@minamiyama1994 ○ 女優能年玲奈ちゃんのファンとしてのアカウント @masakazu_nonenなどもあります ● C++好きです、とか言いつつ最近Haskellばかり やっている
  • 4. ● Github:minamiyama1994 ○ FTMP(TMPのためのライブラリ) ○ C++のパーサコンビネータDSL ○ 議論支援系 ○ 小説っぽいの ○ girlfriend_require(彼女募集) ● などを公開しています 自己紹介
  • 5. 初めに ● 今回作成したのは「ノベルゲーム用のC++の DSL」です ● もっと言えば設計も実装もプロトタイプです ● ご容赦下さいm(_ _)m
  • 6. デモンストレーション ● こんなコードをコンパイルすると……
  • 7. デモンストレーション ● こんな感じに
  • 8. ライブラリの外観 ● namespaceはgpp ● class gameオブジェクトを生成 ● gameオブジェクトのoperator()に対しコマンドオ ブジェクトを引数に渡すと実行される ● gameオブジェクトをoperator()()で呼び出したら 終了
  • 9. ライブラリの外観 ● gameオブジェクトのoperator()に対してコマンド を渡した結果のテキスト描画などは次に operator()が呼び出された時に消される ● operator()内ではコマンドによる描画結果など は有効
  • 10. ライブラリの外観 ● コマンドオブジェクトは ○ text……テキスト ○ image……背景画像 ○ bgm……音声 ○ pause……Enterキー待 ○ clear……テキストクリア ● operator+で結合可能
  • 11. ライブラリの実装 ● やりたいこと ○ templateを活用して重複の少ない&実行時コストの低い コードに ■ →TMPを活用 ○ 実装の詳細は隠蔽する ■ →pImplを活用
  • 12. ライブラリの実装 ● 問題発生 ● TMPとpImplを両立させたい ○ templateばかりだとヘッダに全てが公開される ■ →pImplとは相性が悪い ● どうすればいいか ● CRTP
  • 13. ライブラリの実装 ● コマンドオブジェクトのoperator+などは全コマン ドクラスで共通 ● それぞれのクラスで異なる部分もある ● 普通なら継承などを使うところだけれども、「実 行時コストの低い」という目標に反する ● そこでCRTPを用いて共通部分と異なる部分を まとめる
  • 14. ライブラリの実装 ● CRTPとは? ○ class Inheritance : public Base < Inheritance > { } ; ○ 「奇妙に再帰するtemplateパターン」 ○ 基底クラスは継承先のクラスについての詳細を知ること ができる ○ static_castを用いて「安全に」「コンパイル時に」ダウン キャストができる ■ static_cast < Inheritance & > ( * this ) ; // というの が可能
  • 15. ライブラリの実装 ● CRTPを用いて、共通の処理は基底クラス側 で、派生クラスごとに異なる処理もstatic_castと visitorパターンを用いて処理を行う ● 基底クラス側では実装をpImplなどを用いて隠 蔽できる ● TMPとpImplを両立させることが出来た!
  • 16. ライブラリの実装 ● 各種コマンドクラスの実装の詳細はcppファイル に隠蔽できる ● デモンストレーションのようなCUIを例えば wxWidgetsなどを用いてGUIに差し替えることも できる
  • 17. 将来 ● 選択肢を出して、結果により条件分岐を行う機 能の実装 ● 実行中の状態のセーブ/ロード機能の実装 ● バックエンドをGUIに差し替え ● 等々 ● なお、今回発表に使ったライブラリはGame++と してGithubで公開しています
  • 18. オマケ ● 当初はデモンストレーションもGUIを目指してい ました ○ →使用環境(MinGW)でwxWidgetsがビルドできず ○ その他のGUIライブラリを試すも時間が無くなり断念 ● というわけで、試した各種GUIライブラリについ て簡単に紹介
  • 19. オマケ ● wxWidets ○ イベントドリブン ○ 使いやすい、慣れてる ○ →最新のMinGWでビルドできず使用を断念
  • 20. オマケ ● Qt ○ メジャーらしい(この勉強会でも関連のテーマで発表する 人がいますね) ○ ちょっと目的と沿わない感じだったので断念
  • 21. オマケ ● FLTK ○ 海外ではメジャー? らしい ○ 手続き型とイベントドリブンが混在したようなインター フェース ○ 使いやすそう……と思ったけれども結局良くわからず断 念
  • 22. オマケ ● FOX ○ wxWidgetに似たようなイベントドリブンなインターフェー スのライブラリ ○ これなら行けると思ったけれども、画像の表示がうまく行 かず断念 ■ 目的がノベルゲームなので画像とテキストがオー バーラップするのだけれども、オーバーラップさせる 方法がわからなかった
  • 23. 時間があれば質疑応答に入ります ご清聴 ありがとうございました