1.4 硬编码的危险性
简单地说,硬编码就是当你想把物品直接写入到游戏引擎中时所做的工作。硬编码实际上也就是以一种严格的、固定的和难以编写的方式来编写程序和数据。无论你是不是渴望成为一位脚本程序编写的大师,硬编码都应是我们一直努力避免的,因为它会使代码难以书写、阅读和编辑。以下面的程序段为例:
const MAX_ARRAY_SIZE = 32;
int iArray [ MAX_ARRAY_SIZE ];
int iChecksum;
for ( int iIndex = 1; iIndex < MAX_ARRAY_SIZE; ++ iIndex )
{
int iElement = iArray [ iIndex ];
iArray [ iIndex - 1 ] = iElement;
iChecksum += iElement;
}
iArray [ MAX_ARRAY_SIZE - 1 ] = iChecksum;
我们先不考虑它究竟应该实现的是什么样的功能,首先注意一下这个数组的大小。这个数字存放在前面一个手工编写的常量中,并且会在后面的代码中多次用到。那么,它为什么很重要呢?你可以设想一下,如果突然需要让这个数组存放的是64个元素而不只是32个元素,那么你就只需要修改一下MAX_ARRAY_SIZE的值就行了,后面的程序很快就会反映出这种修改的效果。如果你是按照下面这种方式编写的代码,那么你就很不幸了:
int iArray [ 32 ];
int iChecksum;
for ( int iIndex = 1; iIndex < 32; ++ iIndex )
{
int iElement = iArray [ iIndex ];
iArray [ iIndex - 1 ] = iElement;
iChecksum += iElement;
}
iArray [ 31 ] = iChecksum;
实质上,它就是前面那段代码的硬编码。很明显,它没有前面那段那样灵活了。如果你想修改数组的大小,那么就必须要分别修改3个地方。就像RPG游戏中的物品描述一样,前面这个小例子中所使用的const与外部文件类似。它只需要在所编写的程序的某一个地方进行一次修改即可,其他的程序就会自动反映出这种变化。
到现在为止,你还不是在真正地编写脚本,但是已经是非常接近了!在这个RPG游戏的例子中,物品描述已经很像是一个小型的脚本了。所以到现在为止,如果你已经很好地掌握了前面所有这些东西,那么你就已经开始入门了。在第2章中,将继续带领读者学习有关这种虚拟RPG工程的内容,并把你带入这个导论的真正核心部分。因为,你还是应该牢固地掌握这个基本概念。
因此,我们再次回到前面的物品描述文件部分。它们卸下了编程人员身上的重担,使得他们可以只需要专注于像游戏引擎这样的编程,而不需考虑建立和调整游戏中的物品部分。现在应该考虑其他一些更加广泛的问题了。物品结构很好地解决了物品的描述问题,它基本能够解决像生命值、魔法值、盔甲寿命等这些问题,但是它却无法从根本上对这些问题加以解决。现在就来探求一下其中的真正原因。






