C# 高效存储RPG法术#

C# 高效存储RPG法术#,c#,C#,我目前正试图在C#中制作一个基于文本的RPG游戏,作为一个更大的项目,但是我被困在存储大量咒语的问题上(现在假设30个)。起初,我认为我可以让它与抽象类或接口一起工作,如下所示: 公共界面技巧{ 字符串说明{get;set;} 字符串名称{get;set;} 词典铸造(词典A); } 然后在宣布咒语的时候会出现类似的情况 公开课罢工:技能{ 公共词典(词典A){ //计算损坏的代码 } 公共字符串描述{get;set;}=“造成5点伤害。”; 公共字符串名称{get;set;}=false;

我目前正试图在C#中制作一个基于文本的RPG游戏,作为一个更大的项目,但是我被困在存储大量咒语的问题上(现在假设30个)。起初,我认为我可以让它与抽象类或接口一起工作,如下所示:

公共界面技巧{
字符串说明{get;set;}
字符串名称{get;set;}
词典铸造(词典A);
}
然后在宣布咒语的时候会出现类似的情况

公开课罢工:技能{
公共词典(词典A){
//计算损坏的代码
}
公共字符串描述{get;set;}=“造成5点伤害。”;
公共字符串名称{get;set;}=false;
}
当然,咒语要比这复杂得多。 然而,在做了这个之后,我意识到没有办法让我们说给一个玩家一个随机的咒语。如果有帮助的话,我打算像这样将法术储存在玩家的物品清单中

公共类玩家:实体{
公共整数Mana{get;set;}
公共列表清单{get;set;}
}

我正在寻找一种更有效的方法来储存法术,或者是一种给玩家一个随机法术的方法。提前感谢您的帮助。

您可以使用界面,并跟踪界面中的列表吗

//Create a generic interface to make multiple variants of skills / spells
public interface ISpell {
    string Name { get; set; }
    string Description{ get; set; }
    //Damage fixed
    double Damage { get; set; }
    //Damage through calculations
    double CalculateDamage();
}

//Your class
public class Strike : Skill, ISpell {
     public string Description { get; set; } = "Deal 5 damage.";
     public string Name { get; set; } = false;
     public double Damage { get; set; } = false;
     public double CalculateDamage() {
         //Implement
     }
 }

//New skill
public class FireBall : Skill, ISpell {
    public string Description { get; set; } = "Deal 5 damage.";
    public string Name { get; set; } = false;
    public double Damage { get; set; } = false;
    public double CalculateDamage() {
        //Implement
    }
}

//Your Player
public class Player : Entity {
    public int Mana { get; set; }
    public List<ISpell> Skills{ get; set;}
}
//创建一个通用接口来生成多种技能/法术变体
公共接口ISpell{
字符串名称{get;set;}
字符串说明{get;set;}
//损坏修复
双重伤害{get;set;}
//计算损失
双重计算图像();
}
//你们班
公开课罢工:技能,伊斯佩尔{
公共字符串描述{get;set;}=“造成5点伤害。”;
公共字符串名称{get;set;}=false;
公共双重伤害{get;set;}=false;
公共双计算图像(){
//实施
}
}
//新技能
公共级火球:技能,伊斯佩尔{
公共字符串描述{get;set;}=“造成5点伤害。”;
公共字符串名称{get;set;}=false;
公共双重伤害{get;set;}=false;
公共双计算图像(){
//实施
}
}
//你的球员
公共类玩家:实体{
公共整数Mana{get;set;}
公共列表技能{get;set;}
}

当然这是可以改进的,但这只是一个你如何解决/实施它的例子。

你有什么问题吗?我找不到给玩家随机施法的方法。例如,如果我有三种法术,分别叫火球、霜箭和治疗,我想随机给每个玩家一种。我放弃了这样存储的想法,所以我主要是寻找一种更好的方法来存储支持我上面所说的咒语。是的,这与我本来会使用的方法类似,但我现在的问题是,当某人说击败敌人时,我如何给他们随机的咒语。我可以使用
技能提供固定法术。添加(新火球())
或类似的东西,但我不知道如何将其随机化。给他们一个唯一的ID并使用Random(),它应该与法术中可能的ID范围相关联?(或者当然是类似的)这意味着你应该有一个“静态列表”,在某个地方定义了所有可能的法术,每个都有自己的ID。(数据库?)有一个静态列表是我想要避免的,因为如果添加越来越多的法术,它可能会变得非常长,但如果没有其他方法,我想我会这样做。(我不太熟悉数据库,我不想使用它们,特别是因为这是一个小型的脱机应用程序)好的,我知道您希望避免使用静态列表。你可以用反射来做,这通常不是那么好。我将使用数据库,您可以从中学习,并将这些知识应用到下一个项目中。(许多应用程序/游戏确实需要以这样或那样的方式存储数据)谢谢,我将首先尝试使用反射,如果这不起作用,我想我将查看数据库