為什么我要用C寫游戲
我就是這樣一個(gè)與眾不同的老頑固。最近所有由我單獨(dú)完成的游戲項(xiàng)目完完全全都是用C寫的??隙]人這樣干過,所以我覺得這值得我解釋下為什么我要這樣做。
枯燥的編程語言觀點(diǎn)要來啦!嗯,我已經(jīng)警告過你們了。
從一種語言中我們所需要的
有些事是毋庸置疑的。首先,它必須是可信任的。我不能花費(fèi)我的時(shí)間去解決那些不是我導(dǎo)致的bug。以前許多游戲都是用flash來編寫的,然而現(xiàn)在 flash正在面向滅亡。我也不想花費(fèi)不必要的時(shí)間將老游戲移植到新的平臺(tái),我想要的是制作新的游戲。因此我需要一個(gè)在一段時(shí)間內(nèi)都能自信使用的平臺(tái)。同 樣,我想要避免自己被一個(gè)特定的操作系統(tǒng)捆綁。理想狀況下我喜歡我可以有發(fā)展控制臺(tái)的選項(xiàng)。所以選擇一種編程語言最重要的是它是可移植的,并且有可移植式 庫的支持。
從一種語言中我們所想的
我所追求的最重要的,但不是必要的一件事就是其簡單性。我發(fā)現(xiàn)查找語言的特性和它所具備的聰明古怪的API是一件及其累人的事!理想的語言是-這些 東西都可以被記住,而無需去查找它們。另外,處理那些bug絕對會(huì)使你的創(chuàng)造性流失。所以我想要一個(gè)強(qiáng)類型的、強(qiáng)大的錯(cuò)誤提示以及靜態(tài)代碼分析來減少 bug的出現(xiàn)。我還想要一個(gè)好的debugger和動(dòng)態(tài)分析來使我更容易發(fā)現(xiàn)bug。我不關(guān)心性能是否強(qiáng)大,但至少可以用。如果你不追求逼真的話它可用現(xiàn) 代、功能強(qiáng)大的電腦盡情探索其可能性。
我甚至?xí)P(guān)心編譯器的速度問題。我不是可以非常專注的禪師,等待超過十秒對于我來說是一種浪費(fèi),但更重要的是這會(huì)打破我思考的節(jié)奏。
我不追求面向?qū)ο螅∣OP)。我已經(jīng)花了太多時(shí)間在管理類和對象上面,但我發(fā)現(xiàn)花了更多的時(shí)間,卻不太明白為什么要把代碼和數(shù)據(jù)嚴(yán)格的結(jié)合起來。我想要處理數(shù)據(jù)并且編寫適合特定情況的代碼。
備選方案
C++ 仍然是編寫游戲最普遍的語言,沒有原因。我用它寫了很多項(xiàng)目,但其實(shí)我非常不喜歡它。
C++ 涵蓋了我所需要的,但卻沒有滿足我想要的。它實(shí)在太復(fù)雜了!盡管一些工具相當(dāng)好,但它還是十分容易出現(xiàn)bug。和C相比C++編譯速度很慢。但即使它具備高性能并且有C所沒有的一些特性,但我并不在意這些有的沒的。
C# 和 Java 有些通病。它們都是冗長復(fù)雜的怪獸,我所需要的是簡單簡潔的東西。 它們都迫使程序員去思考面向?qū)ο缶幊痰娘L(fēng)格,這通通都是我反對的。作為一個(gè)高級語言,它們應(yīng)該有隱藏其復(fù)雜性的趨勢。
相比我更喜歡Go。在許多方面它是C的再發(fā)展,我會(huì)選擇使用Go,但是它也有個(gè)很大問題阻止我使用它。使用stop-the-world的方法來實(shí) 現(xiàn)垃圾回收算法對于游戲是件再煩人不過的事情。游戲庫的支持也是有點(diǎn)弱,雖然你可以使用C庫,但這會(huì)增加更多的工作量。這足夠讓我懷疑它長期的實(shí)用性。雖 然它很好的服務(wù)于web,同時(shí)這具備了一個(gè)可怕的快速移動(dòng)環(huán)境的性質(zhì)。這可有點(diǎn)flash滅亡的意思。然后我想說我真的真的不喜歡javascript, 它是如此的松散模糊,我特別訝異居然有人能夠在軟件中使用它寫上一大塊。我簡直沒有一丁點(diǎn)興趣嘗試它。
Haxe 感覺上比其他語言更有前景。如果我還做些和web有關(guān)的東西的話我會(huì)選擇它。它有很好的庫支持。我就有點(diǎn)擔(dān)心它不太成熟,能不能長久的問題。好了,我也沒什么要說的了。
Jonathan Blow正在編寫他自己的語言,一種他自己想用的語言。我特別羨慕,有時(shí)候我也會(huì)考慮做這件事。但想想,需要丟棄所有現(xiàn)有的庫支持和承擔(dān)未來兼容性的責(zé)任以至于太對需考慮。并且這實(shí)在太困難了,當(dāng)本質(zhì)問題于此,我寧愿去做游戲好了。
為什么C是我的***選擇
C既危險(xiǎn)又可靠。 就像一把鋒利的刀,切手指和切蔬菜一樣,但學(xué)會(huì)小心的使用它也不會(huì)太難。
它編譯的時(shí)候特別快,我無法想像有什么比它更快。
它還可以在任何地方運(yùn)行,通常較為容易。我都想不到它什么時(shí)候不能像這樣工作。
庫和工具支持又強(qiáng)大又不間斷地更新。
我要很悲壯的告訴你們,這就是我的語言。
我絕對不會(huì)說“嘿,你也應(yīng)該使C”我完全贊每個(gè)人有不同的個(gè)人偏好和特別的習(xí)慣。只想說相比用其他語言來說我已經(jīng)編寫了很多C 代碼,并且這令我很舒服。哦好吧,就這樣 :-)
譯文鏈接:http://www.codeceo.com/article/why-i-write-games-in-c.html
英文原文:Why I Write Games in C (yes, C)