OOP设计技巧在RPG风格游戏中的附加效果

时间:2017-06-08 16:18:00

标签: c# oop

创建一个与RPG相关的程序,我想为我的角色技能添加各种额外的效果(随着时间的推移,buff等等......)

到目前为止,我做了类似这样的事情(C#语法)

public class Paladin : Character
{
   public Paladin()
   {
      BaseMP = 7080;
      caster = false;
      baseGCD = 2.43;
      aadelay = 2.24;
      aapotency = AAPotency.Attack;

      Moveset = new List<IMove>()
      {
        new Weaponskill("Fast Blade", "", 150, 150, false, false, baseGCD, null),
        new Weaponskill("Riot Blade", "Fast Blade", 100, 230, false, false, baseGCD, new RiotBlade_Effect()),
        new Weaponskill("Goring Blade", "Riot Blade", 100, 240, false, false, baseGCD, new DoT(50, 24)),
        new Spell("Holy Spirit", 430, 1440, false, 2.5, null),
        new Ability("Requiescat", 350, true, 60, false, new Requiescat_Effect()),        
      };
    }
}

WeaponskillSpellAbility都是接口ISkill的所有实现,代表了我的一个角色技能。

如果没有特殊效果,它们的构造函数的最后一个参数为null,或者应该包含此技能的特殊效果。

为了实现它们,我考虑了一种策略设计模式(或者我认为是战略设计模式,我第一次尝试实现它)。

 public interface IStrategy
 {
   void execute();
 }

 public class RiotBlade_Effect : IStrategy
 {
     public RiotBlade_Effect()
     {

     }

     public void execute()
     {

     }
}

我有两个问题。

首先,如果需要更改IStrategy实现,Character实现如何才能知道我的Paladin()属性? (例如,如果我想降低或增加execute()中设置的某个属性)。

其次,我如何处理# verbose version Select-String "THE SUM OF SPECIFIED" -Path "C:\temp\test.txt" -Context 4,0 | foreach { $_.Context.PreContext[0]; $_.Line} # or short version (with alias) sls "THE SUM OF SPECIFIED" "C:\temp\test.txt" -Co 4,0 | % { $_.Context.PreContext[0]; $_.Line} 的多种可能的返回类型,具体取决于我将实现的效果?

0 个答案:

没有答案