本节书摘来自异步社区出版社《C++游戏编程入门(第4版)》一书中的第1章,第1.7节,作者:【美】Michael Dawson(道森),更多章节内容可以访问云栖社区“异步社区”公众号查看。
C++游戏编程入门(第4版)常量 是经过命名的无法修改的值。如果程序中频繁地使用到不变化的值,常量就很有用。例如,在编写太空射击游戏时,每个在空中击毁的外星人都值150分,那么就可以定义一个名为ALIEN_POINTS的常量,其值为150。然后每次需要使用外星人的分数时,就可以使用ALIEN_POINTS而不是数字150。
常量有两大优势。首先,它让程序更加清晰易懂。一眼看到ALIEN_POINTS,就能知道它的意思。如果查看的代码中有150,我们也许并不知道它代表的含义。第二,常量让修改变得简单。
例如,在试玩游戏时,决定每个外星人应该值250分,有了常量,只需要在程序中改变ALIEN_POINTS的初始值。如果没有常量,就不得不找到每处的150,然后修改成250。
Game Stats 3.0程序使用常量表示值。首先,程序计算玩家的得分,然后计算策略游戏中单位升级所需的花费。图1.8显示了程序结果。
图1.8 每次计算都使用了常量,可以使代码含义更加清晰易懂
从Cengage Learning网站上可以下载到该程序的代码。程序位于Chapter 1文件夹中,文件名为game_stats3.cpp。
// Game Stats 3.0 // Demonstrates constants #include <iostream> using namespace std; int main() { const int ALIEN_POINTS = 150; int aliensKilled = 10; int score = aliensKilled * ALIEN_POINTS; cout << "score: " << score << endl; enum difficulty {NOVICE, EASY, NORMAL, HARD, UNBEATABLE}; difficulty myDifficulty = EASY; enum shipCost {FIGHTER_COST = 25, BOMBER_COST, CRUISER_COST = 50}; shipCost myShipCost = BOMBER_COST; cout << "\nTo upgrade my ship to a Cruiser will cost " << (CRUISER_COST - myShipCost) << " Resource Points.\n"; return 0; }``` ###1.7.2 使用常量 程序定义了常量ALIEN_POINTS来表示外星人的分值。 `const int ALIEN_POINTS = 150;` 这里只需要在变量的定义之前加上const修饰符。现在可以像使用任何整数一样使用ALIEN_POINTS。注意,程序使用了大写字母命名常量。这只是惯例,但一般都这么做。全部大写的标识符告诉程序员它代表了一个常量。 下面一行代码使用了常量: ` int score = aliensKilled * ALIEN_POINTS;` 杀死的外星人数目与每个外星人的分值相乘得到玩家的得分。常量的使用让这行代码的含义显得很清晰。 陷阱 不能对常量赋新值。如果试图这么做,会生成编译错误。 ###1.7.3 使用枚举类型 枚举类型 是unsigned int型常量的集合,其中的常量称为枚举数。通常情况下,这些枚举数是相关的,并且有特定顺序。这里给出一个枚举类型的例子: ` enum difficulty {NOVICE, EASY, NORMAL, HARD, UNBEATABLE};` 这里定义了一个枚举类型difficulty。默认情况下,枚举数的值从0开始,每次加1。所以NOVICE等于0,EASY等于1,NORMAL等于2,HARD等于3,UNBEATABLE等于4。如果要定义自己的枚举类型,只要在关键词enum后面加上标识符,然后加上用花括号括起来的枚举数列表。 下面定义了枚举类型的变量: ` difficulty myDifficulty = EASY;` 变量myDifficulty被置为EASY(等于1)。myDifficulty是difficulty类型的变量,因此它能够存储枚举类型中定义的值。也就是说,只能用NOVICE、EASY、NORMAL、HARD、UNBEATABLE、0、1、2、3或4这些值对myDifficulty赋值。 下面定义了另外一种枚举类型:enum shipCost {FIGHTER_COST = 25, BOMBER_COST, CRUISER_COST = 50};`本行代码定义了shipCost这一枚举类型,用来表示在策略游戏中建造这些飞船花费的资源点。在代码中,某些枚举数被赋予了特定的整数值。这些值表示每种船只的资源点。如果需要,可以对枚举数赋值。没有赋值的枚举数的取值为前一个枚举数的值加1。由于代码没有对BOMBER_COST赋值,因此它被初始化为26。
下面定义了这种新枚举类型的一个变量:
shipCost myShipCost = BOMBER_COST;还可以对枚举数进行算术计算:` (CRUISER_COST - myShipCost)这一小段代码计算从Bomber升级到Cruiser所需的花费,与50−26相等,结果为24。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
相关资源:jdk1.7 官方正式版64位下载