use*_*483 5 c# constructor subclass
我目前正在XNA上玩游戏,我不确定如何进行以下操作......
我有这样的基础建筑物
public class BuildingsBase
{
private int _hp;
public int hp
{
get { return _hp; }
set { _hp= value; }
}
private int _woodRequired;
public int woodRequired
{
get { return _woodRequired; }
set { _woodRequired = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我有多个子类用于构建类型,例如.
public class TownHall:BuildingsBase
{
public int foodHeld;
public TownHall()
{
foodHeld = 100;
woodRequired = 500;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,设置构建子类的默认值的最佳方法是什么.
例如,市政厅的woodRequired被设置为500但在代码中的不同位置我需要访问此值,然后才能宣布市政厅的实例(当检查是否有足够的木材建造时).
我目前为每种建筑类型都有一个全局的默认变量数组,但我想知道是否有更好的方法来做到这一点.
if (Globals.buildingDefaults[BuildingType.Townhall].woodRequired < Globals.currentWood)
{
Townhall newTH = new Townhall();
}
Run Code Online (Sandbox Code Playgroud)
通常发生的情况是他们创建一个蝇量级(参见模式)。无论如何,该对象包含每个实例都相同的属性。无需单独更改(或实际存储)每个实例所需的木材量。
在一个非常基本的设计中,它看起来像:
class BuildingTemplate
{
public int WoodRequired { get; set; }
}
class Templates
{
public static BuildingTemplate TownHall { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
最后你会调用这样的方法:
public bool CanBuildTownHall(Player player)
{
return player.HasEnoughResources(Templates.TownHall);
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以使用字典进行模板检索,并且玩家不应该真正了解构建要求。我只是在这里说明这个模式。
如果玩家有足够的资源,您可以使用模板减去数量并创建TownHall. 最好能引用实际模板,因为您可能会访问对所有TownHalls 都有效的其他全局属性(例如音频/视觉/...)。
class TownHall
{
public TownHall(BuildingTemplate template)
{
_template = template;
}
}
Run Code Online (Sandbox Code Playgroud)