編程
這是每個游戲編程FAQ里都有的問題。這個問題每星期都會在游戲開發論壇上被問上好幾次。這是個很好的問題,但是,沒人能給出簡單的答案。在某些應用程序中,總有一些計算機語言優於其他語言。下面是幾種用於編寫游戲的主要編程語言的介紹及其優缺點。希望這篇文章能幫助你做出決定。
1、C語言
如果說FORTRAN和COBOL是第一代高級編譯語言,那麼C語言就是它們的孫子輩。C語言是Dennis Ritchie在七十年代創建的,它功能更強大且與ALGOL保持更連續的繼承性,而ALGOL則是COBOL和FORTRAN的結構化繼承者。C語言被設計成一個比它的前輩更精巧、更簡單的版本,它適於編寫系統級的程序,比如操作系統。在此之前,操作系統是使用匯編語言編寫的,而且不可移植。C語言是第一個使得系統級代碼移植成為可能的編程語言。
C語言支持結構化編程,也就是說C的程序被編寫成一些分離的函數呼叫(調用)的集合,這些呼叫是自上而下運行,而不像一個單獨的集成塊的代碼使用GOTO語句控制流程。因此,C程序比起集成性的FORTRAN及COBOL的「空心粉式代碼」代碼要簡單得多。事實上,C仍然具有GOTO語句,不過它的功能被限制了,僅當結構化方案非常復雜時才建議使用。
正由於它的系統編程根源,將C和匯編語言進行結合是相當容易的。函數調用介面非常簡單,而且匯編語言指令還能內嵌到C代碼中,所以,不需要連接獨立的匯編模塊。
優點:有益於編寫小而快的程序。很容易與匯編語言結合。具有很高的標准化,因此其他平台上的各版本非常相似。
缺點:不容易支持面向對象技術。語法有時會非常難以理解,並造成濫用。
移植性:C語言的核心以及ANSI函數調用都具有移植性,但僅限於流程式控制制、內存管理和簡單的文件處理。其他的東西都跟平台有關。比如說,為Windows和Mac開發可移植的程序,用戶界面部分就需要用到與系統相關的函數調用。這一般意味著你必須寫兩次用戶界面代碼,不過還好有一些庫可以減輕工作量。
用C語言編寫的游戲:非常非常多。
資料:C語言的經典著作是《The C Programming Language》,它經過多次修改,已經擴展到最初的三倍大,但它仍然是介紹C的優秀書本。一本極好的教程是《The Waite Group's C Primer Plus》。
2、C++
C++語言是具有面向對象特性的C語言的繼承者。面向對象編程,或稱OOP是結構化編程的下一步。OO程序由對象組成,其中的對象是數據和函數離散集合。有許多可用的對象庫存在,這使得編程簡單得只需要將一些程序「建築材料」堆在一起(至少理論上是這樣)。比如說,有很多的GUI和資料庫的庫實現為對象的集合。
C++總是辯論的主題,尤其是在游戲開發論壇里。有幾項C++的功能,比如虛擬函數,為函數呼叫的決策制定增加了一個額外層次,批評家很快指出C++程序將變得比相同功能的C程序來得大和慢。C++的擁護者則認為,用C寫出與虛擬函數等價的代碼同樣會增加開支。這將是一個還在進行,而且不可能很快得出結論的爭論。
我認為,C++的額外開支只是使用更好的語言的小付出。同樣的爭論發生在六十年代高級程序語言如COBOL和FORTRAN開始取代匯編成為語言所選的時候。批評家正確的指出使用高級語言編寫的程序天生就比手寫的匯編語言來得慢,而且必然如此。而高級語言支持者認為這么點小小的性能損失是值得的,因為COBOL和FORTRAN程序更容易編寫和維護。
優點:組織大型程序時比C語言好得多。很好的支持面向對象機制。通用數據結構,如鏈表和可增長的陣列組成的庫減輕了由於處理低層細節的負擔。
缺點:非常大而復雜。與C語言一樣存在語法濫用問題。比C慢。大多數編譯器沒有把整個語言正確的實現。
移植性:比C語言好多了,但依然不是很樂觀。因為它具有與C語言相同的缺點,大多數可移植性用戶界面庫都使用C++對象實現。
使用C++編寫的游戲:非常非常多。大多數的商業游戲是使用C或C++編寫的。
資料:最新版的《The C++ Programming Language》非常好。作為教程,有兩個陣營,一個假定你知道C,另外一個假定你不知道。到目前為止,最好的C++教程是《Who's Afraid of C++》,如果你已經熟知C,那麼試一下《Teach Yourself C++》。
3、我該學習C++或是該從C開始
我不喜歡這種說法,但它是繼「我該使用哪門語言」之後最經常被問及的問題。很不幸,不存在標准答案。你可以自學C並使用它來寫程序,從而節省一大堆的時間,不過使用這種方法有兩個弊端:
你將錯過那些面向對象的知識,因為它可能在你的游戲中使得數據建模更有效率的東西。
最大的商業游戲,包括第一人稱射擊游戲很多並沒有使用C++。但是,這些程序的作者即使使用老的C的格式,他們通常堅持使用面向對象編程技術。如果你只想學C,至少要自學OO(面向對象)編程技術。OO是模擬(游戲)的完美方法,如果你不學習OO,你將不得不「辛苦」的工作。
4、匯編語言
顯然,匯編是第一個計算機語言。匯編語言實際上是你計算機處理器實際運行的指令的命令形式表示法。這意味著你將與處理器的底層打交道,比如寄存器和堆棧。如果你要找的是類英語且有相關的自我說明的語言,這不是你想要的。
確切的說,任何你能在其他語言里做到的事情,匯編都能做,只是不那麼簡單 — 這是當然,就像說你既可以開車到某個地方,也可以走路去,只是難易之分。話雖不錯,但是新技術讓東西變得更易於使用。
總的來說,匯編語言不會在游戲中單獨應用。游戲使用匯編主要是使用它那些能提高性能的零零碎碎的部分。比如說,毀滅戰士整體使用C來編寫,有幾段繪圖程序使用匯編。這些程序每秒鍾要調用數千次,因此,盡可能的簡潔將有助於提高游戲的性能。而從C里調用匯編寫的函數是相當簡單的,因此同時使用兩種語言不成問題。
特別注意:語言的名字叫「匯編」。把匯編語言翻譯成真實的機器碼的工具叫「匯編程序」。把這門語言叫做「匯編程序」這種用詞不當相當普遍,因此,請從這門語言的正確稱呼作為起點出發。
優點:最小、最快的語言。匯編高手能編寫出比任何其他語言能實現的快得多的程序。你將是利用處理器最新功能的第一人,因為你能直接使用它們。
缺點:難學、語法晦澀、堅持效率,造成大量額外代碼 — 不適於心臟虛弱者。
移植性:接近零。因為這門語言是為一種單獨的處理器設計的,根本沒移植性可言。如果使用了某個特殊處理器的擴展功能,你的代碼甚至無法移植到其他同類型的處理器上(比如,AMD的3DNow指令是無法移植到其它奔騰系列的處理器上的)。
使用匯編編寫的游戲:我不知道有什麼商業游戲是完全用匯編開發的。不過有些游戲使用匯編完成多數對時間要求苛刻的部分。
資料:如果你正在找一門匯編語言的文檔,你主要要找晶元的文檔。網路上如Intel、AMD、Motorola等有一些關於它們的處理器的資料。對於書籍而言,《Assembly Language: Step-By-Step》是很值得學習的。
5、Pascal語言
Pascal語言是由Nicolas Wirth在七十年代早期設計的,因為他對於FORTRAN和COBOL沒有強制訓練學生的結構化編程感到很失望,「空心粉式代碼」變成了規范,而當時的語言又不反對它。Pascal被設計來強行使用結構化編程。最初的Pascal被嚴格設計成教學之用,最終,大量的擁護者促使它闖入了商業編程中。當Borland發布IBM PC上的 Turbo Pascal時,Pascal輝煌一時。集成的編輯器,閃電般的編譯器加上低廉的價格使之變得不可抵抗,Pascal編程了為MS-DOS編寫小程序的首選語言。
然而時日不久,C編譯器變得更快,並具有優秀的內置編輯器和調試器。Pascal在1990年Windows開始流行時走到了盡頭,Borland放棄了Pascal而把目光轉向了為Windows 編寫程序的C++。Turbo Pascal很快被人遺忘。
最後,在1996年,Borland發布了它的「Visual Basic殺手」— Delphi。它是一種快速的帶華麗用戶界面的 Pascal編譯器。由於不懈努力,它很快贏得了一大群愛好者。
基本上,Pascal比C簡單。雖然語法類似,它缺乏很多C有的簡潔操作符。這既是好事又是壞事。雖然很難寫出難以理解的「聰明」代碼,它同時也使得一些低級操作,如位操作變得困難起來。
優點:易學、平台相關的運行(Dephi)非常好。
缺點:「世界潮流」面向對象的Pascal繼承者(Mola、Oberon)尚未成功。語言標准不被編譯器開發者認同。專利權。
移植性:很差。語言的功能由於平台的轉變而轉變,沒有移植性工具包來處理平台相關的功能。
使用Pascal編寫的游戲:幾個。DirectX的Delphi組件使得游戲場所變大了。
資料:查找跟Delphi有關的資料,請訪問:Inprise Delphi page。
6、Visual Basic
哈,BASIC。回到八十年代的石器時代,它是程序初學者的第一個語言。最初的BASIC形式,雖然易於學習,卻是可怕的無組織化,它義無返顧的使用了GOTO充斥的「空心粉式代碼」。當回憶起BASIC的行號和GOSUB命令,沒有幾個人能止住眼角的淚水。
快速前進到九十年代早期,雖然不是蘋果公司所希望的巨人,HyperCard仍然是一個在Windows下無法比擬的吸引人的小型編程環境。Windows下的HyperCard克隆品如ToolBook又慢又笨又昂貴。為了與HyperCard一決高下,微軟取得了一個小巧的名為Thunder編程環境的許可權,並把它作為Visual Basci 1.0發布,其用戶界面在當時非常具有新意。這門語言雖然還叫做Basic(不再是全部大寫),但更加結構化了,行號也被去除。實際上,這門語言與那些內置於TRS-80、Apple II及Atari里的舊的ROM BASIC相比,更像是帶Basic風格動詞的Pascal。
經過六個版本,Visual Basic變得非常漂亮。用戶界面發生了許多變化,但依然保留著「把代碼關聯到用戶界面」的主旨。這使得它在與即時編譯結合時變成了一個快速原型的優異環境。
優點:整潔的編輯環境。易學、即時編譯導致簡單、迅速的原型。大量可用的插件。雖然有第三方的DirectX插件,DirectX 7已准備提供Visual Basic的支持。
缺點:程序很大,而且運行時需要幾個巨大的運行時動態連接庫。雖然表單型和對話框型的程序很容易完成,要編寫好的圖形程序卻比較難。調用Windows的API程序非常笨拙,因為VB的數據結構沒能很好的映射到C中。有OO功能,但卻不是完全的面向對象。專利權。
移植性:非常差。因為Visual Basic是微軟的產品,你自然就被局限在他們實現它的平台上。也就是說,你能得到的選擇是:Windows,Windows或Widnows。當然,有一些工具能將VB程序轉變成java。
使用Visual Basic編寫的游戲:一些。有很多使用VB編寫的共享游戲,還有一些是商業性的。
資料:微軟的VB頁面有一些信息。
7、Java
Java是由Sun最初設計用於嵌入程序的可移植性「小C++」。在網頁上運行小程序的想法著實吸引了不少人的目光,於是,這門語言迅速崛起。事實證明,Java不僅僅適於在網頁上內嵌動畫 — 它是一門極好的完全的軟體編程的小語言。「虛擬機」機制、垃圾回收以及沒有指針等使它很容易實現不易崩潰且不會泄漏資源的可靠程序。
雖然不是C++的正式續篇,Java從C++ 中借用了大量的語法。它丟棄了很多C++的復雜功能,從而形成一門緊湊而易學的語言。不像C++,Java強制面向對象編程,要在Java里寫非面向對象的程序就像要在Pascal里寫「空心粉式代碼」一樣困難。
優點:二進制碼可移植到其他平台。程序可以在網頁中運行。內含的類庫非常標准且極其健壯。自動分配合垃圾回收避免程序中資源泄漏。網上數量巨大的代碼常式。
缺點:使用一個「虛擬機」來運行可移植的位元組碼而非本地機器碼,程序將比真正編譯器慢。有很多技術(例如「即時」編譯器)很大的提高了Java的速度,不過速度永遠比不過機器碼方案。早期的功能,如AWT沒經過慎重考慮,雖然被正式廢除,但為了保持向後兼容不得不保留。越高級的技術,造成處理低級的機器功能越困難,Sun為這門語言增加新的「受祝福」功能的速度實在太慢。
移植性:最好的,但仍未達到它本應達到的水平。低級代碼具有非常高的可移植性,但是,很多UI及新功能在某些平台上不穩定。
使用Java編寫的游戲:網頁上有大量小的Applet,但僅有一些是商業性的。有幾個商業游戲使用Java作為內部腳本語言。
資料:Sun的官方Java頁面有一些好的信息。IBM也有一個非常好的Java頁面。JavaLobby是一個關於Java新聞的最好去處。
8、創作工具
上面所提及的編程語言涵蓋了大多數的商業游戲。但是也有一個例外,這個大游戲由於它的缺席而變得突出。
「神秘島」。沒錯,賣得最好的商業游戲不是使用以上任何一門語言編的,雖然有人說「神秘島」99%是使用 3D建模工具製作的,其根本的編程邏輯是在HyperCard里完成的。
多數創作工具有點像Visual Basic,只是它們工作在更高的層次上。大多數工具使用一些拖拉式的流程圖來模擬流程式控制制。很多內置解釋的程序語言,但是這些語言都無法像上面所說的單獨的語言那樣健壯。
優點:快速原型 — 如果你的游戲符合工具製作的主旨,你或許能使你的游戲跑得比使用其他語言快。在很多情況下,你可以創造一個不需要任何代碼的簡單游戲。使用插件程序,如Shockware及IconAuthor播放器,你可以在網頁上發布很多創作工具生成的程序。
缺點:專利權,至於將增加什麼功能,你將受到工具製造者的支配。你必須考慮這些工具是否能滿足你游戲的需要,因為有很多事情是那些創作工具無法完成的。某些工具會產生臃腫得可怕的程序。
移植性:因為創作工具是具有專利權的,你的移植性以他們提供的功能息息相關。有些系統,如Director可以在幾種平台上創作和運行,有些工具則在某一平台上創作,在多種平台上運行,還有的是僅能在單一平台上創作和運行。
使用創作工具編寫的游戲:「神秘島」和其他一些同類型的探險游戲。所有的Shockwave游戲都在網路上。
資料:Director、HyperCard、SuperCard、IconAuthor、Authorware。
9、結論
你可能希望得到一個關於「我該使用哪種語言」這個問題的更標準的結論。非常不幸,沒有一個對所有應用程序都最佳的解決方案。C適於快而小的程序,但不支持面向對象的編程。C++完全支持面向對象,但是非常復雜。Visual Basic與Delphi易學,但不可移植且有專利權。Java有很多簡潔的功能,但是慢。創作工具可以以最快的速度產生你的程序,但是僅對某一些類型的程序起作用。最好的方法是決定你要寫什麼樣的游戲,並選擇對你的游戲支持最好的語言。「試用三十天」的做法成為工業標準是件好事情。
『貳』 想當程序員,學編程學不會怎麼辦
首先先把基礎打好,網上很多教程網站,runoob,可以選一個把裡面總結的知識點過一遍,不會的就學。
java,算是一種高級語言,比起C什麼的話,算是簡單些。
任何語言要想學好,都需要練習,練習,再練習。
多思考,多做題,不會的,搜一下然後再思考,完了再自己寫答案。
另外多看書,《thinking in java》、《effective java》這些對於剛入門的來說,看看還是有很大收益的。
另外光會編程還不行,你還得會搭架子,知道MVC,多看些開源框架,比如spring、struts、mybatis等等。
順便了解下前端的書,知道HTML,javascript什麼的,這樣別人讓你做頁面的時候你就能信手拈來。
最後祝好。
『叄』 為什麼老司機不喜歡新手程序員編程
方法一:基於Jquery的DIV嵌套html
<script src="js/jquery.js"></script>1
$(document).ready(function(){
$("#btn").click(function(){
$('#viewDiv').load('new.html');
})
})
方法二:純js方法。
function load_home() {
document.getElementById("viewDiv").innerHTML = '<object type="text/html" data="new.html" width="100%" height="100%"></object>';
}
『肆』 代碼量能衡量一個程序員的編程水平嗎
寫代碼是依靠腦力生產結果,而編程效率、編程水平、工作時長、代碼質量、運行效率、生產力......這些復雜的因素決定了最後項目的質量。有的大牛隻用50%的代碼量就解決了初級程序員需要100%的代碼才能解決的問題。所以,用「產出的代碼行數」、「每日上班敲代碼的時間」...這種指標來衡量生產力,是不科學的。
『伍』 程序員入門:如何自學編程
1、選定方向
編程的世界是多元紛繁的,大的方向就分前端開發、後端開發、移動開發、雲計算、數據處理、智能硬體、物聯網、虛擬現實等等,光編程語言都幾十種。如果沒有做過功課,貿然進入只會分分鍾懵逼。所以最好是根據自己的興趣愛好再結合市場前景,先選定一個方向,再選擇一門語言,然後頭也不回的深深扎進去。
2、優化學習方式
做好筆記,記錄經驗,我們大多數人並沒有過目不忘的神技,很多時候我們學了也不一定馬上掌握,需要過後花時間慢慢領悟,而且還有忘掉的風險,所以對於重要的知識點都要做好筆記。
3、多看官方文檔,外文資料
互聯網是一個更新迭代很快的行業,所有編程語言都會不斷的更新新功能和修復舊Bug,網上查的資料很有可能是舊的解決方案,現在已經不適用了。所以最好最快的方法就是查看官方文檔。
4、動手做項目
我們學習編程的最終目的就是用所學的做出具有一定功能的項目,而做項目又是最好的學習和鞏固知識的方式。如果前期能力不足就先做一些簡單的功能模塊,一步一步慢慢來,不要一開始就要實現各種酷炫炸天功能,遇到不會的就在網上查, 現在互聯網這么發達,獲取資源也及其方便。
『陸』 程序員們。。。你們到底喜歡編程嗎
作為IT行業來說,程序員可謂是最低一級的,且工作量繁重(具體依不同企業而定)。個人認為,大多程序員都是不喜歡編程序的。只不過程序員在企業中能好好乾幾年的話,受到老總信賴,前途是很大的。所以程序員編程序僅是為了能夠達到不編程的地步,比如架構師或者測試師
『柒』 程序員如何在電腦上編程的
說到如何在電腦上編程。首先需要知道下面這個問題的答案:「程序到底是什麼?」計算機程序是指令集,它告訴計算機如何執行特殊的任務。VB~VC~VF~C~C#~C++~JAVA~.NET~這些都是編程 ASP~CGI~php~JSP這些是WEB編程。。 雖然都是編程,但編出來的程序可是不一樣的。 目標是什麼?開發?創業?還是去公司上班?還是業余愛好? 如果想業余編小程序,推薦VB~VC~容易上手。簡單。也蠻強大。 如果想學好了去企業上班,推薦C++~~~.net~~~JAVA之類的大型項目開發。 如果想做網站,就學ASP~CGI~PHP~JSP,這4個就JSP最最最難,先學ASP。現在是人工智慧時代,國家出台了很多政策鼓勵人工智慧發展,無人超市、無人駕駛、無人銀行、AI人臉識別層出不窮,我覺得以後人工智慧滲透的領域肯定也會越來越多,所以我推薦讓孩子學習python語言,python語言適合做人工智慧的開發。簡單容易上手,學好了以後對學習、出國留學、就業什麼的也會有好處。首先,工程師根據你的需求給你一個合適的方案,這個方案包括硬體搭建、軟體架構。 然後,在你滿意的方案下為你選用設備 最後,程序員按照你的要求編寫軟體 各種設備有自己的命令解釋器,程序員寫出來的軟體是可以按照機器能解讀的編碼編寫的,這些不需要用戶知道,用戶只要知道怎麼使用,怎麼維護就可以了,如果知道的更多,那就可以成了開發者
『捌』 怎樣快速確定程序員編程水平
想要快速確定程序員的編程水平,可以從以下四個方面考慮:
第一,知識的考察。這個是幾乎每個公司都會做的,也是很有效的手段,基本就是考試。包括問語法問標准演算法問API問一切有標准答案的問題。一個人懂得多,不一定寫得特別好,但是什麼都不懂一定寫不明白。這個方式還可以按需求選人才,比如我們就在php做前端,那我就可以問一堆關於php的,如果我是做嵌入式的,那我可以問一堆c。可以考察這個程序員在和公司需求的交集上完成的怎麼樣。這也是最最簡單和直觀的方法。
第二,對過往項目的理解。這個也是在簡歷關很常問的,說說你當時做的這個項目吧。這個問題非常有效地考察了他是否理解他之前做的東西。有的人簡歷寫的巨漂亮可是實際那項目和他沒關系,或者他就是復制粘貼的代碼,其實自己啥都沒寫。這種時候你和他聊的足夠深入之後能很明顯地發現他自己說不明白了。同時還可以考察一定的語言表達能力和邏輯能力。用我們的話說,先問到面試官不會的深度,然後讓他給面試官講明白。如果他做的東西,他蒙圈的時候比面試官還早(前提是面試官不是搞這方向的),那一般就比較悲劇了。
第三,對寫程序本身的理解。我們很喜歡問一道題,描述一下你是怎麼寫程序的。凡是說我事先design好所有的模塊、介面、功能,然後逐一實現,然後程序就work的,我們都心裡默默補上「呵呵」。因為這是不可能的,只能說明他沒寫過大程序或者沒總結過寫程序的經驗。沒有人在完成一千行以上的程序的時候在沒寫之前就做好所有模塊設計的,何況更大的程序。當然還有就是他會不會認為程序跑通一次就完成了(即寫程序有沒有test階段)之類的。
第四,動手寫程序的能力。這個說實話是面試的時候不太容易考的,因為時間有限。現在的大公司基本是45-60分鍾一輪,一輪還要問好幾個程序題,所以寫的代碼都是片段的,大概20行左右,根本沒法體現一個人會不會寫程序。所以很多人不需要會寫程序,只需要刷好leetcode之類的演算法題庫就可以進大公司(相信我我認識很多)。我們認為一個好的程序員一定要在限定時間之內完成一個完整工作,滿足要求的程序。從輸入到輸出到corner case的驗證。而不僅僅是研究明白某個基礎演算法如何用nlogn而不是n^2解決。這一關卡下去了無數看起來很美好的人。因為我們的題目是不可能在那個時間內找到最優解的,就像絕大部分工程中的編程一樣。一個較好的可用解往往比最優解要有價值的多,因為後者需要大量的時間,很可能沒有前者直白,而且提升未必很高。這是我們公司最在乎的一點。
『玖』 程序員編程用什麼系統
首先要根據你的開發來,如果你開發的是windows應用,那麼用windows系統,如果你做的系統運行在linux或者ios上,因為你開發的時候會進行測試,最好都是和運行環境一致,但是有的程序是跨平台的,所以你可以在支持的系統上開發,比如java你可以在任何支持的平台上開發