《Windows游戲編程大師技巧(第2版)》是著名游戲程序設計大師André LaMothe的代表作。
全書分為4個部分,共計15章和6個附錄。作者循循善誘地從程序設計的角度介紹了在Windows環(huán)境下進行游戲開發(fā)所需的全部知識,包括Win32編程以及DirectX中所有主要組件(包括DirectDraw、DirectSound、DirectInput和DirectMusic)。書中還用單獨的章節(jié)詳細講授了2D圖形學和光柵化技術、游戲算法、多線程編程、文本游戲和解析、人工智能(包括模糊邏輯、神經網絡和遺傳算法)、物理建模(完全碰撞反應、動量傳遞和正反向運動學)及實時模擬等游戲程序開發(fā)中的關鍵技術。附錄部分介紹了本書光盤的內容,如何安裝DirectX,回顧了數學和三角學的基礎知識、C++編程的基礎知識,還給出了游戲編程資源以及ASCII表。
《Windows游戲編程大師技巧(第2版)》所附光盤上帶有本書中所有程序的源代碼、關于Direct3D和General 3D的文章和在線書籍以及眾多免費的素材。
《Windows游戲編程大師技巧(第2版)》適合想要學習Windows游戲編程的人員閱讀,對于有一定經驗的專業(yè)游戲開發(fā)人員,也具有較高的參考價值。
第一部分 Windows編程基礎
第1章 學海無涯
1.1 歷史一瞥
1.2 設計游戲
1.3 游戲類型
1.4 集思廣益
1.5 設計文檔和情節(jié)串聯(lián)圖板
1.6 使游戲具有趣味性
1.7 游戲的構成
1.8 常規(guī)游戲編程指導規(guī)范
1.9 使用工具
1.10 從準備到完成——使用編譯器
1.11 示例:FreakOut
1.12 小結
第2章 Windows編程模型
2.1 Windows的起源
2.1.1 早期版本的Windows
2.1.2 Windows 3.x
2.1.3 Windows 95
2.1.4 Windows 98
2.1.5 Windows ME
2.1.6 Windows XP
2.1.7 Windows NT/2000
2.1.8 Windows 基本架構:Win9X/NT
2.2 多任務和多線程
2.2.1 獲取線程的信息
2.2.2 事件模型
2.3 按照微軟風格編程:匈牙利符號表示法
2.3.1 變量的命名
2.3.2 函數的命名
2.3.3 類型和常量的命名
2.3.4 類的命名
2.3.5 參數的命名
2.4 世界上最簡單的Windows程序
2.4.1 總是從WinMain()開始
2.4.2 程序剖析
2.4.3 選擇一個信息框
2.5 現(xiàn)實中的Windows應用程序
2.6 Windows類
2.7 注冊Windows類
2.8 創(chuàng)建窗口
2.9 事件處理程序
2.10 主事件循環(huán)
2.11 產生一個實時事件循環(huán)
2.12 打開多個窗口
2.13 小結
第3章 高級Windows編程
3.1 使用資源
3.1.1 整合資源
3.1.2 使用圖標資源
3.1.3 使用光標資源
3.1.4 創(chuàng)建字符串表資源
3.1.5 使用.WAV聲音資源
3.1.6 使用編譯器創(chuàng)建.RC文件
3.2 使用菜單
3.2.1 創(chuàng)建菜單
3.2.2 裝載菜單
3.2.3 響應菜單事件消息
3.3 GDI(圖形設備接口)簡介
3.3.1 重拾WM_PAINT信息
3.3.2 視頻顯示基礎和色彩(Video Display Basics and Color)
3.3.3 RGB和調色板模式
3.3.4 基本文本顯示
3.4 處理重要事件
3.4.1 Windows操作
3.4.2 處理鍵盤事件
3.4.3 處理鼠標事件
3.5 自行發(fā)送消息
3.6 小結
第4章 Windows GDI、控件和靈感
4.1 高級GDI繪圖
4.1.1 掀開圖形設備描述表的蓋頭來
4.1.2 顏色、畫筆和畫刷
4.1.3 使用畫筆
4.1.4 使用畫刷
4.2 點、線、平面多邊形和圓
4.2.1 繪制點
4.2.2 繪制線段
4.2.3 繪制矩形
4.2.4 繪制圓
4.2.5 繪制多邊形
4.3 深入文本和字體
4.4 定時高于一切
4.4.1 WM_TIMER消息
4.4.2 低層定時操作
4.5 使用控件
4.5.1 按鈕
4.5.2 向子控件發(fā)送消息
4.6 獲取信息
4.7 T3D游戲控制臺程序
4.8 小結
第二部分 DirectX和2D基礎
第5章 DirectX基礎知識和令人生畏的COM
5.1 DirectX基礎
5.1.1 HEL和HAL
5.1.2 更多的DirectX基礎類
5.2 COM:是微軟的杰作,還是魔鬼的杰作
5.2.1 COM對象究竟是什么
5.2.2 接口標識符和GUID的詳細內容
5.2.3 創(chuàng)建一個類COM對象
5.2.4 COM的簡要回顧
5.2.5 可運行的COM程序
5.3 應用DirectX COM對象
5.3.1 COM和函數指針
5.3.2 創(chuàng)建和使用DirectX界面
5.3.3 接口查詢
5.4 COM的前景
5.5 小結
第6章 初次邂逅DirectDraw
6.1 DirectDraw的接口
6.1.1 接口的特性
6.1.2 組合使用接口
6.2 創(chuàng)建DirectDraw對象
6.2.1 對DirectDraw進行錯誤處理
6.2.2 順便提一下接口
6.3 與Windows協(xié)作
6.4 設置模式
6.5 色彩的奧秘
6.6 創(chuàng)建顯示表面
6.6.1 創(chuàng)建一個主顯示表面
6.6.2 關聯(lián)調色板
6.6.3 繪制像素
6.6.4 清理資源
6.7 小結
第7章 高級DirectDraw和位圖圖形
7.1 使用高彩模式
7.1.1 16位高彩模式
7.1.2 獲取像素格式
7.1.3 24/32位真彩色模式
7.2 雙緩沖
7.3 表面動態(tài)
7.4 頁面切換
7.5 顯存塊移動單元(Blitter)
7.5.1 使用Blitter進行內存填充
7.5.2 從一個表面向另一個表面復制位圖
7.6 基礎裁剪知識
7.6.1 將像素按視口裁剪
7.6.2 位圖裁剪技巧
7.6.3 使用IDirectDrawClipper進行DirectDraw裁剪
7.7 使用位圖
7.7.1 載入.BMP文件
7.7.2 使用位圖
7.7.3 載入8位位圖
7.7.4 載入16位位圖
7.7.5 載入24位位圖
7.7.6 總結位圖
7.8 離屏表面
7.8.1 創(chuàng)建離屏表面
7.8.2 在離屏表面上進行Blitting
7.8.3 設置Blitter
7.8.4 色彩鍵
7.8.5 源色彩鍵
7.8.6 目標色彩鍵
7.8.7 使用Blitter(終于。
7.9 位圖的旋轉和縮放
7.10 離散采樣理論
7.11 色彩效果
7.11.1 256色模式下的色彩動畫
7.11.2 256色模式下的色彩旋轉
7.11.3 使用RGB模式的技巧
7.12 手動色彩變換及查詢表
7.13 新的DirectX色彩和Gamma控制接口
7.14 將GDI和DirectX聯(lián)用
7.15 DirectDraw的廬山真面目
7.15.1 主DirectDraw對象
7.15.2 關于表面
7.15.3 使用調色板
7.16 在窗口模式下使用DirectDraw
7.17 小結
第8章 矢量光柵化及2D變換
8.1 繪制線條
8.1.1 Bresenham算法
8.1.2 算法的速度優(yōu)化
8.2 基本2D圖形裁剪
8.2.1 利用點斜式計算兩條直線的交點
8.2.2 利用一般式計算兩條直線的交點
8.2.3 利用矩陣式計算兩條直線的交點
8.2.4 裁剪直線
8.2.5 Cohen-Sutherland算法
8.3 線框多邊形
8.3.1 多邊形數據結構
8.3.2 多邊形的繪制及裁剪
8.4 2D平面里的變換
8.4.1 平移
8.4.2 旋轉
8.4.3 縮放
8.5 矩陣引論
8.5.1 單位矩陣
8.5.2 矩陣加法
8.5.3 矩陣乘法
8.5.4 使用矩陣進行變換
8.6 平移
8.7 縮放
8.8 旋轉
8.9 填充實心多邊形
8.9.1 三角形和四邊形類型
8.9.2 繪制三角形和四邊形
8.9.3 三角形解構詳述
8.9.4 四邊形光柵化的一般性討論
8.9.5 多邊形的三角化
8.10 多邊形碰撞檢測
8.10.1 接近度、邊界球/圓
8.10.2 邊界盒
8.10.3 點包含
8.11 深入定時和同步
8.12 卷軸和搖鏡頭
8.12.1 頁面卷軸引擎
8.12.2 均勻平鋪(Tile)顯示引擎
8.12.3 稀疏位圖平鋪顯示引擎
8.13 偽3D等軸測引擎
8.13.1 方法1:基于單元,全二維
8.13.2 方法2:基于全屏,具有一些二維或三維的碰撞網絡
8.13.3 方法3:采用全三維數學運算,使用一個固定的相機視角
8.14 T3DLIB1函數庫
8.14.1 引擎架構
8.14.2 新的游戲編程控制臺程序
8.14.3 基本定義
8.14.4 可用的宏
8.14.5 數據類型和結構
8.14.6 全局定義
8.14.7 DirectDraw接口
8.14.8 2D多邊形函數
8.14.9 2D基本圖元函數
8.14.10 數學和誤差函數
8.14.11 位圖函數
8.14.12 調色板函數
8.14.13 實用工具函數
8.15 BOB引擎
8.16 小結
第9章 DirectInput輸入和力反饋
9.1 輸入循環(huán)
9.2 DirectInput序曲
9.2.1 DirectInput組件
9.2.2 設置DirectInput的一般步驟
9.2.3 數據采集模式
9.2.4 創(chuàng)建主DirectInput對象
9.2.5 101鍵盤
9.2.6 讀數據過程中的問題:重獲取
9.2.7 捕捉鼠標
9.2.8 使用游戲桿
9.2.9 將輸入消息化
9.3 力反饋
9.3.1 力反饋的物理原理
9.3.2 設置力反饋
9.3.3 力反饋演示程序
9.4 編寫一個廣泛適用的輸入系統(tǒng):T3DLIB2.CPP
9.5 小結
第10章 用DirectSound和DirectMusic演奏樂曲
10.1 在PC上對聲音編程
10.2 從此有了聲音…
10.3 數碼聲音與MIDI比較——音質好且存儲省
10.3.1 數碼聲音——從“位”開始
10.3.2 合成聲音與MIDI
10.3.3 MIDI概述
10.4 發(fā)聲硬件
10.4.1 波表合成
10.4.2 波導合成
10.5 數碼錄音:設備和技術
10.5.1 錄制聲音
10.5.2 處理聲音
10.6 DirectSound中的麥克風
10.7 初始化DirectSound
10.7.1 理解協(xié)作等級
10.7.2 設定協(xié)作等級
10.8 主聲音緩沖區(qū)與輔助聲音緩沖區(qū)
10.8.1 使用輔助緩沖區(qū)
10.8.2 創(chuàng)建輔助聲音緩沖區(qū)
10.8.3 把數據寫入輔助聲音緩沖區(qū)
10.9 渲染聲音
10.9.1 播放聲音
10.9.2 停止播放
10.9.3 控制音量
10.9.4 調整頻率
10.9.5 調整聲道平衡
10.10 用DirectSound反饋信息
10.11 從磁盤中讀取聲音數據
10.11.1 .WAV文件格式
10.11.2 讀取.WAV文件
10.12 DirectMusic:偉大的試驗
10.13 DirectMusic的體系結構
10.14 初始化DirectMusic
10.14.1 初始化COM
10.14.2 創(chuàng)建一個演奏對象
10.14.3 給演奏對象增加端口
10.15 加載一個MIDI段
10.15.1 創(chuàng)建一個加載程序
10.15.2 加載MIDI文件
10.16 操作MIDI段
10.16.1 播放一個MIDI段
10.16.2 停止一個MIDI段
10.16.3 檢查MIDI段的狀態(tài)
10.16.4 釋放一個MIDI段
10.16.5 關閉DirectMusic
10.16.6 一些DirectMusic的實例
10.17 T3DLIB3聲音和樂曲庫
10.17.1 頭文件
10.17.2 類型
10.17.3 全局變量
10.17.4 DirectSound API封裝
10.17.5 DirectMusic API封裝
10.18 小結
第三部分 核心游戲編程
第11章 算法、數據結構、 內存管理和多線程
11.1 數據結構
11.1.1 靜態(tài)結構和數組
11.1.2 鏈表
11.2 算法分析
11.3 遞歸
11.4 樹結構
11.4.1 建立二分查找樹(BST)
11.4.2 搜索BST
11.5 優(yōu)化理論
11.5.1 運用你的頭腦
11.5.2 數學技巧
11.5.3 定點運算
11.5.4 循環(huán)體展開
11.5.5 查找表
11.5.6 匯編語言
11.6 制作演示
11.6.1 預先記錄的演示
11.6.2 由人工智能控制的演示
11.7 保存游戲的手段
11.8 實現(xiàn)多人游戲
11.8.1 輪流
11.8.2 分屏
11.9 多線程編程技術
11.9.1 多線程編程的術語
11.9.2 為何要在游戲中使用線程
11.9.3 取得一個線程
11.9.4 線程間的消息傳遞
11.9.5 等待合適時機
11.9.6 多線程和DirectX
11.9.7 高級多線程編程
10.10 小結
第12章 人工智能
12.1 人工智能初步
12.2 確定性AI算法
12.2.1 隨機運動
12.2.2 跟蹤算法
12.2.3 反跟蹤:閃避算法
12.3 模式以及基本控制腳本的編寫
12.3.1 基本模式
12.3.2 具備條件邏輯處理的模式
12.4 行為狀態(tài)系統(tǒng)建模
12.4.1 基本狀態(tài)機
12.4.2 加入更多表現(xiàn)個性的行為
12.5 用軟件對記憶和學習進行建模
12.6 計劃樹和決策樹
12.6.1 計劃編程
12.6.2 實現(xiàn)真正的計劃生成器
12.7 尋路
12.7.1 試探法(Trial and Error)
12.7.2 輪廓跟蹤
12.7.3 碰撞規(guī)避跟蹤
12.7.4 路點尋路
12.7.5 一個賽車例子
12.7.6 可靠的尋路
12.8 高級AI腳本
12.8.1 設計腳本語言
12.8.2 使用C/C++編譯器
12.9 人工神經網絡
12.10 遺傳算法
12.11 模糊邏輯
12.11.1 普通集合論
12.11.2 模糊集合理論
12.11.3 模糊語言變量及其規(guī)則
12.11.4 模糊流形與成員關系
12.11.5 模糊關聯(lián)矩陣
12.11.6 用模糊化的輸入處理FAM
12.11.7 暖融融
12.12 為游戲創(chuàng)造真正的AI
12.13 小結
第13章 基本物理建模
13.1 基本物理學定律
13.1.1 質量(m)
13.1.2 時間(t)
13.1.3 位置(s)
13.1.4 速率(v)
13.1.5 加速度(a)
13.1.6 力(F)
13.1.7 多維空間中的力
13.1.8 動量(P)
13.2 線性動量的物理性質:守恒與傳遞
13.3 模擬萬有引力效果
13.3.1 模擬重力井
13.3.2 模擬炮彈彈道
13.4 討厭的摩擦力
13.4.1 摩擦基本概念
13.4.2 斜面上的摩擦力(高級)
13.5 基本的特殊碰撞反應
13.5.1 簡單的x,y反彈物理
13.5.2 計算任意方向上的平面碰撞反應
13.5.3 矢量反射示例
13.5.4 線段的交點
13.6 實際2D物體間的精確碰撞響應(高級)
13.7 解決n-t坐標系統(tǒng)
13.8 簡單運動學
13.8.1 求解正向運動學問題
13.8.2 解決反向運動學問題
13.9 粒子系統(tǒng)
13.9.1 每顆粒子都需要的東西
13.9.2 設計粒子引擎
13.9.3 粒子引擎軟件
13.9.4 產生初始條件
13.9.5 整合微粒系統(tǒng)
13.10 創(chuàng)建游戲的物理模型
13.10.1 物理建模的數據結構
13.10.2 基于幀的模擬與基于時間的模擬
13.11 小結
第14章 文字時代
14.1 什么是文字游戲
14.2 文字游戲如何工作
14.3 從外部世界獲得輸入
14.4 語言分析和解析
14.4.1 詞法分析
14.4.2 句法分析
14.4.3 語義分析
14.5 組成游戲世界
14.5.1 表示場景
14.5.2 放置物體
14.5.3 讓事情發(fā)生
14.5.4 自由移動
14.5.5 物品系統(tǒng)
14.6 實現(xiàn)視覺、聽覺和嗅覺
14.6.1 聽覺
14.6.2 嗅覺
14.6.3 視覺
14.7 實時響應
14.8 錯誤處理
14.9 造訪Shadow Land
14.10 Shadow Land中使用的語言
14.11 編譯和運行Shadow Land
14.12 小結
第15章 綜合運用
15.1 Outpost的設計初稿
15.1.1 游戲背景
15.1.2 設計游戲玩法
15.2 用于編寫游戲的工具
15.3 游戲場景:在太空中卷動
15.4 玩家控制的飛船:鬼怪號
15.5 小行星帶
15.6 敵人
15.6.1 邊哨(Outpost)
15.6.2 捕食者太空雷
15.6.3 戰(zhàn)艦
15.7 “寶物”
15.8 HUD
15.9 粒子系統(tǒng)
15.10 玩游戲
15.11 編譯Outpost
15.12 結束語
第四部分 附錄
附錄A 光盤內容簡介
附錄B 安裝DirectX和使用C/C++編譯器
附錄C 數學和三角學回顧
附錄D C++入門
附錄E 游戲編程資源
附錄F ASCII表