內容簡介
本書是遊戲編程經典入門讀物的最新版。
全書共分14章,包含兩個附錄。本書首先介紹Windows和DirectX編程,然後快速介紹遊戲編程的工具箱,包括使用C++和DirectX開發遊戲所需的所有基礎知識。讀者將學習到把思想轉化為現實所需的技術,比如2D、3D圖形的繪製、背景捲動、處理遊戲輸入、音效、碰撞檢測等。在每章結束時,給齣瞭測驗題和項目以便幫助讀者實踐新學到的技能。本書配套網站提供瞭所有示例代碼和項目的下載。
本書自第1版齣版至今已經長達十年,深受廣大讀者歡迎。本書有誌於進入遊戲編程世界且有一定C++編程基礎的初學者閱讀,也適閤作為社會培訓機構的培訓教材。
作者簡介
Jonathan S. Harbour編寫瞭19本遊戲開發方麵的書,有針對PC、Mac、Linux、Android、Windows Phone和遊戲控製颱的。他在University of Advancing Technology(www.uat.edu)教瞭5年課程,在那裏,他和學生一起使用PlayStation 2 TOOL開發工具包、Nintendo Dolphin SDK、Xbox 360 XNA SDK、人工智能、數據庫、DirectX等工具和技術。他還教授瞭C++、Java、VB、C#、LUA、Python和SQL課程。他的個人站點是jharbour.com。
內頁插圖
目錄
第1部分 Windows和DirectX遊戲編程引言
第1章 Windows初步 3
1.1 Windows編程概述 4
1.1.1 “獲取”Windows 5
1.1.2 理解Windows消息機製 6
1.1.3 多任務 7
1.1.4 多綫程 8
1.1.5 事件處理 9
1.2 DirectX快速概覽 10
Direct3D是什麼 11
1.3 Windows程序基礎 12
1.3.1 創建第一個Win32
項目 12
1.3.2 理解WinMain 20
1.3.3 完整的WinMain 21
1.4 你所學到的 23
1.5 復習測驗 24
1.6 自己動手 25
第2章 偵聽Windows消息 26
2.1 編寫一個Windows程序 27
2.1.1 理解InitInstance 34
2.1.2 理解MyRegisterClass 36
2.1.3 曬一曬WinProc的
秘密 39
2.2 什麼是遊戲循環 42
2.2.1 老的WinMain 42
2.2.2 WinMain和循環 45
2.3 GameLoop項目 47
GameLoop程序的源代碼 47
2.4 你所學到的 54
2.5 復習測驗 54
2.6 自己動手 55
第3章 初始化Direct3D 56
3.1 Direct3D初步 56
3.1.1 Direct3D接口 57
3.1.2 創建Direct3D對象 57
3.1.3 第一個Direct3D項目 60
3.1.4 全屏模式的Direct3D 68
3.2 你所學到的 73
3.3 復習測驗 73
3.4 自己動手 74
第2部分 遊戲編程工具箱
第4章 繪製位圖 77
4.1 錶麵和位圖 77
4.1.1 主錶麵 79
4.1.2 從的離屏(off-screen)
錶麵 80
4.1.3 Create Surface示例 82
4.1.4 裝載位圖 86
4.1.5 Load_Bitmap程序 88
4.1.6 代碼迴收利用 92
4.2 你所學到的 92
4.3 復習測驗 93
4.4自己動手 94
第5章 從鍵盤、鼠標和控製器獲得
輸入 95
5.1 鍵盤輸入 96
5.1.1 DirectInput對象和
設備 96
5.1.2 初始化鍵盤 97
5.1.3 讀取鍵盤按鍵 99
5.2 鼠標輸入 99
5.2.1 初始化鼠標 100
5.2.2 讀取鼠標 101
5.3 Xbox 360控製器輸入 102
5.3.1 初始化XInput 103
5.3.2 讀取控製器狀態 104
5.3.3 控製器振動 105
5.3.4 測試XInput 106
5.4 精靈編程簡介 112
5.4.1 一個有用的精靈結構 114
5.4.2 加載精靈圖像 115
5.4.3 繪製精靈圖像 115
5.5 Bomb Catcher遊戲 116
5.5.1 MyWindows.cpp 118
5.5.2 MyDirectX.h 120
5.5.3 MyDirectX.cpp 122
5.5.4 MyGame.cpp 127
5.6 你所學到的 131
5.7 復習測驗 132
5.8 自己動手 133
第6章 繪製精靈並顯示精靈動畫 134
6.1 什麼是精靈 134
6.2 加載精靈圖像 135
6.3 透明的精靈 137
6.3.1 初始化精靈渲染器 138
6.3.2 繪製透明的精靈 140
6.4 繪製動畫的精靈 147
6.4.1 使用精靈錶 148
6.4.2 精靈動畫演示 150
6.5 你所學到的 154
6.6 復習測驗 154
6.7 自己動手 155
第7章 精靈變換 156
7.1 精靈鏇轉和縮放 156
7.1.1 2D變換 158
7.1.2 繪製變換瞭的精靈 163
7.1.3 Rotate_Scale_Demo
程序 164
7.1.4 帶有變換的動畫 166
7.2 你所學到的 169
7.3 復習測驗 170
7.4 自己動手 171
第8章 檢測精靈碰撞 172
8.1 邊界框碰撞檢測 172
8.1.1 處理矩形 173
8.1.2 編寫碰撞函數 174
8.1.3 新的精靈結構 175
8.1.4 為精靈的縮放進行
調整 176
8.1.5 邊界框演示程序 176
8.2 基於距離的碰撞檢測 180
8.2.1 計算距離 181
8.2.2 編寫距離計算的代碼 181
8.2.3 測試的碰撞 183
8.3 你所學到的 183
8.4 復習測驗 184
8.5 自己動手 185
第9章 打印文本 186
9.1 創建字體 186
9.1.1 字體描述符 187
9.1.2 創建字體對象 188
9.1.3 可重用的MakeFont
函數 188
9.2 使用ID3DXFont打印文本 189
9.2.1 使用DrawText打印 189
9.2.2 文本摺行 190
9.3 測試字體輸齣 191
9.4 你所學到的 194
9.5 復習測驗 194
9.6 自己動手 195
第10章 捲動背景 196
10.1 捲動 196
10.1.1 背景和布景 198
10.1.2 從圖片單元創建
背景 198
10.1.3 基於圖片單元的
捲動 199
10.2 動態渲染的圖片單元 205
10.2.1 圖片單元地圖 205
10.2.2 使用Mappy創建圖片
單元地圖 207
10.2.3 Tile Dynamic Scroll
項目 210
10.3 基於位圖的捲動 217
10.3.1 基於位圖的捲動
理論 217
10.3.2 位圖捲動演示 218
10.4 你所學到的 221
10.5 復習測驗 222
10.6 自己動手 223
第11章 播放音頻 224
11.1 使用DirectSound 224
11.1.1 初始化DirectSound 225
11.1.2 創建聲音緩衝區 226
11.1.3 裝載波形文件 226
11.1.4 播放聲音 227
11.2 測試DirectSound 228
11.2.1 創建項目 229
11.2.2 修改“MyDirectX”
文件 230
11.2.3 修改MyGame.cpp 232
11.3 你所學到的 238
11.4 復習測驗 239
11.5 自己動手 240
第12章 學習3D渲染基礎 241
12.1 3D編程簡介 242
12.1.1 3D編程的關鍵組成
部分 242
12.1.2 3D場景 242
12.1.3 轉移到第三個軸 247
12.1.4 掌握3D管綫 248
12.1.5 頂點緩衝區 250
12.1.6 渲染頂點緩衝區 252
12.1.7 創建四邊形 253
12.2 帶紋理的立方體示例 256
12.3 你所學到的 264
12.4 復習測驗 265
12.5 自己動手 266
第13章 渲染3D模型文件 267
13.1 創建以及渲染後援網格 267
13.1.1 創建後援網格 268
13.1.2 渲染後援網格 270
13.1.3 編寫著色器代碼 270
13.1.4 Stock Mesh程序 272
13.2 裝載並渲染模型文件 274
13.2.1 裝載.X文件 275
13.2.2 渲染紋理模型 279
13.2.3 從內存中刪除一個
模型 280
13.2.4 Render Mesh程序 281
13.3 你所學到的 289
13.4 復習測驗 289
13.5 自己動手 290
第14章 Anti-Virus(反病毒)
遊戲 291
14.1 Anti-Virus遊戲 291
14.1.1 遊戲玩法 292
14.1.2 遊戲源代碼 302
14.2 你所學到的 329
14.3 復習測驗 329
14.4 自己動手 330
第3部分 附 錄
附錄A 配置Visual Studio 2013 333
A.1 安裝 333
A.2 創建一個新的項目 334
A.3 修改字符集設置 337
A.4 修改VC++路徑 338
附錄B 各章測驗答案 339
前言/序言
《代碼的魔術師:揭秘遊戲開發的核心世界》 這不僅僅是一本書,它是一扇通往互動娛樂奇妙世界的沉浸式門戶,是獻給所有渴望將腦海中的幻想變為屏幕上躍動生命的夢想傢們的一份指南。我們生活的時代,遊戲已不再是簡單的消遣,它是一種藝術形式,一種講述故事的全新語言,一種連接世界的強大力量。從像素點構成的早期冒險,到如今擁有電影級畫質和復雜敘事的開放世界,遊戲的發展史本身就是一部科技與創意的璀璨篇章。而在這背後,是無數代碼的舞動,是算法的精妙編排,是邏輯的嚴絲閤縫,共同構建起我們沉醉其中、樂此不疲的虛擬現實。 本書的目標讀者,是那些對遊戲開發懷有強烈好奇心,但可能缺乏明確方嚮的初學者。我們理解,當麵對“遊戲開發”這個龐大的概念時,初學者常常會感到無從下手,被各種名詞、技術和工具淹沒。是先學習引擎?還是先掌握編程語言?圖形渲染、物理模擬、人工智能、用戶界麵,這些又是怎麼一迴事?無數的疑問可能如同迷霧,籠罩在探索的道路上。 《代碼的魔術師》正是為瞭驅散這些迷霧而生。它並非一本深奧的技術論文,也不是一部枯燥的編程教材。相反,它以一種更為親和、更具啓發性的方式,引導讀者逐步走近遊戲開發的核心。我們將從最基礎的概念講起,用通俗易懂的語言解釋那些看似復雜的技術原理。想象一下,當你看到遊戲中角色流暢的跳躍,爆炸時逼真的碎片飛濺,或是敵人智能的追擊,你是不是也曾好奇,這一切是如何實現的?本書將層層剝開這些“魔法”的幕後,讓你明白,這一切並非憑空而來,而是由一個個精巧的邏輯單元和嚴謹的代碼指令組閤而成。 我們將首先深入探索遊戲開發的基本構成要素。遊戲引擎,作為現代遊戲開發的核心平颱,將被詳細介紹。你將瞭解到,引擎是如何將圖形、聲音、物理、腳本等多種功能集成在一起,提供一個高效的開發環境。我們不會僅僅停留在理論層麵,而是會通過實際的例子,讓你理解不同引擎的優勢與劣勢,以及在選擇引擎時需要考慮的關鍵因素。 隨後,我們將觸及遊戲開發中至關重要的編程語言。雖然市麵上有許多選擇,但我們會聚焦於那些在遊戲開發領域擁有廣泛應用和強大社區支持的語言。你將學習到編程的基本語法、數據結構、算法思想,並瞭解這些知識如何被應用於遊戲邏輯的實現。我們將強調“解決問題”的編程思維,鼓勵讀者在實踐中學習,通過編寫簡單的程序來鞏固和加深對概念的理解。 本書的一個重要章節將專注於遊戲的核心機製:邏輯與互動。我們將探討如何設計和實現玩傢與遊戲世界之間的交互。從最基礎的玩傢輸入檢測,到角色移動、碰撞檢測,再到更復雜的AI行為設計,我們將一步步剖析這些邏輯是如何被構建起來的。你將學習到狀態機、有限自動機等重要的AI設計模式,理解如何讓遊戲中的NPC(非玩傢角色)擁有更加生動、智能的錶現。 視覺的盛宴:圖形與渲染的藝術 遊戲之所以迷人,很大程度上在於其視覺呈現。本書將為你揭示屏幕上那一幀幀畫麵的誕生過程。我們將講解三維圖形學的基礎知識,包括多邊形、紋理、光照、陰影等概念。你將瞭解到,從三維模型到最終在屏幕上顯示的圖像,需要經過一係列復雜的渲染管綫。雖然我們不會深入到每個著色器的每一個像素,但我們會讓你理解,為什麼遊戲畫麵會如此逼真,以及開發者在追求視覺效果時所麵臨的挑戰和采用的技術。 聽覺的衝擊:音效與音樂的魔力 除瞭視覺,聲音同樣是營造遊戲氛圍、提升玩傢沉浸感的關鍵。我們將討論遊戲音效的設計原則,以及如何將背景音樂、音效、語音等元素巧妙地融閤在一起,形成一個完整的聽覺體驗。你將瞭解到,簡單的音效可以極大地增強打擊感、反饋感,而一段恰到好處的背景音樂則能將玩傢的情緒推嚮高潮。 遊戲的靈魂:物理引擎的運作 在許多遊戲中,物理引擎扮演著至關重要的角色,它讓遊戲世界中的物體行為符閤我們日常生活中所熟悉的物理規律。本書將為你介紹物理引擎的基本原理,如剛體動力學、碰撞檢測、關節約束等。你將理解,為什麼遊戲中的物體會受到重力影響,為什麼碰撞會産生真實的彈開效果,以及開發者如何利用物理引擎來創造更具動態和趣味性的遊戲體驗。 故事的載體:敘事與關卡設計 一款優秀的遊戲,往往擁有引人入勝的故事和精心設計的關卡。本書將探討遊戲敘事的藝術,以及如何將故事巧妙地融入到遊戲機製和關卡設計中。你將學習到,如何通過環境敘事、角色互動、任務設計等多種方式,讓玩傢在遊玩過程中自然而然地被故事所吸引。關卡設計方麵,我們將討論如何通過空間布局、障礙設置、敵人 배치 等元素,來引導玩傢、挑戰玩傢,並最終提供 satisfying 的遊戲體驗。 遊戲的生命綫:優化與性能 對於任何一款遊戲來說,流暢的運行是基礎。本書將為你介紹遊戲性能優化的基本概念和常用技巧。你將瞭解到,為什麼有些遊戲會卡頓,以及開發者是如何通過代碼優化、資源管理、圖形設置等方式來提升遊戲的運行效率,確保玩傢能夠在各種設備上獲得良好的遊戲體驗。 從零開始的實踐路徑 《代碼的魔術師》並非隻是理論的堆砌,我們深知實踐的重要性。在每個章節中,我們都將提供簡化的代碼示例和練習,幫助你將所學知識付諸實踐。本書的設計理念是循序漸進,讓每一個讀者都能在輕鬆愉快的氛圍中,逐步建立起對遊戲開發的認知和信心。我們會鼓勵你動手去嘗試,去修改代碼,去觀察結果,去理解“為什麼”。 我們相信,每一個對遊戲充滿熱愛的人,都擁有成為一名遊戲開發者的潛質。這本書將為你點亮前行的道路,為你提供堅實的起點。它將幫助你理解遊戲開發背後的邏輯,掌握必要的工具和技術,更重要的是,它將激發你內心深處創造的衝動。 想象一下,當你的第一個遊戲在屏幕上運轉起來,當玩傢因為你設計的關卡而感到驚喜,當他們因為你創造的角色而潸然淚下,那一刻的成就感將是無與倫比的。 《代碼的魔術師》就是為你開啓這段奇妙旅程的第一把鑰匙。它將帶你走進一個充滿無限可能的世界,讓你親手去創造那些曾經讓你心馳神往的虛擬世界。準備好迎接挑戰,釋放你的創造力,成為那個用代碼編織夢想的魔術師吧!