1. 程式人生 > >從C++到Python,一個遊戲程序員的進階之路

從C++到Python,一個遊戲程序員的進階之路

分享圖片 國內 視頻資料 51cto 答疑 甚至有 帶來 一點 技術

我的第一份工作是一加國內知名遊戲公司的邏輯程序員,必須技能是C++,但是一開始只是寫語法和C++很類似的一種腳本(後來知道是從一個開源腳本引擎AngelScript修改而成的)。學習遊戲開發的流程,填數據,用腳本定制各種任務、副本等等。第一年還很有興致,第二年開始就意興闌珊了。

技術分享圖片

後來熟悉了整個系統,介入到C++部分的代碼裏。涉及到道具、任務等等邏輯。那時候覺得最難的部分,是UI系統。當時的UI系統,是用XML拼出界面,然後用類似C++的那種腳本來給它寫邏輯。從一開始被迫學習,到最後使用的時候遇到各種問題,前後折騰了很久。

寫程序的熱情,在實際工作中被一點點的磨滅。我想,很可能許許多多的程序員,都會遇到和我一樣的問題。因為愛好而走上這條路,卻被瑣碎的工作磨滅了最初的沖動。等到我成為一個獨當一面的程序員的時候,我甚至有一種感覺,覺得自己似乎什麽都會,但是除了項目任務以外的東西,什麽都做不出來。相比高中時候的自己,甚至有一些退步。

直到有一天,我看了一本書《***與畫家》。

技術分享圖片

在你迷茫的時候,多吸收一些各方面的知識,偶爾會突然打開一扇窗。

《***與畫家》滿本書都透著濃濃的技術自信,和充足的技術底蘊。它就像是一個知識豐富的技術高手,迫不及待的將平生經驗一股腦傳授給你,為你指明發展的方向。

它的字裏行間透露著對傳統編程語言的鄙夷和對LISP的崇敬。它認為精巧的語言,加上聰明程序員實現的高度抽象代碼,會帶來極大的生產力提升,讓開發更快、BUG更少,讓一兩個開發人員也能撐起一個具有巨大經濟效益的網站。

在Web界已經是遍地動態語言的今天,《***與畫家》裏的判斷似乎已經沒什麽好討論的了(現在動態語言在很多領域已經成為了主流,和作者當年的情況已經有了天壤之別)。但對於當時的我來說,就是大海裏的一盞明燈。

雖然書裏對Python(作者當年還是1.x版本)的看法很具有批判性,但是由於那時Python 2.x已經有了長足的發展,加上一個同事的推薦,我全身心投入到了Python的學習之中。

在寫了一些小練習程序之後,我在工作中找到了一個Python的用武之地——用Python實現一個數據表格分析程序,並檢查表格中的數據錯誤、邏輯錯誤。這種表格處理工具在遊戲中具有很大的作用,而且非常適合用腳本來靈活的擴展功能。

第一個實現的簡單版本,使用起來大概是這樣:

技術分享圖片

這個代碼主要問題在哪呢?在於讀取數據時,程序員自己要指定數據的類型。get_int,get_str,get_float等等等等。

很不幸而又幸運的,當時我用某某雲盤保存自己的代碼,有一次誤同步,導致在公司寫的很多代碼,在家裏操作時覆蓋了。迫使我重寫幾乎整個程序。這次,在同事的參謀下,我實現了這種用法:

技術分享圖片

這段代碼實現的功能與上面的完全一樣,但是有兩點變化:

1、用下標操作符代替了get_xxx函數調用,更簡潔。

2、讀取時不需要指定類型,執行時,data1自然是整型,data2自然是字符串。

這種實現,對於當時的我來說,是一個理念上的重大突破!

為什麽這麽說呢?因為強類型的問題。在Python中,我用一些很簡單的處理,讓mb庫的底層自然的處理了類型。而你知道嗎?在C++中,做到這點難如登天!

C++常常為了推斷一個類型,不惜使用模版技巧,寫出天書一般的代碼。而且,結果上,仍然不能做到動態語言的這種用法。也就是說,顯式強類型特性,並不僅僅是約束程序員減少BUG的工具,它同時也是實現高抽象系統的一個束縛。這是個很有意思的事情,對我當時的觸動很大。不知讀者能否理解。

到了寫出這個表格分析庫之後,我生命中的一扇門打開了。

我回到了可以自由寫代碼的時代,就像是我的高中時代,而且比那個時代更為簡潔,充滿了更多的可能。

我可以任意的寫代碼,幾行代碼就能實現對樹的操作、復雜的嵌套字典。我仿佛可以操作任意復雜的數據結構,或者復雜的遞歸,只要我想清楚了,根本不需要多少編碼時間。

這裏推薦一下我的:Python學習交流q-u-n【 784758214 】內有安裝包和學習視頻資料,零基礎,進階,,大牛在線解答疑問。希望可以幫助你快速了解Python、學習python

技術分享圖片

從C++到Python,一個遊戲程序員的進階之路