Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。KB)本稿では、オブジェクト指向に基づいたタスクシステムを実装し、シューティングゲームを作成する方法を解説します。タスクシステムを利用すると、ゲームの流れを自然に表現できるため、制御が必要な要素の多いシューティングゲームやアクションゲームに適しています。サンプルプログラムの完成図はじめにタスクとは「Windowsはマルチタスクだ」という時のタスクに同義ですが、プログラム的にはオブジェクトに近いです。タイトル画面」など、ゲームを構成する全ての要素をタスクとします。タスクシステムとは、これら複数のタスクを管理する仕組みであり、現在でもプロの現場で用いられています。ジャンルを問わず様々なゲームに適用できる並列処理をうまい具合に実現できるゲームの流れを自然な形で表現できる大規模なゲームも開発できるタスクごとに独立しているため、複数人で開発できる一方の短所は、タスクシステムの歴史が古いことに起因する、高すぎる自由度です。さまざまな実装方法があり、またオブジェクト指向が一般的ではなかった時代の手法なためか、スパゲティプログラムや、データの隠蔽化が不十分なプログラムとなっている例も見かけます。本稿で実装するタスクシステムは、クラスを用いてオブジェクト指向を取り入れ、これらの問題を解決します。タスクシステムだけを実装しても、その良さが実感しづらいため、タスクシステムを用いたシューティングゲームも作ります。ゲームプログラマを目指す方は必読です。対象読者タスクシステムの入門者を対象に、その基礎および使い方を解説します。「双方向リスト」を理解している人。Graphicsも使用しますが、DirectXに依存した部分のプログラムは解説しません。9に対応した環境でのみ動作します。5500を用いて行いました。タスクを指すポインタ次のタスクを指すポインタ「前のタスクを指すポインタ」と「次のタスクを指すポインタ」は、タスクを要素とする双方向リストの「タスクリスト」を構築するために使います。「前のタスクを指すポインタ」はあまり使わないため、これを取り除いて単方向リストとしても構いません。「タスクリスト」を管理し、操作する手段を提供するのが「タスクシステム」です。タスクシステムでは、タスクのためのメモリ領域を、タスクリストの初期化時にまとめて確保し、タスクを生成・追加する時には、既存のメモリ領域の一部を割り当てます。タスクを削除する時には、そのタスクの使用中フラグを偽にするだけです。タスクリストへの挿入、タスクリストからの除外、という処理は行いますが。このようにタスクの削除にメモリ領域の解放を伴わないことによって自滅も可能となり、プログラムの見通しが良くなる、という利点があります。1つの大きなメモリ領域を、3つのタスクに必要なサイズだけ割り当てています。タスクごとにサイズが異なるのは、タスク固有のデータ(クラスのメンバ関数とメンバ変数)が異なるためです。タスクにメモリを割り当てるタスクシステムに必要な情報は次の通りです(図3)。タスクシステムが持つポインタ使わなくなったタスク(DeadTask)は、タスクリストから除外するだけで、メモリ領域の解放などは行いません。タスクが持つ情報はデフラグに必要となるため、その時まで消してはいけません。新しいタスクは、それより前方に使わなくなったタスクの領域があったとしても、未使用領域の先頭に追加します。前述のこともありますが、未使用の連続するメモリ領域のバイト数を簡単に計算するためでもあります。未使用領域の残量が不足した場合は、デフラグを行い、使わなくなったタスクの領域を詰めます(図4)。デフラグデフラグを行っても、残量不足が解消しない場合は、タスクを追加できません。ゲームは割り当てられるメモリサイズが決まっているため、他の部分のメモリ効率を見直す必要があるでしょう。図2、3、4に示したタスクの番号は、実行する順番です。図3、4のタスクがメモリ領域の先頭から順に並んでいないのは、タスクに優先度を設定し、実行する順番を制御しているためです。他に、グループ分けの機能も実装しますが、詳しくは後述します。基本クラスのデストラクタを仮想関数とすることで、派生クラスのデストラクタも呼び出されるようにした。SetPriority)。第1回:「TETRA」編もっと読むこの記事の著者ひよこ(ヒヨコ)職業ゲームプログラマーを志す学生です。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。