游戏编程的问题
不过,如果你是一个像我一样想投身游戏开发行业的程序员,不如学习C/C++,掌握Windows游戏编程、DirectX游戏编程等技能。
以下摘自别人的文章:
1,C语言
如果说FORTRAN和COBOL是第一代高级编译语言,那么C语言就是他们的孙辈。c语言是由Dennis Ritchie在20世纪70年代创造的,功能更强大,与作为COBOL和FORTRAN结构继承者的ALGOL有着更为连续的继承性。c语言被设计成一个比它的前辈更复杂、更简单的版本,适合写系统级的程序,比如操作系统。在此之前,操作系统是用汇编语言编写的,不具备可移植性。c语言是第一种使系统级代码移植成为可能的编程语言。
C语言支持结构化编程,也就是说C的程序写成一个个分离的函数调用(call)的集合,从上到下运行,而不是像单个集成的块代码一样用GOTO语句控制流程。所以C程序比集成的FORTRAN和COBOL“空心粉代码”简单多了。其实C还是有GOTO语句的,只是功能有限,只在结构化方案非常复杂的情况下才推荐使用。
由于其系统编程根源,将C与汇编语言结合起来是相当容易的。函数调用接口非常简单,汇编语言指令也可以嵌入C代码,不需要连接独立的汇编模块。
优点:有利于编写小而快的程序。很容易和汇编语言结合。它是高度标准化的,所以其他平台上的版本非常相似。
缺点:不容易支持面向对象技术。语法有时很难理解,会导致滥用。
可移植性:C语言和ANSI函数调用的核心是可移植的,但仅限于进程控制、内存管理和简单的文件处理。其他的都和平台有关。比如开发Windows和Mac的可移植程序,在用户界面中需要系统相关的函数调用。这通常意味着您必须编写两次用户界面代码,但幸运的是,有一些库可以减少工作量。
用c语言写的游戏:非常非常多。
材料:C语言的经典之作是C程序设计语言。经过多次修改,已经扩充到原来的三倍大小,但仍然是一本介绍C的优秀书籍,一个优秀的教程是韦特集团的C Primer Plus。
2、C++
C++语言是C语言的继承者,具有面向对象的特点。面向对象编程(OOP)是结构化编程的下一步。OO程序是由对象组成的,其中的对象是离散的数据集和函数。库存中有很多可用的对象,这就让编程变得像堆一些程序“建材”一样简单(至少理论上是这样)。例如,有许多GUI和数据库库被实现为对象的集合。
C++一直是争论的话题,尤其是在游戏开发论坛中。虚函数等几个C++函数给函数调用的决策增加了额外的一层,批评者很快指出,C++程序会变得比具有相同函数的C程序更大、更慢。C++的支持者认为,用C写相当于虚函数的代码也会增加成本。这将是一场持续的争论,不可能很快得出结论。
在我看来,C++的额外成本只是使用更好的语言的小成本。同样的争论发生在20世纪60年代,当时诸如COBOL和FORTRAN等高级编程语言开始取代汇编语言成为首选语言。批评家们正确地指出,用高级语言编写的程序天生就比手写汇编语言慢,而且肯定如此。高级语言的支持者认为这么小的性能损失是值得的,因为COBOL和FORTRAN程序更容易编写和维护。
优点:组织大型程序比C语言好很多。对面向对象机制的良好支持。常见的数据结构,如链表和由可伸缩数组组成的库,减轻了处理底层细节的负担。
缺点:非常庞大复杂。和C语言一样,存在语法滥用的问题。比c慢,大部分编译器没有正确实现整个语言。
移植性:比C语言好很多,但还是不太乐观。因为它和C语言有同样的缺点,所以大多数可移植的用户界面库都是用C++对象实现的。
用C++写的游戏:很多很多。大多数商业游戏都是用C或C++编写的。
资料:最新版的C++编程语言很不错。作为教程,有两个阵营,一个假设你懂C,一个假设你不懂。到目前为止,最好的C++课程是《C++的非洲是谁》。如果你已经熟悉C语言,试着自学C++。
3.我应该学C++还是应该从C开始学?
我不喜欢这种说法,但这是排在“我该用哪种语言”之后最常被问到的问题。可惜没有标准答案。你可以自学C并用它来写程序,这样可以节省很多时间,但是使用这种方法有两个缺点:
你会错过面向对象的知识,因为它可能会让数据建模在你的游戏中更加高效。
许多最大的商业游戏,包括第一人称射击游戏,都不使用C++。然而,即使这些程序的作者使用旧的C格式,他们通常坚持使用面向对象的编程技术。如果你只想学C,至少要自学OO(面向对象)编程技术。面向对象是模拟的完美方法。不学OO就要努力了。
4.汇编语言
显然,汇编是第一种计算机语言。汇编语言实际上是计算机处理器实际运行的指令的命令形式表示。这意味着您将处理处理器的底层,如寄存器和堆栈。如果你在寻找一种类似英语的语言,并有相关的自我描述,这不是你想要的。
确切地说,你可以用其他语言做任何你能做的事情,但这并没有那么简单——当然,这就像说你可以开车去某个地方,或者步行去那里,但这只是很难。那是真的,但是新技术使事情更容易使用。
一般来说,游戏中不会单独使用汇编语言。游戏用汇编主要是用它那些能提高性能的零碎。比如蹂躏者号整体是用C写的,有几个绘图程序用汇编。这些程序每秒钟被调用数千次,因此尽可能简洁将有助于提高游戏的性能。从C中调用汇编写的函数相当简单,所以同时使用两种语言不是问题。
特别说明:语言的名字叫“汇编”。把汇编语言翻译成真实机器码的工具叫做“汇编程序”。将这种语言称为“汇编程序”是相当常见的,所以请从这种语言的正确名称开始。
优点:最小最快的语言。汇编程序编写程序的速度比任何其他语言都快。你将是第一个使用处理器最新功能的人,因为你可以直接使用它们。
缺点:难学,语法晦涩,持久效率,导致额外代码很多——不适合心脏弱的人。
便携性:接近于零。因为这种语言是为单处理器设计的,根本没有可移植性。如果使用专用处理器的扩展功能,你的代码甚至无法移植到其他同类型处理器上(比如AMD的3DNow指令就无法移植到其他奔腾系列处理器上)。
用汇编编写的游戏:我不知道有哪一款商业游戏是完全用汇编开发的。但是,有些游戏使用汇编来完成大多数时间关键的部分。
资料:如果是找汇编语言文档,应该主要找芯片文档。互联网上有一些关于他们的处理器的信息,如英特尔、AMD和摩托罗拉。对于书籍,汇编语言:分步值得学习。
5.帕斯卡语言
Pascal是Nicolas Wirth在20世纪70年代初设计的,因为他对FORTRAN和COBOL不强制学生训练结构化编程感到失望,“空心粉代码”成为常态,当时的语言并不反对。Pascal被设计用来执行结构化编程。Pascal最初是严格为教学而设计的,最后,大量支持者把它推向了商业编程。当Borland在IBM PC上发布Turbo Pascal时,Pascal曾经辉煌一时。集成编辑器、快如闪电的编译器和低廉的价格让它无法抗拒。Pascal已经编写了为MS-DOS编写小程序的首选语言。
然而,在很短的时间内,C编译器变得更快,并拥有出色的内置编辑器和调试器。Pascal在1990年Windows开始流行的时候就走到了尽头。Borland放弃了Pascal,将注意力转向为Windows编写程序的C++。涡轮帕斯卡很快就被遗忘了。
最后,在1996,Borland发布了它的“Visual Basic黑仔”——Delphi。这是一个快速的Pascal编译器,具有华丽的用户界面。由于坚持不懈的努力,很快赢得了一大群粉丝。
基本上Pascal比C简单,虽然语法差不多,但是缺少C拥有的很多简洁的运算符。这是好事,也是坏事。虽然很难写出难以理解的“智能”代码,但这也使得一些低级操作,如位操作变得困难。
优点:简单易学,平台相关运行(Delphi)很不错。
缺点:《世界趋势》的面向对象Pascal后继者(Modula,Oberon)还没有成功。编译器开发人员不认可语言标准。专利权。
便携性:很差。语言的功能随着平台的变化而变化,没有可移植的工具包来处理平台相关的功能。
用Pascal写的游戏:几个。DirectX的Delphi组件让游戏的地方更大。
信息:要查找与Delphi相关的信息,请访问:Inprise Delphi页面。
6、Visual Basic
哈,基础。回到20世纪80年代的石器时代,它是初学者的第一语言。最初的基础形式,虽然简单易学,但是组织得可怕,它毫不犹豫地使用了后藤的“空心粉代码”。在回忆BASIC的行号和GOSUB命令时,很少有人能止住眼角的泪水。
快进到90年代初,虽然不是苹果所希望的巨头,但HyperCard仍然是一个有吸引力的小型编程环境,无法与Windows相比。Windows下的ToolBook等HyperCard克隆版又慢又笨又贵。为了与HyperCard竞争,微软获得了一个名为Thunderprogramming environment的小型授权许可权,并将其发布为Visual Basci 1.0,其用户界面在当时非常具有创新性。虽然语言也叫Basic(不是全大写),但是更结构化,行号也去掉了。事实上,这种语言更像是带有基本动词的Pascal,而不是TRS-80、Apple II和Atari建立的旧ROM BASIC。
经过六个版本,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是一种可移植的“小C++”,最初是Sun为嵌入程序而设计的。在网络上运行小程序的想法确实吸引了很多人的注意,于是语言迅速崛起。事实证明,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 player,可以在网页上发布许多由创意工具生成的程序。
缺点:专利,至于会增加什么功能,你就任由工具制造者摆布了。你必须考虑这些工具是否能满足你游戏的需求,因为有很多事情是那些创意工具做不到的。一些工具会产生非常臃肿的程序。
可移植性:因为创意工具是有专利的,所以你的可移植性与它们提供的功能密切相关。有些系统如Director可以在几个平台上创建和运行,有些工具可以在某个平台上创建和运行,有些只能在单个平台上创建和运行。
用创意工具写的游戏:《神秘岛》等类似的冒险游戏。所有的冲击波游戏都在网上。
材料:Director,hypercard,HyperCard,IconAuthor,Authorware。
9.简易语言
★全中文支持,无需跨过英文门槛。★全可视化编程,支持所见即所得程序界面设计和程序流程编码。★汉语句子快速录入。提供多种嵌入式专用输入法,彻底解决中文句子输入速度慢的问题。★代码是一个文档。自动规范强制代码格式转换,任何人写的任何程序的源代码格式都是统一的。★参数引导技术方便输入程序语句参数。★没有定义class关键字。所有的程序定义都是填表的,用户不需要记忆这样的关键字及其使用格式。★统一的指挥格式。所有程序语句调用格式完全相同。★自动语法格式检查。自动检查并提示输入语句的语法格式是否正确,并能自动添加各种名称。★完整的提示和帮助。鼠标悬停会立即显示相关的项目提示。编程时提示语法格式,调试时提示变量当前内容,随时按F1键可获得当前主题相关的详细帮助。★名称自动管理。如果用户修改了任何名称定义,包含该名称的所有其他程序代码都将被自动修改。★集成开发环境。集界面设计、代码编写、调试分析、编译打包等于一体。★丰富的学习资源。详细的帮助文件、几十兆字节的知识库、几万用户的在线论坛和教学材料已经出版...
10,结论
对于“我应该使用哪种语言”这个问题,你可能想得到一个更标准的结论。不幸的是,没有适用于所有应用的最佳解决方案。c适合快速小程序,不支持面向对象编程。C++完全支持面向对象,但是很复杂。Visual Basic和Delphi易学,但不可移植,有专利权。Java有很多简洁的函数,但是很慢。创作工具可以尽可能快地生成您的程序,但它只适用于某些类型的程序。最好的办法是决定你要写什么样的游戏,选择最能支持你游戏的语言。“试用30天”的做法成为行业标准,这是好事。