注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)程序設(shè)計(jì)綜合游戲之旅:我的編程感悟

游戲之旅:我的編程感悟

游戲之旅:我的編程感悟

定 價(jià):¥46.00

作 者: 云風(fēng)著
出版社: 電子工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 游戲 應(yīng)用程序 程序設(shè)計(jì)

ISBN: 9787121016097 出版時(shí)間: 2005-12-01 包裝: 膠版紙
開(kāi)本: 小16開(kāi) 頁(yè)數(shù): 412 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

本書(shū)忠實(shí)地記錄了作者十余年來(lái)對(duì)游戲編程的所思、所感、所悟。全書(shū)按照作者本人學(xué)習(xí)和實(shí)踐的過(guò)程,帶著讀者從基礎(chǔ)的計(jì)算機(jī)知識(shí)到高級(jí)的編程技術(shù),從非常專業(yè)的匯編優(yōu)化到非常實(shí)際的項(xiàng)目管理進(jìn)行了一次游戲開(kāi)發(fā)的全景探索。本書(shū)不僅適合游戲開(kāi)發(fā)者閱讀,也會(huì)給所有的開(kāi)發(fā)者和程序愛(ài)好者帶來(lái)啟示。本書(shū)前言前言終于把整本書(shū)完成了,我?guī)缀醪桓蚁嘈拍芡瓿?。陸陸續(xù)續(xù)地寫(xiě)了一年多,其中的辛苦恐怕只有寫(xiě)過(guò)技術(shù)書(shū)籍的朋友能夠理解了。很早以前就有朋友跟我提過(guò),好好寫(xiě)本書(shū),把自己理解的知識(shí)傳授給他人,于己于人都是頗為有益的事情。寫(xiě)作技術(shù)書(shū)是很困難的事,它需要作者厚積薄發(fā),把自己多年的知識(shí)濃縮歸納,才能用簡(jiǎn)潔的文字表達(dá)出來(lái)。而知識(shí)的傳授絕對(duì)不同于講故事,文字究竟能表達(dá)出多少作者自己已經(jīng)理解的,我個(gè)人覺(jué)得是很難拿得準(zhǔn)的。先后有幾個(gè)出版社的朋友來(lái)約稿,只是一直忙于項(xiàng)目開(kāi)發(fā),沒(méi)有將其放在心上。直到《大話西游II》和《夢(mèng)幻西游》兩款游戲相繼開(kāi)發(fā)完畢,并取得了市場(chǎng)上的成功,我的工作也相對(duì)閑了下來(lái)。這時(shí),我終于可以動(dòng)筆來(lái)寫(xiě)這本書(shū)了。大家現(xiàn)在看到的這些內(nèi)容,是我在一年多的時(shí)間里,斷斷續(xù)續(xù)整理出來(lái)的??磻T了國(guó)外嚴(yán)謹(jǐn)?shù)募夹g(shù)書(shū)的讀者,肯定會(huì)挑出許多毛病來(lái)。我?guī)缀鯖](méi)有一章,把某個(gè)技術(shù)點(diǎn)由淺入深地闡述全面;也沒(méi)有將游戲制作的某個(gè)特定領(lǐng)域分章斷節(jié),細(xì)細(xì)道來(lái);它絕對(duì)是依照我自己的偏好來(lái)選材,甚至,這本書(shū)不能算是一本游戲編程的專門(mén)書(shū),我把重點(diǎn)放在了編程領(lǐng)域,而不是游戲。我曾經(jīng)對(duì)自己這本書(shū)的定位迷茫過(guò)。它看起來(lái)好像是一個(gè)大雜燴,整體的組織沒(méi)有條理,細(xì)節(jié)的描述又不夠徹底。終于有一天,我自己想明白了,得以心情舒暢地將之全部完稿。首先,這里記錄的諸多技術(shù)問(wèn)題都曾經(jīng)啟發(fā)過(guò)我自己,那么它們一定也能啟發(fā)他人,必然會(huì)和一些心有戚戚的讀者引起共鳴。而另一方面,我不敢隨意對(duì)游戲開(kāi)發(fā),甚至軟件開(kāi)發(fā)中哪些方面更重要一些下出論斷。雖然我自己有自己的理解,但表現(xiàn)于具體的文章上,只好將自己覺(jué)得會(huì)非常重要的部分多寫(xiě)一些(因?yàn)樽约河X(jué)得這些重要,所以研究得也多一些),希望讀者讀到那些枝節(jié)要點(diǎn)卻沒(méi)有點(diǎn)明的時(shí)候,能夠理解我的用意。其次,所有的基礎(chǔ)知識(shí)都有前人留下的教導(dǎo),和讀者分享自己是怎樣學(xué)到的足矣。授人以魚(yú),三餐之需;授人以漁,終生之用。大多數(shù)問(wèn)題,如果把別的書(shū)中的章節(jié)生搬硬套過(guò)來(lái),則是對(duì)我自己的精力和讀者的時(shí)間的極大浪費(fèi)。不以自己懂了什么就寫(xiě)出來(lái)給讀者炫耀一番,是我后期刪改書(shū)稿的重要原則。終其整本書(shū),雖然參考之書(shū)籍、網(wǎng)站、代碼眾多,但我自己都一直堅(jiān)持一個(gè)原則:建立在充分理解的基礎(chǔ)上,再用自己的語(yǔ)言表達(dá)出來(lái)。我相信只有這樣,讀者才能夠看到一個(gè)從獨(dú)立思考角度獲得的知識(shí)體系,凌亂中不失一縷聯(lián)系。這樣也帶來(lái)許多遺憾。因?yàn)檫€有一些內(nèi)容我在原計(jì)劃里是想寫(xiě)的,它們對(duì)游戲軟件的編寫(xiě)也是至關(guān)重要的,比如設(shè)計(jì)模式??上以趧?dòng)手的時(shí)候,發(fā)現(xiàn)自己這些方面的修養(yǎng)在項(xiàng)目中用用還可以,離著書(shū)立說(shuō)卻差得很遠(yuǎn),只好放棄。曾經(jīng)年少輕狂。但隨著時(shí)間推移,越發(fā)發(fā)現(xiàn)自己所知所見(jiàn),只是滄海一粟。學(xué)得越多,越是不敢輕言所知。所以,希望讀者相信,我是非常謹(jǐn)慎地來(lái)完成自己的第一本書(shū)的。孔子說(shuō)過(guò),無(wú)友不如己者。我真誠(chéng)地尊重所有對(duì)本書(shū)提出批評(píng)的朋友??梢匀ノ业膫€(gè)人主頁(yè)(http://www.codingnow.com)留言發(fā)表你的看法,或給我發(fā)E-mail:cloudwu(a)gmail.com,我個(gè)人更傾向電子郵件這種交流方式。希望聽(tīng)到大家的聲音。寫(xiě)書(shū)這件事情終歸是告一段落了,我也將把精力投入到自己新的事業(yè)中去,或者很久都不可能再以這種形式將自己的技術(shù)人生做一個(gè)總結(jié)。身處當(dāng)今熱門(mén)行業(yè)中,可謂衣食無(wú)憂,而在國(guó)內(nèi)的游戲制作圈子里混跡多年,業(yè)內(nèi)也小有名氣。而這些并非我去追求的,它們自然而生。這本書(shū)也一樣,我沒(méi)有刻意去追求表達(dá)些什么,也從沒(méi)有想過(guò)本書(shū)會(huì)給我?guī)?lái)些什么。我現(xiàn)在是中國(guó)并不成熟的游戲制作行業(yè)中的一員,游戲給了我太多,我告訴自己需要做一點(diǎn)事情。分享知識(shí)和經(jīng)驗(yàn)是我的義務(wù),別無(wú)它。云風(fēng)2005年5月23日晚于廣州

作者簡(jiǎn)介

  云風(fēng),時(shí)年二十七歲。自幼學(xué)習(xí)編程,十?dāng)?shù)年從未間斷,對(duì)程序設(shè)計(jì)有所領(lǐng)悟。大學(xué)時(shí)代開(kāi)發(fā)的游戲圖像引擎“風(fēng)魂”曾用于多家游戲公司的游戲項(xiàng)目。參與過(guò)《大話西游》系列、《夢(mèng)幻西游》、《網(wǎng)易泡泡游戲》的開(kāi)發(fā)。現(xiàn)從事新一代網(wǎng)絡(luò)游戲引擎的研究與開(kāi)發(fā),并在游戲模式上做一些新的嘗試。性格開(kāi)朗,興趣廣泛,好交友,絕非沉浸在計(jì)算機(jī)世界中的書(shū)呆子。國(guó)學(xué)、歷史書(shū)籍常備案頭,以先賢之教誨修其心;休息時(shí)常作戶外運(yùn)動(dòng),尤其喜愛(ài)攀巖。

