我6個月的學習編程經歷:從”大齒怪“到“狂歡者”

轉自http://www.aqee.net/first-six-months/  未經對方許可

我是菜鳥

幾乎剛好是6個月前,我決定開始從事一項新的職業。2010年10月之前,我從未接觸過編程。要說有,那也只是在6年級時學過了大概一週的非常基 本、基本、基本的編程知識。就這些。我不知會學成什麼樣。2010年10月9日我在微博上寫道:“我究竟想幹嗎?我決定學習編程,我沒有任何的基礎。唉, 兄弟們,我有些擔心。”這是一段生涯的開始,我很高興能走上這條路。我不會回頭。

開端

我將只快速簡單的給你們講一下我前幾個月的學習過程,因爲這段時間非常的枯燥。我從Invent with Python這本書開始,這是一本對新手來說非常不錯的教程。爲了讓你們知道它是如何的初級,我向你們展示這本書裏的一段話:

+ 這個符號是來告訴計算機把2和2相加。做減法用這個符號 -,做乘法用星號(*)。

在我學會了一些非常基本的知識後,我隨意的做了很多文本形式的小遊戲,比如劊子手,jotto,猜數字。我的第一個比較大一點的小玩意叫做“大齒怪”。這個遊戲的情景是關於一個大齒怪(就把它想成一個怪物吧),禍害村裏。它藏在什麼地方,你需要去猜它在哪:

也就是在此時我收到了我的第一張珍貴的粉絲畫的作品。我把這個遊戲發佈在了Reddit上,Michael Hussinger爲它製作了這張令人驚歎的封面畫:

接下來,我轉移到了我的第一個半圖形遊戲:”掃雷“。在此時我纔開始真正的理解構造一個靈活的遊戲引擎有多麼的重要(沒錯,就像我開發的這個遊戲引 擎)。這個遊戲仍然是文本形式的,但已經有相當的靈活度了,在這個遊戲裏,我可以指定佈景的大小和地雷的數量。這樣一來遊戲就可以從頭再玩,你可以把地雷 數量設置很小而很快能看到遊戲的結果,這樣有趣多了。下面就是這個遊戲:

歡迎使用蘋果iOS

此時,我已經感覺到應該轉向真正的圖形遊戲了。我感覺陷入了僵局。我根本不知道從哪裏入手。我研究了一下SDL,這個東西超過了我的接受能力,我很快放棄了。因爲我知道最終我想做iPhone應用程序,我請教了Matt Rix (Trainyard),他給了我一些很好的建議。他建議我從學C語言開始,然後學Objective-C,然後Cocos2d。今天說起這些我很快高興,這三種語言我都學會了,雖然很基礎。

在學習C和Obj-C時,我遇到的大量的挫折,我沒有做出多少遊戲。很多次,我真的懷疑是否能渡過難關、找到出路。很多東西當我第一次看到時愁得我撓掉了很多頭髮:結構體,數組,多維數組,屬性,表現層,控制層,協議和代理,內存管理,還有很多。很多東西我目前仍然無法理解領會。但是我堅持繼續下去,我對很多人都說:讓自己進步的唯一方法就是不斷的做遊戲。我十分清楚,想成爲鋼琴家,練習時根本,所以,這也是我需要的(我就持續這樣下去)。

歡迎使用Cocos2d

一旦我最終把iPhone應用的基本知識攻克下,我立即開始研究Cocos2d。我很緊張,也很興奮。現在,我不知道自己是太挑剔還是太笨,我感覺 Cocos2d的文檔寫的不太好。所有的類,方法,屬性都列出來了,但卻很難讓人讀懂,它們解釋的不太清楚。一個例子:每個”node“(Cocos2d 的主要元素)都有一個”(BOOL) isRunning“屬性。看起來非常的簡單,但它似乎能夠表示任何意思。所有的文檔對這個屬性的解釋都是:”標誌這個node是否在運行。嗯,ok … 不用說,Cocos2d裏面有很多東西我都十分的困惑。

