《C++游戏编程入门(第4版)》——1.7 使用常量

简介:

本节书摘来自异步社区出版社《C++游戏编程入门(第4版)》一书中的第1章,第1.7节,作者:【美】Michael Dawson(道森),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.7 使用常量

C++游戏编程入门(第4版)
常量 是经过命名的无法修改的值。如果程序中频繁地使用到不变化的值,常量就很有用。例如,在编写太空射击游戏时,每个在空中击毁的外星人都值150分,那么就可以定义一个名为ALIEN_POINTS的常量,其值为150。然后每次需要使用外星人的分数时,就可以使用ALIEN_POINTS而不是数字150。

常量有两大优势。首先,它让程序更加清晰易懂。一眼看到ALIEN_POINTS,就能知道它的意思。如果查看的代码中有150,我们也许并不知道它代表的含义。第二,常量让修改变得简单。

例如,在试玩游戏时,决定每个外星人应该值250分,有了常量,只需要在程序中改变ALIEN_POINTS的初始值。如果没有常量,就不得不找到每处的150,然后修改成250。

1.7.1 Game Stats 3.0程序简介

Game Stats 3.0程序使用常量表示值。首先,程序计算玩家的得分,然后计算策略游戏中单位升级所需的花费。图1.8显示了程序结果。


0c6a2dd31d51c43e067be96119acb7e12204f633

图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。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
28天前
|
存储 C++ 容器
C++入门指南:string类文档详细解析(非常经典,建议收藏)
C++入门指南:string类文档详细解析(非常经典,建议收藏)
37 0
|
28天前
|
编译器 C++
C++入门指南:10分钟带你快速了解模板究竟是什么(建议收藏!!)
C++入门指南:10分钟带你快速了解模板究竟是什么(建议收藏!!)
31 0
|
28天前
|
存储 编译器 C语言
C++入门: 类和对象笔记总结(上)
C++入门: 类和对象笔记总结(上)
33 0
|
30天前
|
编译器 Linux C语言
C++第二弹---C++入门(中)
C++第二弹---C++入门(中)
|
30天前
|
Java 程序员 Maven
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI C++ D-Bus Tools 完全使用教程指南
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI C++ D-Bus Tools 完全使用教程指南
58 0
|
1月前
|
算法 安全 C++
【C++ 泛型编程 入门篇】深入探索C++的numeric_limits:全面理解数值界限(一)
【C++ 泛型编程 入门篇】深入探索C++的numeric_limits:全面理解数值界限
45 0
|
1月前
|
存储 算法 测试技术
【C++ 泛型编程 入门篇】深入探索C++的numeric_limits:全面理解数值界限(二)
【C++ 泛型编程 入门篇】深入探索C++的numeric_limits:全面理解数值界限
32 0
|
1天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
|
1天前
|
存储 C++
C++从入门到精通:1.1.4基础语法之控制流
C++从入门到精通:1.1.4基础语法之控制流
|
1天前
|
存储 编译器 C++
C++从入门到精通:1.1.2基础语法之数据类型
C++从入门到精通:1.1.2基础语法之数据类型