看板 GameDesign 關於我們 聯絡資訊
這篇就當做是自我介紹之一,順便也說明一下我自學程式語言的過程,好讓想自學的人, 能夠參考看看。 在國一的某一天,我哥弄了一套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來當腳本的直譯器,重新開發一個直譯器的時間就整個省下來了,而且這些 套件大多都經過很多人使用過,並且更新,因此穩定性和效能來講,常常會比自己寫的來 的好(不過呢= =",人總是犯賤,有時不知道為什麼就比較喜歡自己寫),因此,上面這些 東西有時不一定要學,可以直接使用別人的套件,底層的東西就可以不用學了。 以上,是我自己小小的一點看法,如果覺得有問題請提出來指正,我有想到更多的話,會 再補上來的。 -- VICTOR工作室 URL : http://www.kinmen.info/vic/ C/C++ Visual Basic 6.0 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.116.66.211