
Windowsプロフェッショナルゲームプログラミング
著者/訳者:Array
出版社:秀和システム( 2002-06 )
定価:¥ 2,940
単行本 ( 375 ページ )
ISBN-10 : 479800314X
ISBN-13 : 9784798003146
ゲームプログラミングのみならず、C++でプログラミングをする中級者にはお勧めの本。
ありきたりなタイトルであるため「やねうらお本」と言った方が分かりやすいかも知れない。やねうらお氏はゲームプログラマではネット上でよく聞く有名人で、はてなダイアリーのブログや「BM98′S ROOMつう」で面白い記事をたくさん見かける。一方で嫌いな人は大嫌いのようで、ネット上の書評も公平とは思えないものも結構ある。
プログラミングの入門書として気合いが入っているのか、最初のハンガリー記法のような心構えのようなところから始まるが、面白いのは次のC++プログラミングテクニックあたりからだと思うが、これも前置きが長く、たぶん本人でも使っていないようなnew / deleteのオーバーロード(多重定義)でメモリリークの検出あたりから入る。それから徐々にスマートポインタの解説に入り、最終的にはスマートポインタを全面的に使うという結論になっている。
前置きが長いのは悪いことでもなく、著者の思考の流れが分かる点では優れている。例えば学校の理科の授業でも小学校や中学校では天下り的に事実を教えられることが多い(最近は違うかも)が、科学史を学ぶとそれらも試行錯誤の結果たどり着いたものであることがわかる。同様にプログラミングでも没ネタがたくさんあって、最後に何らかのテクニックを得る。本書は全体としてそういう傾向にあると思う。色々思考を巡らして「葬る方向で」の一言で済ませてしまうのは、いらない記述のようだけれど、プログラミングの学習途中にある人にとってはよいのかも知れない。
また、オブジェクト指向プログラミングを取り入れていて、これも入門書にあるように単に覚えるだけではなく、なぜインターフェースクラスを作るのかとか、デザインパターンはなぜ考案されたのかとか、そういう基本的なことを実例を通じて理解できるため、これもまた初心者から中級者にはよい。そのかわり、網羅してあるのではなく、本書で必要な範囲しか書いていないので、初心者は他に入門書が必要になるだろう。
後半からは徐々にWindowsプログラミングの話になるが、Windowsでない環境の人も十分に楽しめると思う。特に描画に関するGTLのあたりはテンプレートの使い込みを学ぶ材料としてはよいものだと思う。スマートポインタもそうだけれど、テンプレートを遠慮なく使っているのも特徴か。
Modern C++ Designという本があったが、あのあたりからだろうか、テンプレートの使い方が研究され尽くしてきて、Boostライブラリのような「変態的」なものも多く出てきて、そこから入るとたぶん参ってしまう。もう少し簡単なものはないかと思うと本書はちょうどいいかも知れない。テンプレートについては続編でもうちょっと書いてある。
目次
序 章 ゲームプログラミングへの招待
- 第1章 プログラミングのための準備
- 1.1 documentation(ドキュメンテーションのあり方)
- 1.2 coding style(コーディングスタイル)
- 1.3 dubug(デバッグ技法)
- 1.4 precompiled header(プリコンパイル済みヘッダ)
- 第2章 C++ programming technique
- 2.1 new/delete(newとdeleteについて)
- 2.2 anti-memory leak(メモリリーク対策)
- 2.3 faster new/delete(高速化されたnewとdelete)
- 2.4 memory pool(メモリプール)
- 2.5 garbage collector(ガベージコレクタ)
- 2.6 auto_ptr(所有権つきポインタ)
- 2.7 exception(例外処理)
- 2.8 auto_array(所有権インディケータ付き配列ポインタ)
- 2.9 smart_ptr(スマートポインタ)
- 2.10 smart_vector_ptr(スマートポインタのvector)
- 2.11 member function callback(メンバ関数コールバック)
- 2.12 listner(リスナクラス)
- 2.13 inner function(ローカル関数)
- 2.14 smart_array(スマート配列)
- 2.15 real smart pointer(本当にスマートなポインタ)
- 2.16 interface class(インターフェース クラス)
- 2.17 factory method(工場メソッド)
- 2.18 parametrized factory(パラメータ化されたfactory)
- 2.19 factory permutation(factory置換)
- 2.20 singleton(クラス唯一のインスタンス)
- 2.21 non-local static object(非ローカルなstaticオブジェクト)
- 2.22 helper function(ヘルパ関数)
- 2.23 versatile function callback(汎用関数コールバック)
- 2.24 object deleter(オブジェクト解体子)
- 2.25 chain of responsibility(責任の鎖)
- 2.26 RTTI(実行時型判定)
- 2.27 class export(クラスを外部から使えるようにする)
- 2.28 proxy pattern & null device(proxyパターンとNullDeviceパターン)
- 2.29 smart_iterator(スマートイテレータ)
- 2.30 broadcast(chainを辿ってすべてのインスタンスに通知する)
- 2.31 ref_creater(参照カウント付き生成子)
- 2.32 functor(関数オブジェクト)
- 第3章 ゲームに必須の汎用クラスの設計
- 3.1 Timer(タイマ)
- 3.2 FixTimer(固定タイマ)
- 3.3 FPSTimer(FPSを安定させるタイマ機構)
- 3.4 CriticalSection(クリティカルセクション)
- 3.5 MutexSection(mutexによるセクション)
- 3.6 Event(同期メカニズム イベント)
- 3.7 Thread(スレッド)
- 3.8 Application Initializer(アプリケーションの初期化子)
- 3.9 ThreadLocal(スレッド固有)
- 3.10 Single Application(同時複数起動しないアプリケーション)
- 3.11 Window Message Dispatcher(Windowメッセージの配信)
- 3.12 Window class(ウィンドウクラス)
- 3.13 mouse cursor(マウスカーソル)
- 3.14 Application Base(アプリケーション基底クラス)
- 3.15 Debug Window(デバッグウィンドウ)
- 3.16 Text Output Stream(テキスト出力ストリーム)
- 3.17 Interval Timer(定期的にコールバックされるタイマ割り込み)
- 3.18 Mouse Input(マウス入力)
- 3.19 KeyBase(キー入力基底クラス)
- 3.20 Virtual Key(仮想キー)
- 3.21 Application Frame(アプリケーションフレーム)
- 3.22 file wrapper(ファイル入出力)
- 3.23 Serialize/Deserialize(シリアライズ・デシリアライズ)
- 3.24 StringMap(文字列をキーとする連想記憶)
- 3.25 cache(キャッシュ)
- 3.26 Counter(カウンタ)
- 第4章 DirectX programmingへの序奏
- 4.1 about DirectX(DirectXについて)
- 4.2 COM Initialize/Uninitialize(COMの初期化とシャットダウン)
- 4.3 CoCreateInstance(CoCreateInstanceについて)
- 4.4 DirectInput(DirectInputによるキー入力)
- 4.5 JoyStick(ジョイスティック)
- 第5章 サウンドクラスの設計
- 5.1 CDDA(オーディオCDの再生)
- 5.2 wave output(wavファイルの再生)
- 5.3 DirectSoundBuffer(DirectSoundのサウンドバッファ)
- 5.4 DirectSound(DirectSoundについて)
- 5.5 Stream Sound(サウンドのStream再生)
- 5.6 Audio Compression Manager(ACMによるサウンドの再生)
- 5.7 Ogg Vorbis(Ogg Vorbisによるサウンドの再生)
- 5.8 sound class on yaneSDK3rd(yaneSDK3rdにおけるサウンドクラスの設計)
- 5.9 Sound Effect Manager(効果音のためのマネージャ)
- 5.10 MIDIOutput(MIDIファイルの再生)
- 5.11 MIDI Input(MIDI入力)
- 5.12 AudioMixer(オーディオミキサ)
- 5.13 VolumeFader(ボリュームのフェード)
- 第6章 描画クラスの設計
- 6.1 Surface(サーフェースについて)
- 6.2 Screen Mode(画面モード)
- 6.3 antialiasing(アンチエイリアス)
- 6.4 alpha channel(αチャンネル)
- 6.5 alpha surface(αサーフェース)
- 6.6 DDB vs DIB(デバイス依存ビットマップ vs デバイス非依存ビットマップ)
- 6.7 DIB(Device Independent Bitmap)(デバイス非依存ビットマップ)
- 6.8 DirectDraw(DirectDrawによる描画)
- 6.9 GTL(Graphic Template Library)(グラフィックテンプレートライブラリ)
- 6.10 DirectDrawSurface(DirectDrawSurfaceについて)
- 6.11 Dirty Rect(更新矩形)
- 6.12 IME(日本語変換)
- 第7章 ゲームプログラミングフレームワーク
- 7.1 about scene(シーンクラスの設計について)
- 7.2 scene stack(シーンの制御のためのスタック)
- 7.3 scene control(シーン管理クラス)
- 7.4 scene differentiation(シーンの微分化)
- 7.5 scene serialize/deserialize(シーンのシリアライズとデシリアライズ)
- 第8章 フォローアップ
- 8.1 推薦図書
- 8.2 参考(にすると良い)ホームページ
- 8.3 CD-ROM収録内容
admin :: 2月.13.2008 ::
C/C++, コンピュータ, プログラミング ::
No Comments »