儘管這些的不滿,我還是非常喜歡Cocos2d。一旦掌握了一些基本知識,我就開始研究它如何能夠容易的做出一個簡單遊戲,讓它馬上能跑起來。我已經知道了如何做音樂和聲效,我還知道一些Photoshop,我就真的開始要讓它輸出一些很酷的結果了。起初我對Cocos2d很困惑,我從Ray Wenderlich的一些非常棒的教材開始學習。

我開發的各種暫且算是遊戲的遊戲

下面的是我的第一個Cocos2d遊戲,它是我直接按照Ray的教材開發出來的(我在裏面還加上了我的音樂和當一個敵人被消滅時的很傻的音效!):

接着,我仿製了一個Pong。這個遊戲還可以多人蔘與!:

Pong之後,我受到了鼓舞,決定開發Tetris。這是個巨大的錯誤。我根本沒有準備好。我遇到了各種讓人懊惱的錯誤和問題,當我最終把框架搭起來後,我在微博上寫了這樣的話:“我很驕傲。我爲我的Tetris仿品開發了一個真正複雜的類/子類系統。”Noel Llopis很快的告訴我,說我的決定十分的錯誤。我搜集了一些教材,試圖好好的修改一下這個仿Tetris遊戲,但太困難了。我決定放棄,但有一天我會打敗你的,Tetris!

這次Tetris失敗的嘗試之後,我受Tilt to Live的啓發做了一個遊戲初始原型,我計劃在這個遊戲裏,你需要去收集紅點來獲取積分,而不是像其它遊戲裏去避開它們。現在做的這個裏面並沒有加入真正的遊戲裏面會有的音樂:

學習了更多的Cocos2d之後,我突然來了靈感要做一個循環的褶皺紙樣式的背景。於是把一張紙做出褶皺型,以循環方式填充背景。然後我在上面放了 一個小圓片,你可以用加速器讓它在上面滾動。當我弄明白如何讓這個小圓片滾動後,我爲自己能做出這個東西很自豪,因爲這牽涉的一些數學知識,我並沒有用很 久的時間就把它能明白了(儘管只是一個很簡單的幾何問題)。背景很難看 —— 但很好用:

接着,當我看到了即將發佈的遊戲Bumpy Road的令人驚訝的海報後,我受啓發,心想是否能夠也做一個跟裏面的高高低低的路面相似風格的遊戲元素。很顯然,我的做圖水平很有限,你可以比較一下。

Bumpy Road:

我的版本:

這之後,我想在真正的動畫上試試身手。以前從沒有做過動畫,先在Photoshop試試。人物的製作很乏味冗長。即使是畫一條很傻很短的線條也很費 勁。但我還是完成了,我把他稱作“狂歡者”。他能做的就是一遍遍的張開和閉上他的大嘴,每次都隨機的發出一些哼哼聲。你還可以在屏幕上移動他。背景閃動不 同的顏色。當你觸碰屏幕時,他只能哼哼和張嘴:

然而,“狂歡者”有了一小隊粉絲。這些粉絲的頭像圖標裏包括Mario, Link, Samus,等等。事實上我把這個遊戲發給了Touch Arcade的Jared(嘿,是他向我要的)。之後,讓我大喫一驚和無比高興的是,Retro DreamerCraig Sharpe創作了我的第二張正規的粉絲的藝術作品!下面就是Craig爲“狂歡者”創作的傑作:

他的作品是如此的優秀,我甚至把它放入了我的下一個遊戲裏。但起初,我突發奇想,要做一個跳杆子的遊戲。起初的出發點只是爲了使用一個簡單的遊戲技 術測試一下視差背景的效果,但做下來就做成了這個遊戲。最終的遊戲有一個小屏幕,有記分功能,有重玩功能,有音樂、音效,各種跳躍高杆,有一個高度指示 器,甚至還有一個鳴謝頁面!它是我的功能最全的一個遊戲。我在遊戲裏畫了一些非常醜陋的精靈,就像你下面看到的:

因爲畫的太差,我詢問Michael Hussinger是否願意爲我做一些簡單的修改,他同意了!他在二十分鐘內就畫出來一個讓人驚歎的匹薩夥計。我估計花幾個小時也畫不出這麼好的作品來。他還爲遊戲中的視差效果畫了一個漂亮的山作爲背景。下面的就是在他的幫助下游戲的樣子,我加上了標題和鳴謝頁:

