每日最新頭條.有趣資訊

趕鴨子上架的遊戲與勉強跑起來的代碼

編者按:不久前,《骰子地下城》的作者特裡·卡瓦納特裡為了慶祝自己早年製作的一款遊戲:《彈彈跳跳閃避人(VVVVVV)》的十周年紀念日而開源了這款遊戲的代碼。外行人的角度看來,這意味著普通玩家也有機會得以一睹遊戲是如何創作出來的,因為遊戲的每一行代碼都如今都可以供人審閱。

翻譯:柳生非情劍編輯:酸菜魚

本文基於篝火營地與 Polygon 中華地區獨家授權協議,轉載請征得同意。

開源遊戲代碼的事情不常發生,隨著開源,人們能接觸到既有價值的信息,也可以通過這些資源從中學習,甚至還有人會對代碼進行優化。不過在一些人眼中,《彈彈跳跳閃避人》的源代碼有些可怕,批評者們認為遊戲的代碼本可以寫得更好。特裡似乎早就知道大家會有這樣的反應。他在宣布開源代碼的部落格中寫道:「在技術層面上看,《彈彈跳跳閃避人》算不上是一款製作精良的遊戲。甚至在那些半路出家的獨立開發者的眼中,這款遊戲看起來都寫得一團糟。」

對於代碼,人們總是誤以為這種東西天生就是優雅且精致的。畢竟,代碼是邏輯的體現,這方面的知識會催生一門叫「計算機科學」的學科,難道不正是因為如此嗎?但現實的情況往往比我們想象的要複雜得多,在遊戲的實際開發過程中,由於涉及到策劃、音效等多個不同的模塊,往往要等到開發階段大後期開發者才有機會對遊戲整體進行審視。

通常看到這種代碼被勉強的雜糅在一起,總體規劃很蠢、完全沒法優化且靠著一個接一個的權宜之計才跑通的遊戲時我們會用一個詞來形容,叫「趕鴨子上架」

遊戲開發者詹姆士·帕頓在推特上談到遊戲代碼時,如此寫道:「基本上我參與開發過的每款遊戲在最後階段都是這麽硬湊出來的,然後我們就只能祈禱這個隨時會崩潰的拚湊品能勉勉強強粘合在一起。」

基本上我問過的每一個遊戲開發者都說過類似的話。

遊戲開發者詹姆士·辛普森在往來的郵件中寫道:「遊戲不像尋常的軟體,必須要多個不同的模塊成功協同運作才能讓這個複雜的大項目跑起來,而很多時候因為時間有限,開發者必須要犧牲個人時間來換取成果。我知道很多開發者會使出渾身解數來寫出完美的代碼,但通過一些開源項目,我們能看到其實就算代碼不夠完美,你依然能讓項目跑起來。」

開源後的《彈彈跳跳閃避人》由於其無比混亂的代碼而引起了大量的討論。在遊戲中,玩家此刻是該看過場動畫、還是該進行對話?一般來說,此刻的遊戲代碼中會對這些情況做出判斷。通常這些功能性代碼會被分開寫在不同的地方,例如來實現跳躍功能的代碼會與實現小遊戲功能的代碼分開放置。但在《彈彈跳跳閃避人》中卻不是這樣的,特裡把十幾個決定遊戲狀態的代碼全部寫到了一起,這塊地方既有讓遊戲進入過場動畫的代碼,同時也夾雜著設定遊戲模式以及遊戲主菜單的代碼。

推文:遊戲《彈彈跳跳閃避人》今天開源了,然後有人發現裡面一個方法寫了幾百個判斷語句......絕了

曾經開發過《口袋桌球》以及《超糟糕國際象棋》等遊戲的扎克·蓋奇,對於特裡的代碼向 Polygon 說道:「這說明了一件事:特裡在剛開始製作這款遊戲時不知道會遇到哪些情況,他沒去想這款遊戲裡會有多少過場動畫,沒考慮主菜單應該以何種型式運作,更沒想到隨著開發的進行他會遇到很多奇怪的狀況。」

如果當時的特裡想要提高代碼質量的話,他或許該先停下工作,對代碼進行重構以便讓整個項目的代碼更加整潔,合理。但他並沒有這樣,相反,他選擇繼續進行下去,先把代碼跑起來再說,結果就寫出了一個巨大的代碼塊,一個塊裡處理了成百上千的東西。

「特裡沒有停下來重構代碼,他的做法就是『管他的,要是遇到什麽情況我就在這個巨長無比的語句中再加一條好了。』這種情況很常見,在遊戲將要發布時采取這種權宜之計很有必要。」

蓋奇對這種情況見怪不怪,他告訴 Polygon,在他製作的熱門遊戲《荒誕釣魚》中,因為寫得太爛,他都完全不知道這些代碼是怎麽跑起來的。團隊中的其它成員也都不是很明白。

但結果呢?《荒誕釣魚》仍然大受好評,在短短幾個月內賺了近百萬美元。顯然,開發者們的重心應該放在那些會破壞遊戲的 bug 和那些會影響玩家遊戲體驗的東西上,用他們的話來說就是:完美主義有害無益。

蓋奇說道:「開發過程中總是會遇到意料之外的狀況,而停下腳步去重構代碼則意味著這段時間內無法制作任何新東西。」

所以儘管《彈彈跳跳閃避人》的開源在社交媒體上引發了軒然大波,但特裡也只是一笑而過,抱著一種幽默的心態看待此事。

特裡的推文:那些吐槽《VVVVVV》源碼的推只會讓我變得更強大

他在開源代碼的部落格中寫道:「我能說啥呢?那時的我很年輕,比起盡善盡美遊戲代碼,我對看得見玩得到的東西更感興趣。或許《彈彈跳跳閃避人》開源最棒的一點就在於這個項目讓我們知道:即便你不是專業的程序員,仍然可以搞出些東西。」

End

獲得更多的PTT最新消息
按讚加入粉絲團