【问题标题】:Handling dynamic settings of programms处理程序的动态设置
【发布时间】:2012-09-28 00:57:31
【问题描述】:

我正在为游戏编写设置管理器。

基本上,我正在显示该游戏的设置,这些设置只能通过控制台访问,而不能通过游戏菜单访问。

设置或命令具有不同的值。

例如:

dota_player_units_auto_attack 有一个布尔参数,0 或 1

dota_health_per_vertical_marker 有一个整数参数(默认为250)

我应该如何处理/保存这些设置/命令?

我的第一个想法是使用设置名称作为键和布尔值作为值的 HashMap,但这不适用于整数部分。我应该只在 Integer 中定义值并检查 1 和 0 吗?

我很乐意将 HashMap 与动态值一起使用。

干杯。

【问题讨论】:

  • 您可以使用Map<String, Object>,但您必须以某种方式跟踪什么类型。
  • 嗯,如果我走那条路,我可以创建具有 int 和 bool 作为 attr 的 obj 设置。两者的默认值为空,我可以检查哪个已设置。但这感觉就像走整数路线一样......感谢您的回答!它涵盖了我的动态值问题。如果你愿意,你可以把它写成答案。 :)

标签: java save settings


【解决方案1】:

我建议您使用XML 作为数据存储。 对于临时数据存储,您可以使用以下内容:

HashMap<String, TypeAndValuePare> = ...;

TypeAndValuePare 在哪里:

class TypeAndValuePare { int typeId; Object value; }

或者直接使用HashMap<String, Object>instanceof检查类型。

【讨论】:

  • 有趣。 xml 对我来说是新的,但每个人都向我推荐它,所以我会尝试使用它。这可能是最干净的解决方案。
  • xml很容易学,但是也有一些危险的地方...所以不要使用没有教程的java xml方法;)
【解决方案2】:

Java 有一个Properties 类,对于实现这样的设置非常有用。

【讨论】:

    【解决方案3】:

    我建议将设置存储在一个单独的类中,如下所示。

    public class SettingsManager{
    
     private boolean dota_player_units_auto_attack;
     private int dota_health_per_vertical_marker;
    
    }
    

    并且有 getter 来读取值和 setter 或构造函数参数来设置值。

    【讨论】:

    • 游戏有2500条指令。像这样保存它们是很混乱的。我不太确定是否应该将命令直接写入程序中,或者是否应该将其写入程序开始时读取的文件中。
    【解决方案4】:

    如果你想保持简单的配置结构,我的建议是你不应该将boolean 视为与整数不同的结构。每个配置都有自己的整数值,该应用程序应该正确响应。在您的情况下,如果变量 dota_player_units_auto_attack 的值为 1,则如果不是,则执行某些操作。然后没有。

    查看用于其他配置属性的相同逻辑。这就是为什么如果您实施一些创新,拥有此类文件的一致结构将在未来受益。

    我认为基本规则 KISS(保持简单愚蠢)在这里有其最佳应用。

    在您的问题的未来,您可以有一个枚举,并提供一个可能的选项,该选项提供应用程序在无法获得任何其他值时应该使用的默认值。这肯定会提高您的代码可读性和可靠性。

    【讨论】:

    • 如果没有输入任何有效值,则将设置默认值或旧的有效值(或者说什么都不会改变)。
    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多