DirectX9
プログラミングガイド

インフィニティ 著
秀和システム 発行
2004年8月
375ページ+CD-ROM
2940円(税込)
リバーシの
アルゴリズム
C++&Java対応

Seal Software 著
工学社 発行
2003年6月
207ページ+CD-ROM
1995円(税込)
シューティングゲーム
アルゴリズム
マニアックス

松浦 健一郎 著
ソフトバンク パブリッシング 発行
2004年6月
343ページ+CD-ROM
2940円(税込)
GAME PROGRAMMING GEMS
Mark DeLoura 編
狩野 智英 訳
川西 裕幸 監訳
ボーンデジタル 発行
2001年7月
590ページ+CD-ROM
1万2600円(税込)
GAME PROGRAMMING GEMS 2
Mark DeLoura 編
狩野 智英,鳥海 有紀 訳
川西 裕幸 監訳
ボーンデジタル 発行
2002年7月
573ページ+CD-ROM
1万2600円(税込)
セキュアプログラミング
−−失敗から学ぶ設計・実装・
運用・管理

Mark G. Graff,
Kenneth R.van Wyk 著
新井 悠,一瀬 小夜 訳
オライリ−・ジャパン 発行
2004年4月
229ページ
3360円(税込)
.NET&Windows
プログラマのための
デバッグテクニック
徹底解説

John Robbins 著
豊田 孝 監訳
日経BPソフトプレス 発行
2003年10月
815ページ+CD-ROM
9345円(税込)

ゲーム・プログラミングには
DirectXとアルゴリズムの知識が必要

 趣味でプログラミングを始めた人には,いつか作ってみたいプログラムとして「ゲーム」を挙げる人が多いのではないでしょうか。ただ,実際にやってみようと思うと,一般のプログラミングとは具合が違うことにすぐ気が付きます。ゲーム開発には,ゲーム特有の知識が必要なのです。

 ゲーム開発に必要な知識には,大きく分けて二つあります。一つは,Windows上で高速な3D描画や音声出力を行うためのAPIセットであるDirectXなどのプラットフォームに関する知識。もう一つは,経路探索などのゲームでよく使われるアルゴリズムについての知識です。

 DirectX,特にDirect3Dについての書籍は,古かったり難し過ぎたりで本当に初心者向けの本はあまり多くありません。そんななかで比較的お薦めなのが「DirectX9プログラミングガイド」です。前半では,頂点データの定義,ライティング,テクスチャ・マッピングといったDirect3Dで3Dグラフィックス処理を行う際の基本的な方法を詳細に解説しています。後半では,バーテックス・シェーダー/ピクセル・シェーダーの使い方とその応用など,実践的なテクニックにも踏み込んでいます。著者のインフィニティ社はUltimaやDoomシリーズの移植をはじめ,15年以上もの間ゲーム開発に携わってきた会社です。サンプル・コードやAPIの紹介にとどまらず,全体的にしっかりと書き込んであるという印象を受けるのも納得がいきます。ただし,3Dグラフィックスの用語についての解説は不足気味なので,必要ならほかの本も併せて読んだ方がいいかもしれません。

 ゲーム特有のアルゴリズムについても何冊か挙げておきましょう。まずは,Windowsの付属ゲームとしておなじみのリバーシを作ってみるという「リバーシのアルゴリズム」。リバーシに限らず,チェスや将棋といったコンピュータと対戦するゲームを作ろうとしたときにぶちあたる壁が,コンピュータにどうやって手を考えさせるかです。こうしたプログラミングの経験がない人には,どのようにプログラミングすればいいか見当もつかない,といった感じではないでしょうか。

 本書は,ミニマックス法やアルファ−ベータ法といった探索アルゴリズムから,評価関数の作り方,リバーシの定石まで,順にわかりやすく解説しています。通して読めば,思考ルーチンがそれほど難しい理論の組み合わせではないことがわかるでしょう。思考ルーチンのアルゴリズムに焦点を当てており,プラットフォーム固有のユーザー・インタフェース機能などにほとんど触れていない点も理解のしやすさに一役買っています。思考対戦ゲームの作成に敷居の高さを感じていた人は,ぜひ読んでみてください。

 もう一つはシューティング・ゲーム。いかにも自分の意思で動いているような敵機と,あちこちから同時に飛んでくる弾,よけても追いかけてきたり,途中で分裂したり,と数々のテクニックが駆使されている印象を受けます。このシューティング・ゲームで使われるアルゴリズムをまとめているのが「シューティングゲーム アルゴリズム マニアックス」です。まさにタイトル通り,マニアックにも思える細かいテクニックまで含めて,図解とサンプル・コード,数式を駆使して,とても丁寧に解説しています。ただし,画面描画のコードまでは掲載していないため,その部分は自分で何とかする必要があります。

 特定のゲームではなく,各種ゲームに使えるアルゴリズムの集大成とも言える「GAME PROGRAMMING GEMS」とその続編「GAME PROGRAMMING GEMS2」もお薦めです。ゲーム画面らしき表紙の絵とは対照的に,中身はかなりアカデミックな理論やアルゴリズムの解説書といった印象を受けます。内容は,数値演算や数学的アルゴリズムから,3Dグラフィックス,オーディオ処理に至るまで多岐にわたります。ゲーム以外に応用可能な技術も満載なので,ゲームに興味がないという人も書店で見かけたら手にとってみてください。