遊戲運行中!

我的下一個遊戲受Trainyard的啓發。我想看看是否能做出 一個地圖,上面畫些網格道路,卡車能跑在上面。看看,製作“狂歡者”有了很好的回報。所以我稱這個爲“狂歡大巴”。遊戲的玩法就是點擊地圖上的一個地方就 設定一個聚會點(一個閃爍的,顏色變換的點,伴有音樂),然後圖上會畫出一條路,通向這個點,“狂歡者”會把他的“狂歡大巴”開到那裏。不用說,這是一個 非常簡單的遊戲。但裏面很酷的東西是,當他到達目標地點後,音樂聲會變大,卡車會開始跳舞,Craig畫的作品會出現在開車上面左右搖擺!

代碼寫的很亂,有很多問題。我讓弟弟試玩了一下,他式了三次,什麼都沒幹成,他總是每次都是在錯誤的時間點擊到錯誤的地方,這樣遊戲根本就不能正常 玩下去。每次我都要從頭開始玩這個遊戲,因爲我沒有給它加入“重新開始”的功能。但我還是挺爲這個Trainyard的複製品感到自豪的。Matt應該爲 此感謝我。

我的下一個項目是要做一條蛇。我發現了這個如何用flash做出一條蛇的教程, 我只需要把它移植到iPhone上。這個教材讓我明白了很多如何做這種遊戲的內幕。之前,我計劃讓蛇每一幀移動一次,但在如何讓蛇尾和蛇身保持一致的問題 上遇到了很多的麻煩。我本打算建一個數組存所有歷史動作,蛇尾將按照這個數組裏的信息做它的每個動作,但這樣一來它動的太快,讓人很不舒服。這個教程整個 顛倒了我的思維,我意識到蛇其實根本沒有動。這種看起來在移動的視覺效果其實是簡單的在幀上添加和移去一小段蛇身產生的。這樣,當你撿起一 個蘋果,所需要做的只是告訴程序不要刪除任何片段。事實上我需要重新寫這個程序,因爲界面太難看了,控制的也不好。因爲我是移植過來的,代碼寫的很亂。但 事實上作爲一個基本的遊戲來,它還是很不錯的!

在完成這條蛇之後,我打算製作“狂歡大巴2”:“狂歡者”的週末狂歡。我把上一版升級了一些。我在裏面加入了一些Trainyard裏面的速度條, 一個車站,車可以從裏面開車,一些聲音特效(當他被碰着時會出現很大的汽車相撞的聲音,而且會喊出“今天沒有活動!”),程序也整理的更整潔了。但沒多 久,程序又開始變亂,當我要糾正一個問題時,另外一個東西又出現了問題。最大的問題是當我把速度設成最大時,卡車會在路上某個點崩潰。這是因爲更新調用的 太頻繁,程序來不及在下一次調用前更新完。儘管我知道這個問題的原因,如想修復這個問題需要重做大量的東西。我想我需要升級到“狂歡大巴3”:最後的狂 歡。

我最近的目標是重做Doodle Jump。目前爲止一切進展順利。裏面很多小平臺,移動速度會約來越快,一個會跳的小人,一些其它物品(目前爲止只有一個彈簧),自定義音樂和聲效,以及完全從原作裏拷貝的背景。目前爲止我對做出的東西很高興。我會繼續往裏面增加很多的東西。

結論

練習給人帶來的進步是驚人的。每次當寫出一個新程序,我都會遇到大量的無法預知的問題和bug。當遇到挫折時,我一般是將問題移到下一次升級時解決。這讓我感覺自己就在走一個while循環:

while (編程技術仍然很糟) {
      練習時間++;
      程序 * 新程序 = [程序 程序類型:遊戲];
      if (新程序.做的很好嗎 == 是的 && 練習時間 >= 大量) {
          編程技術仍然很糟 = 否;
      }
  }

我會一直這樣製作下去,一轉眼就到現在了,我幾乎等不及想知道再6個月後會是什麼樣。請下次當我來述說如何給Casey’s Contraptions製作音樂(和一些聲音)時,請記住一定來看看!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章