Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java游戏中定义常量值的最佳实践_Java_Constants - Fatal编程技术网

Java游戏中定义常量值的最佳实践

Java游戏中定义常量值的最佳实践,java,constants,Java,Constants,我目前正在用Java编写一个基于回合的策略游戏,我现在需要开始为一些游戏元素定义规则和行为。具体来说,地图上的每一块瓷砖都会有建筑物。每个回合,每个建筑都将根据建筑类型生产或消耗资源(木材厂消耗1根原木,生产1块木材,面包房消耗1颗小麦,生产1块面包,等等)。Building类是泛型的,它有一个字段buildingType,表示它是什么类型的建筑,其中buildingType是一个枚举。这些规则对于同一类型的每个建筑都是相同的(所有面包店都将遵守相同的规则,等等),并且在整个游戏中都是不变的 我

我目前正在用Java编写一个基于回合的策略游戏,我现在需要开始为一些游戏元素定义规则和行为。具体来说,地图上的每一块瓷砖都会有建筑物。每个回合,每个建筑都将根据建筑类型生产或消耗资源(木材厂消耗1根原木,生产1块木材,面包房消耗1颗小麦,生产1块面包,等等)。
Building
类是泛型的,它有一个字段
buildingType
,表示它是什么类型的建筑,其中
buildingType
是一个枚举。这些规则对于同一类型的每个建筑都是相同的(所有面包店都将遵守相同的规则,等等),并且在整个游戏中都是不变的

我遇到的问题是如何定义这些规则。到目前为止,我提出了三种选择:

  • 将每个建筑消耗和产生的资源类型和数量存储在磁盘上的文件中,并在游戏启动时读取该文件,将内容存储在地图中
  • 创建一个类,该类将所有规则定义为静态字段,或使用硬编码的规则值填充映射,然后创建一个静态方法,该方法基于
    BuildingType
    返回规则
  • 为每个
    BuildingType
    创建
    Building
    的子类,并在每个
    Building
    子类中将与该建筑类型对应的规则定义为静态字段
  • 目前,出于以下几个原因,我正在考虑方案2:

    • 磁盘读取速度很慢,因此在Java类中定义常量似乎可以使游戏加载速度更快
    • 在磁盘上有一个单独的文件可以让讨厌的用户更容易修改规则
    • 虽然选项3看起来更像是“Java风格”的方法,但每个
      建筑
      的行为方式完全相同,只是遵守不同的规则。因此,创建一组只定义不同常量的不同类似乎需要很大的开销
    • 我更希望规则都存储在一个中心位置,而不是分散在一堆不同的子类中
    • 在选项2中设置
      静态final
      常量似乎是确保规则只读的最佳方法
    我的问题是,在游戏中存储恒定规则的标准约定是什么?选择我错过的选项1或3有什么好处吗?除了得到一个很长的java文件之外,我没有看到选项2还有什么缺点吗?

    “磁盘读取速度很慢。”“-谁在乎启动时是否读取并缓存它们?如果它们必须改变,那么将它们外部化。如果不是,则将其设置为静态。一个简单的常量类会让我有点不舒服。我想你应该试试。