8月 18, 2008

【轉貼】遊戲程設之路

@
  這篇就當做是自我介紹之一,順便也說明一下我自學程式語言的過程,好讓想自學的人,能夠參考看看。

  在國一的某一天,我哥弄了一套 Visual Basic 6.0 回來,他說他想學,但是過不了多久,他在經過幾次的失敗之後就放棄了,於是被我撿來學,一開始,什麼都不懂,在上網找了 VB 研究小站之類的網站來參考,終於寫出自己的第一個程式,一個簡單的比大小程式,那種正常運作的感動我到現在還記得,從此就走上了這條不歸路。

  國中的三年,上課時我都在睡覺,放學回到家就開始寫程式,寫到一兩點才睡覺,在這段時間,我常常忘記我到底吃飯了沒。到了國三,開始轉戰 C++,VB 相對於 C++,比較簡單,因此剛進入 C++ 會有些挫折,但是久了,也就習慣了 C++。

  在這段期間,我不停的想一些有的沒有的小東西來做,其中有小遊戲,有小程式,很多東西,雖然都在做到一半時,想到其它有的沒有的東西去做而終止,但是在每一個小題目當中都會學到一點點東西,就靠著網路買的書還有網路查資料以及問問題。

  其中,有一個構想我重寫了三次,第一次用 VB,第二、三次用 C++,因為,每當我停下來,過一陣子再回去想完成它,卻發現,這樣的架構,實在笨到不行,一些做法,也讓我自己覺得我當時為什麼會那麼做,而對於不好的架構而言,就像一條到處是洞的船,這邊有個洞補這裡,那邊有個洞補那裡,這些洞是補不完的,與其不停的補洞,不如重造一條,而每次重寫,雖然是一樣的東西,但是時間用得更短,程式碼也更精簡,架構也更完整,麼說,這樣就是有在進步。


  根據我的經驗,我整理出一開始自學程式語言的幾個要點。

一、越早學越好

  我的同學們聽到程式語言,都一直說多難多難,完全看不懂之類的,這是理所當然的事,就和英文一樣,當你沒學過英文,要你去看英文的文章,看不懂是正常的,而我們的英文在國中開始教,學到今天高三也有六年了,如果說,程式語言從國一開始學,學六年還學不到什麼東西,那我也不知道該說什麼,因此,越早學越好,學越久,經驗越豐富。

二、耐心與熱情

  耐心與熱情是必要的,很多時候,一個程式,裡面只有一個符號打錯,卻會造成莫明奇妙的錯誤,這時,請用你的耐心和熱情去找到這個錯誤,而當你找到這個錯誤並且修正後,以遊戲來看,你的經驗值就增加了,這就是升級的動力來源,一點一滴的經驗累積。

三、買正確的書

  學程式語言書是必要的,而書有分兩種,一種是工具書,一種是學習書,工具書第一次到手先大略的看一遍,有個印相記得哪些東西在哪裡,然後就丟在電腦旁邊,而當需要資料參考時,就依照印相去找出工具書來翻閱,至於學習書,是按照進度一步一步前進,而同樣的,在學完之後一樣也是放電腦旁邊,當有疑問時可以拿出來解惑,當然,如果買到爛書,可能會有不好的後果,所以買之前,可以上網問一下網友,哪些書是必買,那些不能買。

四、善用網路資源

  自從有了 Google 之後,很多東西都可以輕鬆的找到,舉個例子,cout 在 c++ 裡面到底是什麼,只要在 Google打 "Cout c++",就有一大堆的資料可以參考,因此,搜尋資料的能力,要好好陪養,思考應該用什麼關鍵字去搜尋,這是必須練習的,除了搜尋,發問也是一個很好的管道,然而,很多人常常都把發問當成順位第一的解決方法,這是錯誤的學習方法,因為,很多問題,已經被提出來討論過很多次了,因此,在 Google 或是討論版裡面都可以找到答案,比起問已經被討論多次的問題,搜尋所花的時間只有一點點,而發問卻要等別人回答,因此,請養成一個良好的習慣,先搜尋,真的很難找到答案,再發問,為什麼會有這種想法?原因很簡單,就是當我回答一些人的問題時,都是從 Google 找到資料的...,所以我想,即然我能在 Google 找到資料丟給他,為什麼不讓他自己去找呢?

