在Warsztat(一個(gè)波蘭的游戲開發(fā)組織)工作的幾年中,我發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象,
二小時(shí)與四周時(shí)間在編程上的差別
。經(jīng)常我們會(huì)組織一些編程競(jìng)賽,這些競(jìng)賽通常分為兩種形式。一種是個(gè)人行動(dòng),一般只有2個(gè)小時(shí)的時(shí)間,另外一種是長(zhǎng)時(shí)間的(數(shù)天/周)。作為一個(gè)額外的要求,前者通常限制只允許使用基本的API(SDL, OpenGL等),而后者通常沒有限制(可以使用各種引擎,UDK/Unity等)。結(jié)果有點(diǎn)讓人吃驚。很多人更愿意參加短競(jìng)賽。但不管游戲是在2個(gè)小時(shí)里開發(fā)出來的,還是在4周內(nèi)開發(fā)出來的,它們中優(yōu)秀的部分的在水平上一樣的。為什么?
4周的開發(fā)期并不意味著開發(fā)的時(shí)間是672或224小時(shí)。在一些極端的情況在,4周的競(jìng)賽跟2個(gè)小時(shí)的競(jìng)賽一樣,也就是這4周的最后2個(gè)小時(shí)在起作用。
很多的游戲體現(xiàn)出來的實(shí)際是一個(gè)創(chuàng)意。事實(shí)上:你4周內(nèi)想出來的創(chuàng)意未必就比10分鐘內(nèi)想出的好。
2小時(shí)競(jìng)賽的開發(fā)過程壓力強(qiáng)度非常的大。大部分的時(shí)間都是用來改進(jìn)核心功能(因?yàn)橐矝]有其它的)。
另一方面,在長(zhǎng)周期競(jìng)賽項(xiàng)目里,人們最初只是關(guān)注一些無關(guān)緊要的功能。一旦你開始琢磨著添加一個(gè)界面組件,把它做成一個(gè)內(nèi)置的MP3播放器,或把界面弄的色彩斑斕,你的項(xiàng)目就開始失敗了。
這也許是我們得到的最重要的教訓(xùn)。如果你需要很快的完成某項(xiàng)事情,代碼可能會(huì)寫的很差,但也會(huì)很短小、簡(jiǎn)練和靈活。如果沒有時(shí)間的約束,程序的復(fù)雜度,功能項(xiàng)和缺陷率會(huì)上一個(gè)等級(jí),
管理資料
《二小時(shí)與四周時(shí)間在編程上的差別》(http://www.msguai.com)。給日后維護(hù)帶來的工作量并不體現(xiàn)在現(xiàn)在。在4周的編程時(shí)間里,你可以進(jìn)行數(shù)次的快速迭代編程,每一次都對(duì)游戲的核心功能進(jìn)行改進(jìn)。但如果一開始你就把一些以后未知的特征功能考慮進(jìn)去,寫這部分功能以及修改bug會(huì)耗去大部分的時(shí)間。誠(chéng)然,你可以用這4周時(shí)間寫出大量的assets測(cè)試,但核心的游戲娛樂方式設(shè)計(jì)的足夠好嗎?
最后,給你們一個(gè)絕對(duì)有價(jià)值的C(++)忠告:當(dāng)增加新功能時(shí),從最小的核心功能開始:
全局函數(shù) — 如果你需要去顯示分?jǐn)?shù),不要猶豫,立即寫出void DisplayScore()。如果你的游戲是單人玩的,把分?jǐn)?shù)存成全局變量?纯,你至少節(jié)省了10分鐘的寫getter、setter和設(shè)計(jì)給模塊通信的時(shí)間。不需要做這些。如果游戲是多人玩的,你需要為每個(gè)人記錄和顯示分?jǐn)?shù)。但如果你的游戲不是多人玩的,你沒有任何理由實(shí)現(xiàn)能顯示任意多人的任意分?jǐn)?shù)的功能。相信我,你將會(huì)遇到比顯示分?jǐn)?shù)復(fù)雜的多的多的問題。
如果你的函數(shù)需要用到共用代碼或需要輔助函數(shù),請(qǐng)把它們組織到一起,最好是放在一個(gè)單獨(dú)的文件里。時(shí)刻想著靜態(tài)函數(shù)和變量 — 跟“OO”的靜態(tài)相反,文件的靜態(tài)是可見的。這樣做很好,因?yàn)槟憧梢园阉懈煮w相關(guān)的操作都放在一個(gè)文件里,把把所有內(nèi)部數(shù)據(jù)都放在靜態(tài)全局變量里。輔助函數(shù)可以做成靜態(tài)的,通過共享的header對(duì)外開放(如果你寫出簡(jiǎn)單的代碼,整理工作從來不會(huì)耗費(fèi)你太多的時(shí)間)。
只有在必要的時(shí)候才把函數(shù)提升為類。記著,類意味著對(duì)象,對(duì)象意味這相互關(guān)系,而相互關(guān)系意味這復(fù)雜。你的游戲設(shè)計(jì)會(huì)酷到留有大量的時(shí)間處理代碼的復(fù)雜嗎?
只有當(dāng)上面說的這些不夠好,設(shè)計(jì)模式或其他新奇的東西才能成為你的求助目標(biāo)。永遠(yuǎn)不要走到這一步。