c# - 游戏的类实例或继承类?最佳实践
问题描述
所以我正在构建一个小型游戏框架来加强抽象类和接口。我一直在为一些机械师建立课程,但我不确定如何处理最后的作品。
这是类框架(删除了一些杂项方法):
public abstract class Ability
{
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual string Type { get; set; }
public virtual string Stat { get; set; }
public virtual float Scale { get; set; }
public virtual float MPCost { get; set; }
public virtual float SPCost { get; set; }
}
public class Attack : Ability
{
public float BaseDmg { get; set; }
public bool isUnblockable { get; set; }
public float GetDmg(int stat)
{
return BaseDmg * (1 + stat * Scale);
}
}
现在对于我想要创建的实际攻击,我应该像以前一样实例化吗?
public static class AllAttacks
{
//Physical Attacks
public static Attack slash = new Attack();
//Magical Attacks
public static Attack push = new Attack();
public static void Generate()
{
//Physical Attacks
slash.Name = "Slash";
slash.Description = "A simple but effective strike.";
slash.Type = "physical";
slash.Stat = "str";
slash.Scale = 0.1F;
slash.MPCost = 0;
slash.SPCost = 1;
slash.BaseDmg = 5;
slash.isUnblockable = false;
//Magical Attacks
push.Name = "Push";
push.Description = "A powerful telekinetic strike.";
push.Type = "magic";
push.Stat = "int";
push.Scale = 0.1F;
push.MPCost = 1;
push.SPCost = 0;
push.BaseDmg = 5F;
push.isUnblockable = false;
}
或者我应该为每个独特的项目创建一个新的继承类,然后在 Fight 类中实例化它们?如果我这样做,这些应该是静态的还是非静态的?
public class Slash : Attack
{
//Code Here
}
谁能指出我的最佳实践或最有效的方法是什么?
解决方案
通常有两个主要原因来定义一个新类:新行为和/或新合同,即为前一个原因更改实现或为后者添加新的公共成员。现在考虑您的示例,我没有看到各种攻击类型的合同或行为发生了变化(仅更改了状态),因此我看不到为它们定义新类的理由。然而,从可读性的角度来看,该Generate
方法并不是最优的——我会为不同类型的攻击创建单独的方法,这将清楚地表明它们创建的攻击类型。
至于实例化方面,如果你不打算改变你的攻击实例而不是在一个地方创建它们是很好的,否则你需要在使用实例的级别上控制每个攻击实例的生命周期。
推荐阅读
- node.js - 如何在 macOS(mojave 10.14)上优雅地停止 nodejs 服务器侦听器?
- hibernate - 在应用程序中使用休眠序列作为通用序列
- html - 选项标签禁用属性
- c# - 身份4、程序化登录
- java - 如何查询三 (3) 个表中共有一个相同的字段并按另一个字段对结果进行分组?
- swift - reduce(_:_:) 函数在 Swift 中的作用是什么?
- qt - 当 mousePressEvent 和 mouseReleaseEvent 被覆盖时,clicked 不起作用
- javascript - 如何使用 getElementsByTagName() 方法获取 body 标签的内容并将其存储在变量中
- android - android:/vendor 文件夹中的设备上没有剩余空间
- jpa - 保存列表
通过 jpa 没有创建新表