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

Mais conteúdo relacionado

Mais de 真一 北原

Lt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみたLt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみた真一 北原
 
Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果真一 北原
 
型安全Printf作ってみた
型安全Printf作ってみた型安全Printf作ってみた
型安全Printf作ってみた真一 北原
 
能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた真一 北原
 
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料真一 北原
 

Mais de 真一 北原 (6)

すごいCoq入門
すごいCoq入門すごいCoq入門
すごいCoq入門
 
Lt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみたLt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみた
 
Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果
 
型安全Printf作ってみた
型安全Printf作ってみた型安全Printf作ってみた
型安全Printf作ってみた
 
能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた
 
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料
 

Último

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Último (10)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

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