テクニックや方法論についての本も読もう

 最後にプログラミングの方法論的なことにも触れておきたいと思います。ソフトウエア開発において必要なのは,ここまで述べてきたような技術的な知識だけではありません。プロとしてやっていくならもちろんのこと,そうでなくても上級プログラマを目指すなら,バグを減らしたり開発効率を上げるための方法なども身に付けておかなくてはならないのです。

 プログラミングをするうえで,絶対に避けて通れないのが「バグ」です。バグの少ないコードを書くための本についてはPart1で触れたので,ここではセキュリティ絡みのバグを減らすための本を一冊紹介するだけにとどめておきます。セキュリティ絡みのバグがやっかいなのは,普通に使うだけでは問題が発現せず,悪意のある第三者による思いもかけない使い方(攻撃)によって引き起こされる,という点です。きちんと作法に従ってプログラミングしていれば防げるとはいえ,どこまで気を付ければ安全なのかというとちょっと困ってしまいます。「セキュア プログラミング」では,そのあたりのポイントを学ぶことができます。すべての攻撃に対してセキュアというのは現実的でないと断ったうえで,適度にセキュアなプログラムにするための方策が,様々な角度から取り上げられています。パソコンがスタンドアロンだったころには気に留めることがなかった話ですが,ネットワーク時代に生きるプログラマは最低限,考え方だけでも知っておくべき内容といえます。

 コーディングの際にどれだけ気を付けても,バグは必ず入り込むものです。見付かった不具合は,デバッグして修正しなければなりません。ここで重要なのは,コードを書いている時間よりもデバッグにかかる時間の方がむしろ長いことが一般的だという点です。デバッグ作業をいかに効率よく行うかというのは非常に重要なテーマなのです。

 このデバッグの技術に焦点を当てたのが「.NET&Windowsプログラマのためのデバッグテクニック徹底解説」です。著者のJohn Robbinsは,かつて米NuMega TechnologiesにおいてSoftICE,BoundsCheckerなどのデバッグ関連ツールの開発に中心的な役割を果たした人で,この分野では「超」がつくほどのエキスパートです。WindowsのデバッグAPIや構造化例外処理(SEH)といったデバッグに必要な知識と様々なデバッグ・テクニックを,ネイティブ・コード,マネージ・コードの両方に渡って非常に詳しく解説しています。著者の経験した事例や失敗談もコラムとして随所に挿入されており,興味深く読むことができるでしょう。