授業計画 |
| 回数 |
学習目標 |
学習項目 |
| 1 |
複数のソースを静的ライブラリにまとめ、プロジェクト間での共有が出来る。
動的ライブラリの仕組みを理解し、プログラムのモジュール化と分割が出来る。 |
複数のソースを静的ライブラリ(Lib)にまとめ、プロジェクトを跨いだ機能共有の手法を学習する。
動的ライブラリ(DLL)の仕組みを学習する。実行プログラムのモジュール化と分割管理を実践する。
ソフトウェアの資産化と、大規模開発を支えるビルド構成の構築手法を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 2 |
有限ステートマシン(FSM)の概念を理解し、状態の定義と遷移条件の整理が出来る。
列挙型を用いたシンプルな状態管理から始め、更新と描画の分離した構造が作れる。 |
有限ステートマシン(FSM)の概念を学習する。
オブジェクトの状態定義と遷移条件の整理法を学習する。
列挙型を用いたシンプルな状態管理から開始し、更新と描画のロジックを分離した構造を構築する。 |
| 【理解度確認】課題にて確認する。 |
| 3 |
各状態をクラスとして定義し、ポリモーフィズムを用いた本格的なStateパターンの実装が出来る。
状態遷移マネージャーを構築し、現在の状態の切り替えや更新を自動化する仕組みが作れる。 |
各状態を個別のクラスとして定義し、ポリモーフィズムを用いた本格的なStateパターンを実装する。
状態遷移マネージャーを構築し、現在の状態の切り替えや更新を自動化するシステムを構築する。
具体的な挙動をクラス単位でカプセル化し、変更に強い状態管理ロジックを実践する。 |
| 【理解度確認】課題にて確認する。 |
| 4 |
「待機」「追跡」「攻撃」などの思考ルーチンをStateパターンでの構築が出来る。
条件に応じた複雑な遷移ロジックを記述し、ゲームオブジェクトの挙動が作れる。 |
待機・追跡・攻撃等の思考ルーチンをStateパターンで構築し、実戦的なゲームオブジェクト制御を構築する。
条件に応じた複雑な遷移ロジックをクラス間に分散させ、整理された挙動を構築する。
大規模な分岐を伴うオブジェクトの動作を、オブジェクト指向的に解決する設計手法を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 5 |
階層型ステートマシン(HFSM)を理解し、親子関係の構築が出来る。
共通動作を親状態で管理し、個別の詳細動作を子状態で上書きする効率的な設計が出来る。 |
階層型ステートマシン(HFSM)の親子関係を学習する。
共通動作の継承と個別動作の上書きを学習する。
複数の状態を階層化することで、状態の爆発的な増加を防ぎつつ細やかな制御を行う設計を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 6 |
メッセージ送信による割り込み遷移を実装し、即座の状態変更が出来る。
イベント駆動型の遷移ロジックを構築し、スパゲッティコードを防ぐ状態管理が出来る。 |
メッセージ送信による割り込み遷移と外部要因による状態変更を学習する。
イベント駆動型の遷移ロジックを構築することで、状態間の依存度を下げた疎結合な設計を実践する。
スパゲッティコードを回避し、メンテナンス性に優れた高度なステート管理を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 7 |
ビヘイビアツリーの基本構造を理解し、ツリー形式での意思決定ロジックが作れる。
FSMと比較した際の利点を理解し、より複雑なAI設計に適した手法の説明が出来る。 |
ビヘイビアツリー(BT)の基本構造とノードの概念を学習する。
木構造による意思決定ロジックを学習する。
FSMとの特性の差異を比較し、より複雑かつ拡張性の高い設計に適した手法であることを学習する。 |
| 【理解度確認】課題にて確認する。 |
| 8 |
Selector(優先度順実行)やSequence(順次実行)を使い、高度な条件分岐が作れる。
デコレーターノードを用いて、実行条件の制限やループ処理を木構造に組み込める。 |
Selector(優先度順)やSequence(順次)等の制御ノードを用い、高度な条件分岐をツリー上に構築する。
デコレーターノードを活用して実行条件の制限やループを組み込み、柔軟な行動制御を実践する。
複雑な判断基準を視覚的な構造として整理し、制御ロジックを構築する技術を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 9 |
複数のノードを組み合わせ、状況判断を行って行動を選択するNPCが作れる。
再利用可能なタスクノードを定義し、異なるキャラクター間で思考ルーチンの共有が出来る。 |
複数のノードを組み合わせて状況判断を行うNPCを実装し、再利用可能なタスクノードの定義法を学習する。
異なるキャラクター間で思考ルーチンの一部を共有する設計を学び、開発の効率化を実践する。
条件判定と行動を部品化し、ツリーの組み換えで多様な知能を作る手法を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 10 |
ステアリング(操舵)行動を理解し、物理挙動に基づいた滑らかな移動が出来る。
シーク(追尾)やフリー(逃避)などの作成が出来る。 |
ステアリング(操舵)行動を学習する。物理挙動に基づいた滑らかな移動アルゴリズムを学習する。
シーク(追尾)やフリー(逃避)の基本挙動を実装し、速度と力を考慮した移動制御を実践する。
単なる座標移動ではない、生物的なリアリティを持つ動体の制御手法を実践する。 |
| 【理解度確認】中間テストにて確認する。 |
| 11 |
到着(アライバル)や障害物回避を組み合わせ、周囲の環境に反応する動きが出来る。
複数の移動ベクトルを重み付けして合成し、自然な群れの動き(群衆制御)が作れる。 |
到着(アライバル)や障害物回避を組み合わせ、周囲の環境に反応する高度な動体制御を学習する。
複数の移動ベクトルを重み付けして合成し、自然な群れの動き(群衆制御)を構築する。
動的な環境下で自律的に経路を調整する、エージェント指向の移動システムを実践する。 |
| 【理解度確認】課題にて確認する。 |
| 12 |
std::threadを使い、メインループとは別にバックグラウンドで処理を動かすことが出来る。
std::futureとstd::promiseを用い、非同期処理の完了待ちや結果の受け取りが出来る。 |
シングルスレッドの限界を超えるための、マルチスレッドプログラミングの第一歩を学習する。
std::threadを用い、メインループとは別にバックグラウンドで処理を走らせる並列化の基礎を学習する。
std::futureとstd::promiseを活用し、非同期処理の完了待ちや結果の安全な受け取りを実践する。 |
| 【理解度確認】課題にて確認する。 |
| 13 |
共有リソースへのアクセス競合を理解し、std::mutexを用いた排他制御が出来る。
デッドロックの発生条件を学習し、安全にスレッド間通信を行うための設計手法が使える。 |
共有リソースへのアクセス競合の問題を学習する。
std::mutexを用いた排他制御の手法を学習する。
デッドロックの発生条件と回避策を学び、スレッド間で安全に情報をやり取りする設計を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 14 |
多数存在する思考ルーチンの更新処理を複数のスレッドに分散させ、マルチコアCPUの活用が出来る。
更新処理の並列化によるフレームレートの向上を実証し、最適化の効果の説明が出来る。 |
多数の思考ルーチンを複数のスレッドに分散させ、マルチコアCPUを最大限に活用する方法を学習する。
更新処理の並列化によるフレームレートの向上を実証し、最適化の効果を客観的に評価する。
実戦的な高負荷処理を並列化することで、パフォーマンスチューニングの基礎を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 15 |
スレッドの生成コストや同期によるオーバーヘッドを考慮した適切な並列化設計が出来る。
2年間の学習内容を総括し、高度なC++機能の組み合わせによるシステム構築が出来る。 |
スレッド生成コストや同期オーバーヘッドを考慮した、適切な並列化の境界設計を学習する。
2年間の学習内容を総括し、高度なC++機能とアルゴリズムを組み合わせたシステムを構築する。
4年制の後半に向け、プロフェッショナルな開発に耐えうる技術スタックの統合を確認する。 |
| 【理解度確認】課題にて確認する。 |