內容簡介
這是一本非常有特色的計算機編程學習書籍。其特色就在於它將作者十餘年來對遊戲編程的所思、所感、所悟與編程理論知識相結合,褪去了純理論的教學理念,使讀者在前人的學習過程中吸取學習經驗和教訓,將計算機基礎知識和高級編程技術不知不覺地融入自己的頭腦中。
本書忠實地記錄了作者十餘年來對遊戲編程的所思、所感、所悟。全書按照作者本人學習和實踐的過程,帶著讀者從基礎的計算機知識到高級的編程技術,從非常專業的彙編最佳化到非常實際的項目管理進行了一次遊戲開發的全景探索。
出版信息
副標題: 我的編程感悟
作者: 雲風出版社: 電子工業出版社
出版年: 2005-12-01
頁數: 389
定價: 46.00
裝幀: 平裝
ISBN: 9787121016097
圖書目錄
第1章 計算機,遊戲,我 1
1.1 計算機 2
1.2 計算機遊戲 3
1.3 計算機與我 7
1.3.1 啟蒙 7
1.3.2 編程 9
第2章 算法,程式的靈魂 13
2.1 程式=算法+數據結構 14
2.1.1 算法 15
2.1.2 數據結構 17
2.2 搜尋算法 23
2.2.1 地圖尋路問題 23
2.2.2 博弈問題 27
2.2.3 更為廣泛的運用 28
2.3 智慧型算法 29
2.3.1 遺傳算法(Genetic Algorithm) 29
2.3.2 模擬退火算法(Simulated Annealing) 31
2.3.3 禁忌搜尋(Tabu Search) 33
2.3.4 人工神經網路
(Artificial Neural Network) 34
2.4 最佳化 36
2.4.1 質數問題 36
1.4.2 俄羅斯方塊競賽 37
2.5 apple II上的編程之路 39
第3章 程式語言 45
3.1 C 語言 46
3.2 BASIC 50
3.3 C++ 51
3.4 彙編語言 54
3.4.1 概述 55
3.4.2 程式的本質 57
3.4.3 暫存器 58
3.4.4 定址方式 60
3.4.5 彙編指令 61
3.4.6 C/C++ 語言和彙編 62
3.4.7 小結 63
3.5 其他語言 63
3.5.1 Forth 63
3.5.2 Lisp 64
3.5.3 Java 64
3.5.4 Python、Lua、更多 65
第4章 前Windows 時代 67
4.1 386保護模式 68
4.2 VGA 到VESA 70
4.2.1 超越 BGI 70
4.2.2 VGA 72
4.2.3 VESA 標準 72
4.2.4 花絮 74
4.3 保護模式下的開發工具 75
4.4 閒話 Allegro 81
4.4.1 用C與彙編寫成的程式庫 81
4.4.2 BITMAP 82
4.4.3 Sprite 85
4.4.4 幾何圖形和 3D 89
4.4.5 數據檔案 91
4.4.6 聲音 92
4.4.7 其他的部分 93
4.4.8 小結 94
4.5 cfido 中國惠多網 94
第5章 Windows 編程 101
5.1 Windows編程入門 104
5.1.1 Windows版本綜述 105
5.1.2 作業系統的核心 107
5.1.3 Windows API和DLL 110
5.1.4 COM 111
5.1.5 Windows的視窗和訊息處理與傳遞 114
5.1.6 Windows GDI 125
5.2 控制遊戲的速度 130
5.3 淺談MFC 132
5.4 小結 132
第6章 彙編最佳化 135
6.1 淺談代碼最佳化 138
6.2 並不僅僅是彙編 139
6.2.1 在算法實現時減少上下文的依賴關係 139
6.2.2 低效的靜態變數 140
6.2.3 數據的組織 141
6.2.4 消除除法 142
6.2.5 避免過大的循環 144
6.3 彙編和C/C++的混合編程 146
6.3.1 使用外置的彙編編譯器 146
6.3.2 使用內嵌彙編 148
6.3.3 C++的函式調用規則 150
6.3.4 暫存器的使用 152
6.3.5 _declspec(naked) 152
6.4 指令使用的技巧 153
6.4.1 LEA:別樣的記憶體定址指令 153
6.4.2 BSWAP:擴展暫存器的個數 154
6.4.3 縮短指令的位元組數 155
6.4.4 避免跳轉指令 159
6.5 Pentium 的彙編最佳化策略 161
6.5.1 UV流水線 163
6.5.2 AGI地址生成互鎖
(Address Generation Interlock) 167
6.5.3 Pentium Pro,Pentium II和Pentium III
的彙編最佳化策略 168
6.5.4 Pentium 4的彙編最佳化策略 178
6.5.5 如何測試代碼的速度 181
6.5.6 彙編能幹的事情 183
第7章 SIMD 指令 185
7.1 單指令多數據編程 186
7.1.1 Alpha 混合 187
7.2 MMX 191
7.2.1 MMX的指令概況 192
7.2.2 SSE及其對MMX的擴展 194
7.2.3 SIMD技術在C語言環境下的使用 196
7.2.4 MMX 編碼技巧 197
7.2.5 SIMD 的套用舉例 201
7.2.6 SIMD編程注意要點 203
7.2.7 SIMD的性能檢測 204
第8章 引擎中的最佳化 205
8.1 Blit的最佳化 207
8.2 髒矩形最佳化 209
8.2.1 “風魂”中改進的髒矩形算法 215
8.2.2 滾動最佳化 219
8.2.3 覆蓋最佳化 222
8.2.4 髒矩形在3D遊戲界面中的運用 224
8.2.5 時間和空間的權衡 229
8.2.6 關於估算 230
8.3 自己設計精靈格式 231
8.4 動態數據載入 234
8.5 小結 236
第9章 C 和 C++ 237
9.1 從C到C++ 239
9.2 C vs C++,效率至上 243
9.2.1 全局變數 243
9.2.2 函式調用的堆疊處理 243
9.2.3 函式調用的參數傳遞 244
9.2.4 臨時變數的堆疊使用 244
9.2.5 代碼生成 244
9.2.6 異常 244
9.2.7 inline 245
9.2.8 多態性 245
9.2.9 標準庫的差異 245
9.2.10 動態記憶體分配 245
9.3 優雅的C++ 246
9.3.1 消失了的宏 247
9.3.2 const修飾及類型轉換 248
9.3.3 隱藏實現 248
9.3.4 引用而非指針 250
9.3.5 名字空間 250
9.4 C++ 的誤區 251
9.4.1 類層次過細 251
9.4.2 濫用操作符重載 252
9.4.3 濫用標準容器 253
9.4.4 濫用動態類型識別和異常 253
9.4.5 濫用多重繼承 254
9.4.6 忽視C++高級特性的複雜度 255
9.4.7 學習C++ 256
9.5 動態記憶體分配的最佳化 257
9.5.1 另一種最佳化策略:多次分配,一次釋放 266
9.5.2 垃圾回收 268
9.5.3 再論動態記憶體分配 269
9.6 template 272
9.6.1 封裝C++的成員函式調用 272
9.6.2 常數數量的對象複製 274
9.6.3 對象計數 275
9.6.4 避免重複代碼 277
9.6.5 選擇最佳的容器 279
9.6.6 延遲運算 281
9.6.7 編譯時計算的遊戲 283
9.7 小結 286
第10章 調試 287
10.1 assert及程式錯誤的提前發現 288
10.1.1 崩潰的程式不說謊 289
10.1.2 為軟體維護多個版本 291
10.1.3 前置條件和後置條件 292
10.1.4 自己實現一個assert 292
10.1.5 不正確的assert使用 293
10.1.6 為assert分級 294
10.1.7 assert的引申:檢查函式返回值 295
10.1.8 釋放的指針需要置空嗎 297
10.2 讓程式更利於調試 298
10.2.1 錄像 299
10.2.2 實現一個log類 300
10.2.3 跟蹤代碼運行的流程 302
10.2.4 為記憶體分配加上一個殼 302
10.3 Release版本的調試 310
10.4 小結 311
第11章 腳本 313
11.1 為什麼需要腳本 314
11.2 應該用腳本做些什麼 316
11.3 腳本不應該做什麼 318
11.4 如何嵌入腳本語言 319
11.5 選擇一種腳本語言 321
11.6 實戰嵌入式腳本Lua 5 324
11.6.1 嵌入Lua 324
11.6.2 使用coroutine驅動遊戲邏輯 326
11.6.3 封裝C++中的對象 328
11.6.4 回調機制 336
11.7 反外掛技術 338
11.7.1 防止加速器 338
11.7.2 防止分析偽造網路包 339
11.7.3 防止逆向工程 341
11.7.4 防止代碼鉤子 344
11.7.5 懲戒外掛作弊者 344
11.7.6 安全地將信息傳遞給伺服器 345
11.7.7 防止模擬輸入 346
第12章 版本控制 349
12.1 常用版本控制軟體 351
12.2 版本控制工具在項目中的使用 355
12.3 不僅僅是程式才需要 358
第13章 開發方法 361
13.1 失敗的經驗 363
13.2 成功的經驗 365
13.3 對遊戲開發方法的一些思考 369
第14章 編程和遊戲 373
14.1 操作 376
14.2 角色設定 378
14.3 再談技術 379
14.4 淺談網路遊戲 381
14.5 小結 382
後記 383
致謝 385
作者簡介
雲風,時年二十七歲。自幼學習編程,十數年從未間斷,對程式設計有所領悟。大學時代開發的遊戲圖像引擎“風魂”曾用於多家遊戲公司的遊戲項目。參與過《大話西遊》系列、《夢幻西遊》、《網易泡泡遊戲》的開發。現從事新一代網路遊戲引擎的研究與開發,並在遊戲模式上做一些新的嘗試。
性格開朗,興趣廣泛,好交友,絕非沉浸在計算機世界中的書呆子。國學、歷史書籍常備案頭,以先賢之教誨修其心;休息時常作戶外運動,尤其喜愛攀岩。