五、基本的英文能力

  學程式語言,基本的英文能力是必要的,因為很多經典的書都只有英文版,而技術文件也通常都是英文的,例如 MSDN 就是用英文寫的,如果你連這個函數大概在幹麻的都看不懂,這樣在學習上會是很大的障礙。

六、基本的數學能力

  除了英文能力,數學對於程式語言也是很重要的,或許,你會覺得,我數學爛到暴一樣也可以寫好程式,事實的確是這樣沒錯,但是,就是有那麼可能 1% 不到的地方,需要一些數學底子,就拿 45 度視角的地圖引擎來說,如果你不會斜向座標系與直角座標互換,那麼,你滑鼠目前指的地圖座標,就沒有辦法判斷,其它方法是有,但是都沒有數學公式直接轉換來得快速,因此,基本的數學能力也是必須的。

七、演算法和資料結構

  當程式語言學習到一定程度時,演算法和資料結構是一定要學的,如果演算法和資料結構不學,在寫遊戲時,總是會用一些很暴力的笨方法去解決問題,對於注重流暢度的遊戲程式來說,這不是件什麼好事,而且當地圖需要最短路徑時,也需要演算法才能完成。


  除了程式語言一般的學習,當要用程式來寫遊戲,需要再另外學些東西,然而,如果以分工的角度來看,可以挑著學:

一、視窗程式設計

  可以挑一套自己喜歡的視窗程式設計方法去學,目前有很多種選擇,MFC、Win32SDK、BCB....,等等,在設計地圖編輯器等等之類的編輯器是一定要學的。

二、Winsock

  當你的遊戲不是一個人玩時,Winsock 就派上用場了,當然,DirectX 的連線方式也是另一個選擇,不過我個人比較喜歡 Winsock。

三、DirectX

  DirectX 幾乎是在 Windows 下寫遊戲必學,Direct Draw 和 Direct 3D 兩個是最重要的,一個負責 2D 一個負責 3D,然而,現在 2D 大多都已經由 3D 模擬,因此,我是認為可以直接學 Direct 3D 就好,而要處理到音效、影片,就輪到 Direct Sound 和 Direct Show 上場了。

四、人工智慧

  其實我一直覺得人工智慧這個名字取得不好,因為遊戲裡的"智慧",大多都只是照一定規則的行為而以,這個部份,也是專門的領域。

五、古典物理

  古典物理!?有沒有搞錯?是的,沒有搞錯,目前的遊戲很多都有很好的物理模擬,可以從物理模擬中,讓玩家感受的更真實的虛擬世界,如果物理沒有一點底子,就算是寫好的引擎可以使用,很多東西沒搞懂可能也不知道該怎麼用。

六、已經寫好的套件

  事實上,很多東西因為太常用,都已經有人寫成引擎供人使用,就拿魔獸世界來說,他們就用到了 Lua 來當腳本的直譯器,重新開發一個直譯器的時間就整個省下來了,而且這些套件大多都經過很多人使用過,並且更新,因此穩定性和效能來講,常常會比自己寫的來的好(不過呢,人總是犯賤,有時不知道為什麼就比較喜歡自己寫),因此,上面這些東西有時不一定要學,可以直接使用別人的套件,底層的東西就可以不用學了。


  以上,是我自己小小的一點看法,如果覺得有問題請提出來指正,我有想到更多的話,會再補上來的。


  作者:StubbornLin (Victor)
  出處:批踢踢實業坊(ptt.cc)
     GameDesign 精華區 - [程式] 遊戲程設之路

0 回覆:

張貼留言