所在的位置: C++ >> C++市场 >> C大神JohnCarmack的编程传

C大神JohnCarmack的编程传

你是否也曾发现那些顶级球星常常能够轻松做出各种高难度动作,而其他球员却无法做到。你是否也在疑惑这其中的原因,为什么顶级球星看起来毫不费力?

作为一名C++程序员,JohnCarmack的源代码就像顶级球星的球技一样震撼着我。其代码简单而强大,我很想知道自己如何才能像他一样优秀。

让我们来探索Doom3(游戏:毁灭战士)的源代码,深入其中,寻找这些代码简单但强大的原因。

私信我~领取更多C/C++学习资料

年11月23日,idSoftware(游戏软件公司)延续自己的传统,发布了他们之前引擎的源代码。这些源代码被众多开发者审阅,下面是其中一个针对Doom3的反馈信息:

Doom3BFG由C++编写,C++是一门既强大又复杂的编程语言,它可以编写出无比优秀的代码,但同时也可能让你欲哭无泪。幸运的是,idSoftware的C++子集(拥有类的C语言)可以让你轻松运用C++:没有异常没有引用(使用指针)尽可能少使用模板常量无处不在拥有类多态性继承

它仅仅是c++98标准的一个子集。以下是Doom3的一些特性:

1、提供一个强大的基类

众多的类都从idClass继承而来:

idClass提供了下列服务:

实例创建类型信息管理事件管理

2、字符串操作非常简单

通常来说,字符串是一个项目中最常用的数据类型,许多功能都需要字符串来完成,我们需要使用函数来处理它们。

Doom3定义了一个idstr类,它几乎包含了所有与字符串操作相关的方法,非常实用。这样一来,你就不必像其他框架那样需要根据不同的字符串类来定义自己的方法。

3、源代码与GUI框架(MFC)高度解耦

在很多使用MFC的项目中,代码与它们的类型高度耦合,并且你可以找到任何代码在MFC中的类型。

在Doom3中,代码与MFC高度解耦,仅有GUI类与之直接相关。如下面的CQLinq查询所示:

这个特性大大提升了开发效率。的确,只有GUI开发人员必须关心MFC框架,而对于其他开发人员来说,则并不需要在MFC上浪费时间。

4、提供了一个非常强大的utility程序库(idlib)

几乎在所有项目中,utility程序类都是最常用的,如下查询结果所示:

从以上查询结果可以发现utility是用得最多的。如果C++开发人员没有一个强大的utility程序框架支撑,那么他们将不得不花费大量的时间自己编写。

idlib几乎提供了很多实用的类和方法,可用来处理字符串、容器和内存。这有利于提升开发人员的工作效率,让他们更加专注到游戏逻辑上。

5、容易理解

作为C++开发人员应该都知道开发解析器和编译器并非易事,而Doom3成功实现了一个硬编码的编译器。并且Doom3的实现代码非常简洁也很容易理解。

下图展示了编译器使用的类之间的依赖关系:

以下是编译器源码的代码片段:

过去我也曾研究过很多解析器和编译器的源代码。但是,这是我第一次发现一个编译器的源代码如此易懂,除了编译器之外,整个Doom3的源代码也一样容易理解。这真的很神奇。当我深入研究Doom3的源代码时,发现这些代码真的写得太好了。

Doom3的源代码只使用了C++标准的一个子集,它非常简洁并且易于理解和维护。它遵循代码设计、命名和格式化的基本规范,并没有使用高级技术。

JohnCarmack的编程秘诀是完全遵循维基百科定义的KISS原则:

KISS是由美国海军在年提出的一项设计原则,KISS是“Keepitsimple,stupid”的缩写。KISS原则指出,相比于复杂的系统,越简单的系统往往运行效果越好。因此简单性应当是设计过程中需要


转载请注明:http://www.aierlanlan.com/rzdk/3684.html