程序设计大纲就是告诉自己和合作伙伴想要做一个什么样的游戏程序。大纲包括以下几个方面: 程序概述:游戏程序编译平台、硬件运行要求、语言、编程重点难点、技术能力分析等。 第四章 游戏程序实现 程序员概述:参与程序设计工作的程序员的能力以及在整个程序制作中的作用和地位。 程序模块划分说明:游戏所需要的所有程序以及程序内的功能模块的划分。这部分只需要相对概括的描述即可。 程序模块划分 程序模块划分是程序设计大纲上一部分的详细说明,描述的内容主要包括模块的功能、接口、技术要点以及用到的底层软件。 程序开发计划知道做什么,怎么做,接下来就是确定什么时候做,谁来做。 通常会制定一系列的里程碑,例如演示版、原型版(体验版)、测试版和正式版等,其间还可能会有其他的第4章游戏程序实现版本,然后确定完成每个版本所需的时间、主要内容和验收标准。另外,还应给出程序中各个模块的制作时间表格和每个程序员的分工与工作量说明。4.1.2 程序设计阶段游戏计划完成并获得批准后,就进入游戏程序设计阶段。游戏程序编写过程与游戏的模块划分相关,大致可分为底层制作阶段、工具制作阶段、游戏制作阶段三个阶段。底层制作一般是首先要进行的阶段,这部分内容与具体的游戏无关,只与游戏要运行的平台和所用的开发工具有关。
在策划大纲基本完成之后,也就是游戏的类型和模式基本固定之后,就可以开始游戏工具的制作了。 第 4 章 游戏程序的实现 游戏程序的实现本身就是最耗费时间和精力的部分。编程是一项单调而复杂的工作,需要特别注意细节。游戏之所以不能充分发挥其潜力,大多是因为程序员没有投入足够的时间和精力,草草完成,没有认真调试。因此游戏程序编写完成后,必须进行严格的测试。 4.1.3 测试阶段 游戏在刚完成的时候,肯定会出现很多错误,也就是通常所说的BUG。任何游戏在制作过程中都会出现BUG,严重的话会导致游戏中断,无法正常进行。而且随着游戏结构越来越复杂,BUG可能会越来越多。BUG的出现,可能是程序员的编程问题,也可能是策划的设计问题,也可能是美术设计师的疏忽。 策划设计的不完善主要体现在游戏的参数上,不合理的参数会影响游戏的可玩性,所以测试阶段的工作就是检测程序漏洞,调整游戏各部分的参数,使其达到基本的平衡。游戏测试人员发现bug之后,要及时反馈给程序团队、策划、美工,由他们进行修改。修改完成后,游戏会再次进行测试,确认问题已经解决,这个过程会不断重复,直到没有明显的问题为止。测试的时候,这些问题要尽可能全部解决,不要留到游戏上线后才让玩家发现。
第 4 章 游戏程序实现 4.2 基本的游戏程序开发语言与环境 4.2.1 基本的游戏程序开发语言 应该使用哪种语言来开发游戏?这是一个问题,但是没有简单唯一的答案UI界面,在某些特定的应用领域,某些计算机语言总是比其他语言要好。下面就几种主要的用来编写游戏的编程语言及其优缺点进行介绍,希望能够起到参考作用。 C 语言 C 语言是由 Dennis Ritchie 于 20 世纪 70 年代创建的,功能强大,与 ALGOL 保持着较为连续的继承关系,是第一代高级编译语言 COBOL 和 FORTRAN 的结构化后继者。C 语言被设计成比其前辈更为精致和简单的版本,适合编写系统级程序,比如操作系统。在此之前,操作系统都是用汇编语言编写的,不可移植。C 语言是第一个使系统级代码移植成为可能的编程语言。 C 语言支持结构化编程,也就是说,C 语言程序被编写为从上到下运行的单独函数调用的集合,而不是使用 GOTO 语句控制流程的单个集成代码块。因此,C 程序比集成的 FORTRAN 和 COBOL 代码简单得多。事实上,C 仍然有 GOTO 语句,但其功能有限,仅在结构化解决方案非常复杂时才推荐使用。由于其系统编程根源,将 C 与汇编语言结合起来相当容易。
函数调用接口非常简单游戏开发导论,而且汇编语言指令可以嵌入在C语言代码中,因此不需要连接独立的汇编模块。 第4章 游戏程序实现 用C语言编写游戏的优点是有利于编写小而快的程序,容易和汇编语言结合,标准化程度高;缺点是不易支持面向对象技术,语法有时非常难懂,容易造成滥用。 在可移植性方面,C语言和ANSI函数调用的核心是可移植的,但仅限于进程控制、内存管理和简单的文件处理。其他一切都是平台相关的。例如,要为Windows和Mac开发可移植的程序,用户界面部分需要使用系统相关的函数调用,这一般意味着要写两次用户界面代码。不过,也有一些C语言库可以帮助减少工作量。 C++语言 C++语言是具有面向对象(OO)特性的C语言的继承者。面向对象编程(OOP)是结构化编程的下一步。 第 4 章 游戏程序实现 OO 程序由对象组成,其中对象是数据和函数的离散集合。有许多可用的对象库使编程变得像将一些程序“构建块”堆叠在一起一样简单,例如,许多 GUI 和数据库库都是作为对象集合实现的。C++ 经常成为争论的主题,尤其是在游戏开发论坛中。C++ 的一些特性(例如虚拟函数)为函数调用增加了额外的决策层,批评者很快指出,C++ 程序将比同等的 C 程序更大、更慢。
C++ 的拥护者认为,用 C 编写虚拟函数的等效函数也会增加开销。这是一个持续的争论,不太可能很快得到解决。大多数人认为,C++ 的额外开销是使用更好的语言所付出的很小的代价。同样的争论也发生在 20 世纪 60 年代,当时 COBOL 和 FORTRAN 等高级编程语言开始取代汇编语言成为首选语言。批评者正确地指出,用高级语言编写的程序(例如第 4 章中的程序)本质上比手写汇编程序要慢,而且永远会更慢。高级语言的拥护者认为,微小的性能损失是值得的,因为 COBOL 和 FORTRAN 程序更易于编写和维护。用 C++ 编写的游戏很多;事实上,大多数商业游戏都是用 C 和 C++ 编写的。 使用C++的优点是它比C容易得多,组织大型程序时C++对面向对象编程有很好的支持游戏开发导论,而且诸如链表和可增长数组等常用数据结构库可以减轻你处理低级细节的负担。缺点是它非常庞大和复杂,存在与C相同的语法滥用问题,速度比C慢,而且大多数编译器不能正确实现整个语言。在可移植性方面,C++比C好很多,但由于它具有与C相同的缺点,因此仍然不太乐观。大多数可移植的用户界面都是使用C++对象实现的。 第4章 游戏程序实现 C#语言 C#(英文发音为C Sharp)是微软为.net平台量身定制的一门编程语言。
C#既具备C/C++面向对象的功能,又提供了与Visual Basic同样易于使用的特性,同时还具备微软新推出的.net平台自动提供的内存管理和安全性等优势。过去人们谈及C#时,多将其视为在.net平台上处理商业程序的编程语言,而很多真正从事游戏行业的程序员并不将其视为游戏开发的主要编程语言。因为游戏软件对效率的要求很高,因此需要的是高效的C/C++,让游戏软件能够充分利用计算机的每一点能力。然而,这种传统观念已逐渐被颠覆,主要有两个原因。首先,游戏的规模越来越大,如果全部使用C/C++开发游戏,其实是非常耗时耗力的。而且程序越庞大,游戏制作后期,只要稍作改动地图场景,就可能需要重新编译超过10万行的C/C++程序,这个过程非常耗时。 C# 是可以在 PC 上使用的简化编程语言,由于是 C/C++ 的简化改进版,因此编写起来更加简单,也更容易被习惯使用 C/C++ 的程序员接受。另一个原因是 PC 硬件的进步,在 CPU 速度越来越快的时代,一款游戏的所有程序模块不再需要全部使用最高效的 C/C++ 语言来开发,在 Microsoft CLR(Common Language Runtime)环境中使用 C#、VB 等虚拟代码实现很多游戏处理逻辑都是没有问题的。
只要程序代码不是要求极快的速度,使用C#进行开发并不会导致游戏执行速度变慢(至少不会慢到让人无法忍受)。 第4章 游戏程序实现 汇编语言 汇编是第一种计算机语言。汇编语言其实就是计算机处理器实际运行的指令的命令形式表示。用汇编语言编写程序意味着程序员要和处理器底层打交道,比如寄存器、堆栈等。 准确的说,其他语言能做到的事情,汇编都能做到,但没那么简单。 一般情况下,游戏中不会单独使用汇编语言。游戏使用汇编主要是为了使用那些能提高性能的部分。比如DOOM整体上是用C语言编写的,但是有几个绘制程序是用汇编语言编写的。这些程序每秒被调用数千次,所以尽可能简洁会有助于提高游戏的性能。 从C调用用汇编语言编写的函数比较简单,所以同时使用两种语言不是问题。 汇编语言的优点是它是最小、最快的语言。 汇编专家可以编写出比其他语言快得多的程序。汇编语言的缺点是学习起来困难,语法晦涩,而且由于追求效率而产生了很多额外的代码。汇编语言的可移植性接近于零,因为这种语言是为单一处理器设计的,完全没有可移植性。如果使用某种专用处理器的扩展功能,代码甚至无法移植到其他同类型的处理器上。
第 4 章 游戏编程 Pascal Pascal 是由 Nicolas Wirth 在 20 世纪 70 年代初设计的,因为他对 FORTRAN 和 COBOL 没有强迫学生进行结构化编程感到失望。Pascal 的设计初衷就是强迫学生进行结构化编程。最初的 Pascal 是严格为教学而设计的,但大量拥护者促使它打入商业编程领域。当 Borland 在 IBM PC 上发布 Turbo Pascal 时,Pascal 就是一个光辉的典范。集成的编辑器、闪电般的编译器和低廉的价格使它令人无法抗拒。Pascal 编程成为为 MS-DOS 编写小程序的首选语言。然而,不久之后,C 编译器变得更快,并具有出色的内置编辑器和调试器。当 Windows 在 1990 年流行时,Pascal 衰落了。Borland 放弃了 Pascal,将注意力转向 C++ 以编写 Windows 程序。Turbo Pascal 很快就被遗忘了。后来在 1996 年,Borland 发布了它的“Visual Basic Killer”——Delphi。Delphi 是一个快速的 Pascal 编译器,具有华丽的用户界面,它很快就赢得了一大批粉丝。 基本上,Pascal 比 C 更简单,虽然语法相似,但它缺少许多 C 的简洁运算符。
这既是好事也是坏事,虽然写出的代码容易理解,但也使得一些底层操作,比如位操作变得困难。用 Pascal 写的游戏并不多。Pascal 语言的优点是容易学习,缺点是 Pascal 面向对象的后继者(Modula、Oberon)并没有取得成功,语言标准也得不到编译器开发者的认可。Pascal 的可移植性较差,语言的功能会随着平台的改变而改变,而且没有可移植性工具包来处理。