Presentation is loading. Please wait.

Presentation is loading. Please wait.

インタラクティブ・ゲーム制作 <プログラミングコース>

Similar presentations


Presentation on theme: "インタラクティブ・ゲーム制作 <プログラミングコース>"— Presentation transcript:

1 インタラクティブ・ゲーム制作 <プログラミングコース>
第12回 Boostと数学

2 今日の内容 Boostの導入 今時C++を使うならやはり外せない 乱数やアルゴリズム周りなど、 AI構築に有用な機能も盛りだくさん

3 闇の魔術の粋を味わうがいい Boost入門

4 Boostとは 闇の魔術師達が築いた叡智の結晶 ある程度の機能はC++11として、 正式に採用されている
標準ライブラリのみでは不便な機能を補強 「俺の知ってるC++と違う」としか思えない言語の拡張 ある程度の機能はC++11として、 正式に採用されている Visual C でも一部の仕様は搭載済み 不足も多いので、Boostを併用

5 導入方法 「Let’s Boost」を参照のこと 授業時間内のインストールは厳しいので、授業資料ページからもダウンロード可能
ここを見ておけば大抵なんとかなる 授業時間内のインストールは厳しいので、授業資料ページからもダウンロード可能 1.47のパッケージ(300MB) パスの設定は別添えの資料を参考に

6 すぐに使えそうな機能(1) boost::random srand()&rand()よりも手軽に精度の良い 乱数が使える
オセロのAIにもオススメなのは、 「メルセンヌツイスター」で 「小さな整数の一様乱数」のパターン

7 すぐに使えそうな機能(2) BOOST_FOREACH
配列やリスト(コンテナ全般)に対して、 最初から最後まで1つずつ処理するような ループが、絶望的に綺麗に書ける 配列の場合だとこういうやつ for(int i = 0; i < arraySize; ++i) { array[i] = ほげ~; }

8 Listのループをスマートに これが こうなる
for(ListIte ite = puttingList.begin(); ite != puttingList.end(); ++ite) { if((*ite).x > maxX) { choicePos = (*ite); maxX = (*ite).x; } foreach(CellPosition &pos, puttingList) { if(pos.x > maxX) { choicePos = pos; maxX = pos.x; }

9 是非使いましょう BOOST_FOREACHという名前だが、 foreachに直して使うのがおすすめ
詰め込んでいるのが配列でもvectorでもlistでも何でもイケちゃうあたりが 闇魔術

10 合わせると 事前にリストのサイズを得る 0~サイズ-1までの乱数を得る
リスト名.size() 0~サイズ-1までの乱数を得る boost::random 整数のカウンタを用意し、 foreachでループしつつ、 乱数が指した順番の時点での値を 選んだ手として使う なんてやればモンテカルロの仕込みに

11 他にも使えそうなもの boost::thread boost::progress_timer モンテカルロの計算は並列化しやすい
一気に複数手のシミュレーションを進める 私は使う予定です boost::progress_timer あるスコープ内での所要時間計測に便利 コンストラクタとデストラクタを利用 そんな難しい実装ではない

12 オセロに使えるか分からんけど オススメ boost::bind,function,signals2 boost::lambda
「関数を自由に持ち運ぶ」ことができる signals2はイベントと関数呼び出しを 結び付けるのに非常に有用 boost::lambda 関数の中で関数を即席で作れちゃう やりすぎると別言語になるが、わざわざ 関数に分けたくないような時に便利

13 最終回にむけて ルール再確認

14 ルール(1) 対決用プロジェクト内のAIBaseクラスを 継承し、自分のアルゴリズムを実装 それ以外のファイルには手を加えてはいけない
外部ライブラリは原則利用可能 ただし「オセロAIライブラリ」みたいなルーチンを他者に 丸投げするようなものは不可 getHand()から参照できる情報以外は利用禁止 自分で作ったクラスの利用は可 1手の計算に使える時間は30秒まで

15 ルール(2) 難易度は4段階用意 提出期限は7/23(火)23:59まで 自分に合った難易度で挑戦してね!
Sチャレンジができるのは最高難易度 漏れなくライブで実況します 提出期限は7/23(火)23:59まで 組み込みチェックなどが必要なので、 それ以降は受け付けません

16 To be continued…


Download ppt "インタラクティブ・ゲーム制作 <プログラミングコース>"

Similar presentations


Ads by Google