《Windows游戲程序設計基礎》講述了如何使用Visual C++來開發Windows平臺游戲的基礎知識,主要針對想學習游戲設計以及希望進行Windows程序設計的初學者。
全書分為4篇共14章。第1篇為Windows編程基礎,除了基本的概念和工具的使用外,還介紹了窗口與消息機制、Unicode編程、GDI編程等內容;第2篇為游戲編程基礎,介紹了庫的編程技術、設計模式、幀的基本概念,并搭建了一個Windows下游戲編程的框架;第3篇的射擊游戲綜合運用前面兩篇的所有知識,完成了一款射擊游戲,并講述了XML的基本編程以及關卡設計;第4篇為進一步學習打下基礎,講解了最基礎的Windows核心編程,包括進程管理、多線程編程、互斥訪問和同步,以及Direct X應用于2D編程的內容。《Windows游戲程序設計基礎》介紹了在Windows環境下進行游戲編程所用到的各種基礎知識,而并非局限于Windows API本身的編程。
《Windows游戲程序設計基礎》每個章節都以簡單的實例輔助對知識點的理解,力求深入淺出,并且逐漸遞增難度。
第1篇Windows編程基礎
第1章 引言
1.1 電子游戲產業
1.1.1 概述
1.1.2 游戲產業價值鏈
1.1.3 電子游戲的歷史
1.1.4 電子游戲產業的游戲分類
1.2 Windows的發展歷史
1.3 Windows應用程序開發
1.4 一些說明
1.5 習題
第2章 學習使用VisualC++
2.1 VisualC++安裝和使用
2.1.1 VisualC++的版本信息
2.1.2 創建Win32應用程序
2.2 Win32控制臺應用程序設計
2.2.1 預編譯頭文件
2.2.2 Unicode編碼
2.2.3 TCHAR
2.2.4 Debug和Release
2.2.5 基本的調試方法
2.3 良好的編程習慣
2.3.1 使用正確的代碼格式
2.3.2 采用匈牙利命名法
2.4 Win32API中的常見數據類型
2.5 習題
第3章 創建窗口與消息響應
3.1 Windows應用程序的基本概念
3.1.1 窗口
3.1.2 入口函數
3.1.3 消息和窗口函數
3.1.4 進隊消息與不進隊消息
3.1.5 使用MSDN來學習窗口消息
3.2 創建窗口
3.2.1 包含頭文件
3.2.2 定義類名和標題字符串
3.2.3 注冊窗口
3.2.4 窗口類的風格
3.2.5 創建窗口
3.2.6 窗口風格
3.2.7 顯示窗口
3.2.8 更新窗口
3.2.9 消息循環
3.2.10 窗口函數
3.2.11 應用程序的退出
3.3 關鍵在于應用
3.4 習題
第4章 Windows程序設計基礎
4.1 GDI的各種概念
4.1.1 什么是GDI
4.1.2 圖形設備上下文
4.1.3 WM_PAINT消息
4.2 GDI版本的Hello,World!
4.2.1 BeginPaint和EndPaint
4.2.2 輸出文本
4.3 打字程序
4.3.1 按鍵消息
4.3.2 字符消息
4.3.3 強制刷新
4.3.4 簡陋的打字程序
4.4 涂鴉程序
4.4.1 GDI函數
4.4.2 涂鴉程序
4.4.3 鼠標消息
4.4.4 GetDC與ReleaseDC
4.4.5 設置字符串
4.4.6 畫線與填充
4.4.7 涂鴉程序2
4.5 時鐘
4.5.1 獲取系統時間
4.5.2 生成和銷毀定時器
4.5.3 獲取按鍵的輸入狀態
4.5.4 WM_NCHITTEST
4.5.5 使用右鍵菜單
4.6 使用資源
4.6.1 使用圖標資源
4.6.2 使用鼠標指針
4.6.3 使用菜單
4.6.4 加速鍵
4.7 文件內核對象
4.7.1 CreateFile
4.7.2 文件大小和文件位置
4.7.3 讀/寫文件
4.7.4 與文件相關的通用對話框
4.7.5 實現涂鴉文件讀/寫
4.8 習題
第5章 進一步提高Windows編程
5.1 圖像文件的格式
5.2 位圖
5.2.1 位圖的概念
5.2.2 加載位圖
5.2.3 設備DC與內存DC
5.2.4 BitBlt
5.2.5 繪制位圖文件的基本流程
5.2.6 完整的代碼
5.2.7 改變窗口的位置與尺寸
5.3 內存DC的應用
5.3.1 鏤空圖
5.3.2 一個小程序
5.3.3 為什么會有屏閃
5.3.4 背景滾動
5.4 俄羅斯方塊
5.4.1 設計思路
5.4.2 設計BLOCK
5.4.3 CGame的設計
5.4.4 CGame的實現
5.5 習題
第2篇 游戲編程基礎
第6章 庫與CxImage庫
6.1 庫的基本概念
6.2 編譯、鏈接、執行
6.3 靜態庫的基本編程
6.4 動態庫編程
6.4.1 動態庫基本編程過程
6.4.2 使用統一的頭文件
6.4.3 再次審視編譯鏈接執行
6.5 使用CxImage庫
6.5.1 生成CxImage
6.5.2 通過DLL使用CxImage
6.5.3 使用CxImage顯示圖片
6.5.4 旋轉圖片
6.5.5 封裝CxImage
6.6 習題
第7章 常用設計模式的介紹
7.1 面向對象程序設計
7.1.1 面向對象程序設計的三大機制
7.1.2 面向對象程序設計的原則
7.2 設計模式概論
7.3 模板方法模式
7.4 策略模式
7.5 習題
第8章 搭建Windows游戲程序框架
8.1 分析Win32項目的基本代碼
8.2 游戲循環
8.3 “糟糕”的消息機制
8.3.1 同步函數與異步函數
8.3.2 實現游戲循環
8.4 利用模板方法模式搭建Windows游戲程序框架
8.5 使用并完善框架類
8.5.1 使用cApplication
8.5.2 實現雙緩沖技術避免屏閃
8.5.3 計算并顯示幀率
8.6 查詢按鍵及退出游戲的實現
8.6.1 獲取按鍵狀態
8.6.2 Escape退出
8.7 游戲暫停功能的實現
8.7.1 單擊空格鍵暫停游戲
8.7.2 是否當前窗口判斷游戲暫停
8.8 六字真言:輸入、計算、輸出
8.9 習題
第3篇 射擊游戲
第9章 圖像顯示與背景
9.1 必要的數學運算
9.1.1 坐標和角度運算
9.1.2 敵機的旋轉角度
9.1.3 邊界檢測
9.2 管理器的概念
9.2.1 怪物
9.2.2 怪物管理器
9.2.3 怪物仿真程序的邏輯
9.3 圖片資源的管理
9.4 實現背景的滾動
9.4.1 背景類cBackground的聲明
9.4.2 背景類cBackground的實現
9.4.3 背景類cBackground的使用
9.5 可移動對象接口類IMovable
9.5.1 可移動對象
9.5.2 可移動對象管理器
9.6 實現云彩
9.7 習題
第10章 飛機和子彈
10.1 總體設計
10.2 飛機
10.3 實現戰機
10.4 敵機
10.4.1 整體設計
10.4.2 敵機類cEnemy
10.4.3 敵機管理器
10.4.4 敵機與戰機的碰撞
10.4.5 使用敵機管理器類
10.5 敵機飛起來
10.5.1 敵機與策略
10.5.2 勻速策略類
10.5.3 策略管理器
10.5.4 直線型策略
10.5.5 讓敵機具備跟蹤功能
10.6 子彈
10.6.1 總體思路
10.6.2 子彈管理器
10.6.3 碰撞檢測
10.6.4 發射
10.7 習題
第11章 實現關卡
11.1 XML編程基礎
11.1.1 XML的基本概念
11.1.2 XML文件示例
11.1.3 使用XMLNotepad
11.2 通過XML實現關卡
11.2.1 使用TinyXML
11.2.2 XML實現敵機類型
11.2.3 XML實現子彈類型
11.2.4 XML實現戰機子彈
11.2.5 XML實現關卡腳本
11.3 習題
第4篇 知識拓展
第12章 Windows體系結構
12.1 多任務的操作系統
12.2 Windows的體系結構
12.2.1 核心態
12.2.2 用戶態
12.3 搶先式多任務工作方式
12.4 Windows內存管理機制
12.5 多線程
12.6 習題
第13章 Windows高級編程
13.1 內核對象與內核對象句柄
13.1.1 內核對象
13.1.2 創建內核對象
13.1.3 使用計數
13.1.4 進程間共享內核對象
13.1.5 觸發/未觸發狀態
13.2 進程
13.2.1 進程與線程
13.2.2 通過任務管理器查看程序的信息
13.2.3 創建子進程
13.2.4 終止進程
13.3 多線程編程
13.3.1 進程與線程
13.3.2 引入線程的好處
13.3.3 如何使用多線程
13.3.4 創建線程
13.3.5 多個線程使用同一個線程函數
13.3.6 線程的調度
13.4 互斥訪問共享資源
13.4.1 提出問題
13.4.2 互鎖函數
13.4.3 關鍵段操作
13.4.4 使用內核對象保證互斥訪問
13.5 線程同步
13.5.1 單向的同步關系
13.5.2 循環的同步關系
13.6 習題
第14章 使用DirectX完成二維游戲繪制
14.1 DirectX概述
14.2 初始化Direct3D
14.2.1 獲取IDirect3D9接口
14.2.2 構造D3DPRESENT_PARAMETERS結構體
14.2.3 創建IDirect3DDevice9對象
14.2.4 創建Direct3D窗口
14.3 顯示圖形
14.3.1 頁面切換
14.3.2 在響應WM_PAINT消息的代碼中進行繪制
14.3.3 頂點與FVF(靈活頂點格式)
14.3.4 三角形
14.3.5 繪制二維三角形
14.4 使用DirectGraphics進行2D圖像處理
14.4.1 紋理
14.4.2 創建并使用紋理
14.4.3 常用渲染狀態
14.5 把Direct3D融入框架中
14.5.1 紋理類
14.5.2 渲染系統類
14.5.3 使用渲染系統
14.6 習題
附錄 AVisualC++編譯常見錯誤
附錄 BASCII碼表
附錄 C標準模板庫的使用
C.1 STL概述
C.1.1 要點
C.1.2 頭文件
C.1.3 名字空間
C.1.4 迭代器
C.2 常用數據容器與數據結構
C.3 vector
C.3.1 插入數據
C.3.2 遍歷
C.4 list
C.4.1 list的迭代器
C.4.2 遍歷
C.4.3 刪除元素
C.5 map
C.5.1 數據的插入和修改
C.5.2 數據的遍歷
C.5.3 數據的查找
C.5.4 數據的清空與判空
C.6 使用標準模板庫(STL)
參考文獻