圖書(shū)目錄

第1章  計(jì)算機(jī),游戲,我    1
1.1  計(jì)算機(jī)    2
1.2  計(jì)算機(jī)游戲    3
1.3  計(jì)算機(jī)與我    7
1.3.1  啟蒙    7
1.3.2  編程    9
第2章  算法,程序的靈魂    13
2.1  程序=算法+數(shù)據(jù)結(jié)構(gòu)    14
2.1.1  算法    15
2.1.2  數(shù)據(jù)結(jié)構(gòu)    17
2.2  搜索算法    23
2.2.1  地圖尋路問(wèn)題    23
2.2.2  博弈問(wèn)題    27
2.2.3  更為廣泛的運(yùn)用    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  人工神經(jīng)網(wǎng)絡(luò)
(Artificial Neural Network)    34
2.4  優(yōu)化    36
2.4.1  質(zhì)數(shù)問(wèn)題    36
1.4.2  俄羅斯方塊競(jìng)賽    37
2.5  Apple II上的編程之路    39
第3章  編程語(yǔ)言    45
3.1  C 語(yǔ)言    46
3.2  BASIC    50
3.3  C++    51
3.4  匯編語(yǔ)言    54
3.4.1  概述    55
3.4.2  程序的本質(zhì)    57
3.4.3  寄存器    58
3.4.4  尋址方式    60
3.4.5  匯編指令    61
3.4.6  C/C++ 語(yǔ)言和匯編    62
3.4.7  小結(jié)    63
3.5  其他語(yǔ)言    63
3.5.1  Forth    63
3.5.2  Lisp    64
3.5.3  Java    64
3.5.4  Python、Lua、更多    65
第4章  前Windows 時(shí)代    67
4.1  386保護(hù)模式    68
4.2  VGA 到VESA    70
4.2.1  超越 BGI    70
4.2.2  VGA    72
4.2.3  VESA 標(biāo)準(zhǔn)    72
4.2.4  花絮    74
4.3  保護(hù)模式下的開(kāi)發(fā)工具    75
4.4  閑話 Allegro    81
4.4.1  用C與匯編寫(xiě)成的程序庫(kù)    81
4.4.2  BITMAP    82
4.4.3  Sprite    85
4.4.4  幾何圖形和 3D    89
4.4.5  數(shù)據(jù)文件    91
4.4.6  聲音    92
4.4.7  其他的部分    93
4.4.8  小結(jié)    94
4.5  cfido 中國(guó)惠多網(wǎng)    94
第5章  Windows 編程    101
5.1  Windows編程入門(mén)    104
5.1.1  Windows版本綜述    105
5.1.2  操作系統(tǒng)的核心    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  小結(jié)    132
第6章  匯編優(yōu)化    135
6.1  淺談代碼優(yōu)化    138
6.2  并不僅僅是匯編    139
6.2.1  在算法實(shí)現(xiàn)時(shí)減少上下文的依賴關(guān)系    139
6.2.2  低效的靜態(tài)變量    140
6.2.3  數(shù)據(jù)的組織    141
6.2.4  消除除法    142
6.2.5  避免過(guò)大的循環(huán)    144
6.3  匯編和C/C++的混合編程    146
6.3.1  使用外置的匯編編譯器    146
6.3.2  使用內(nèi)嵌匯編    148
6.3.3  C++的函數(shù)調(diào)用規(guī)則    150
6.3.4  寄存器的使用    152
6.3.5  _declspec(naked)    152
6.4  指令使用的技巧    153
6.4.1  LEA:別樣的內(nèi)存尋址指令    153
6.4.2  BSWAP:擴(kuò)展寄存器的個(gè)數(shù)    154
6.4.3  縮短指令的字節(jié)數(shù)    155
6.4.4  避免跳轉(zhuǎn)指令    159
6.5  Pentium 的匯編優(yōu)化策略    161
6.5.1  UV流水線    163
6.5.2  AGI地址生成互鎖
(Address Generation Interlock)    167
6.5.3  Pentium Pro,Pentium II和Pentium III
的匯編優(yōu)化策略    168
6.5.4  Pentium 4的匯編優(yōu)化策略    178
6.5.5  如何測(cè)試代碼的速度    181
6.5.6  匯編能干的事情    183
第7章  SIMD 指令    185
7.1  單指令多數(shù)據(jù)編程    186
7.1.1  Alpha 混合    187
7.2  MMX    191
7.2.1  MMX的指令概況    192
7.2.2  SSE及其對(duì)MMX的擴(kuò)展    194
7.2.3  SIMD技術(shù)在C語(yǔ)言環(huán)境下的使用    196
7.2.4  MMX 編碼技巧    197
7.2.5  SIMD 的應(yīng)用舉例    201
7.2.6  SIMD編程注意要點(diǎn)    203
7.2.7  SIMD的性能檢測(cè)    204
第8章  引擎中的優(yōu)化    205
8.1  Blit的優(yōu)化    207
8.2  臟矩形優(yōu)化    209
8.2.1  “風(fēng)魂”中改進(jìn)的臟矩形算法    215
8.2.2  滾動(dòng)優(yōu)化    219
8.2.3  覆蓋優(yōu)化    222
8.2.4  臟矩形在3D游戲界面中的運(yùn)用    224
8.2.5  時(shí)間和空間的權(quán)衡    229
8.2.6  關(guān)于估算    230
8.3  自己設(shè)計(jì)精靈格式    231
8.4  動(dòng)態(tài)數(shù)據(jù)加載    234
8.5  小結(jié)    236
第9章  C 和 C++    237
9.1  從C到C++    239
9.2  C vs C++,效率至上    243
9.2.1  全局變量    243
9.2.2  函數(shù)調(diào)用的堆棧處理    243
9.2.3  函數(shù)調(diào)用的參數(shù)傳遞    244
9.2.4  臨時(shí)變量的堆棧使用    244
9.2.5  代碼生成    244
9.2.6  異常    244
9.2.7  inline    245
9.2.8  多態(tài)性    245
9.2.9  標(biāo)準(zhǔn)庫(kù)的差異    245
9.2.10  動(dòng)態(tài)內(nèi)存分配    245
9.3  優(yōu)雅的C++    246
9.3.1  消失了的宏    247
9.3.2  const修飾及類型轉(zhuǎn)換    248
9.3.3  隱藏實(shí)現(xiàn)    248
9.3.4  引用而非指針    250
9.3.5  名字空間    250
9.4  C++ 的誤區(qū)    251
9.4.1  類層次過(guò)細(xì)    251
9.4.2  濫用操作符重載    252
9.4.3  濫用標(biāo)準(zhǔn)容器    253
9.4.4  濫用動(dòng)態(tài)類型識(shí)別和異常    253
9.4.5  濫用多重繼承    254
9.4.6  忽視C++高級(jí)特性的復(fù)雜度    255
9.4.7  學(xué)習(xí)C++    256
9.5  動(dòng)態(tài)內(nèi)存分配的優(yōu)化    257
9.5.1  另一種優(yōu)化策略:多次分配,一次釋放    266
9.5.2  垃圾回收    268
9.5.3  再論動(dòng)態(tài)內(nèi)存分配    269
9.6  template    272
9.6.1  封裝C++的成員函數(shù)調(diào)用    272
9.6.2  常數(shù)數(shù)量的對(duì)象復(fù)制    274
9.6.3  對(duì)象計(jì)數(shù)    275
9.6.4  避免重復(fù)代碼    277
9.6.5  選擇最佳的容器    279
9.6.6  延遲運(yùn)算    281
9.6.7  編譯時(shí)計(jì)算的游戲    283
9.7  小結(jié)    286
第10章  調(diào)試    287
10.1  assert及程序錯(cuò)誤的提前發(fā)現(xiàn)    288
10.1.1  崩潰的程序不說(shuō)謊    289
10.1.2  為軟件維護(hù)多個(gè)版本    291
10.1.3  前置條件和后置條件    292
10.1.4  自己實(shí)現(xiàn)一個(gè)assert    292
10.1.5  不正確的assert使用    293
10.1.6  為assert分級(jí)    294
10.1.7  assert的引申:檢查函數(shù)返回值    295
10.1.8  釋放的指針需要置空嗎    297
10.2  讓程序更利于調(diào)試    298
10.2.1  錄像    299
10.2.2  實(shí)現(xiàn)一個(gè)log類    300
10.2.3  跟蹤代碼運(yùn)行的流程    302
10.2.4  為內(nèi)存分配加上一個(gè)殼    302
10.3  RELEASE版本的調(diào)試    310
10.4  小結(jié)    311
第11章  腳本    313
11.1  為什么需要腳本    314
11.2  應(yīng)該用腳本做些什么    316
11.3  腳本不應(yīng)該做什么    318
11.4  如何嵌入腳本語(yǔ)言    319
11.5  選擇一種腳本語(yǔ)言    321
11.6  實(shí)戰(zhàn)嵌入式腳本Lua 5    324
11.6.1  嵌入Lua    324
11.6.2  使用coroutine驅(qū)動(dòng)游戲邏輯    326
11.6.3  封裝C++中的對(duì)象    328
11.6.4  回調(diào)機(jī)制    336
11.7  反外掛技術(shù)    338
11.7.1  防止加速器    338
11.7.2  防止分析偽造網(wǎng)絡(luò)包    339
11.7.3  防止逆向工程    341
11.7.4  防止代碼鉤子    344
11.7.5  懲戒外掛作弊者    344
11.7.6  安全地將信息傳遞給服務(wù)器    345
11.7.7  防止模擬輸入    346
第12章  版本控制    349
12.1  常用版本控制軟件    351
12.2  版本控制工具在項(xiàng)目中的使用    355
12.3  不僅僅是程序才需要    358
第13章  開(kāi)發(fā)方法    361
13.1  失敗的經(jīng)驗(yàn)    363
13.2  成功的經(jīng)驗(yàn)    365
13.3  對(duì)游戲開(kāi)發(fā)方法的一些思考    369
第14章  編程和游戲    373
14.1  操作    376
14.2  角色設(shè)定    378
14.3  再談技術(shù)    379
14.4  淺談網(wǎng)絡(luò)游戲    381
14.5  小結(jié)    382
后記    383
致謝    385

本目錄推薦

掃描二維碼
Copyright ? 讀書(shū)網(wǎng) www.afriseller.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)