首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >世界冒险游戏/RPG资源系统

世界冒险游戏/RPG资源系统
EN

Code Review用户
提问于 2018-10-19 14:02:18
回答 1查看 114关注 0票数 3

我正在开始开发一个冒险游戏/RPG的漫长过程,我希望得到一些关于我正在开发的资源系统的评论。它的工作原理是,一个资源对于世界上的每一个资源都是通用的。每个资源都有一个名称、一个随机产量和一个随机质量。因此,我已经为每个资源将具有的泛型属性和函数创建了一个接口。

接口

代码语言:javascript
复制
public interface IResource{
    string Name {get;set;}
    string Quality {get;set;}
    int Yield{get;set;}
    string ConvertQualityToString();
    int GetResourceYield();
}

然后在实际的资源基类中实现接口。

Implementation

代码语言:javascript
复制
public class Resource : MonoBehaviour, IResource{
    public string Name { get; set; }
    public string Quality { get; set; }
    public int Yield { get; set; }

    public string ConvertQualityToString(){
        var val = Random.Range(0, 3);
        string quality;
        switch (val){
            case 1:
                quality = "Good";
                break;
            case 2:
                quality = "Great";
                break;
            default:
                quality = "Poor";
                break;
        }
        return quality;
    }

    public int GetResourceYield(){
        var val = Random.Range(1, 25);
        return val;
    }
}

最后,我创建特定的资源本身,并将其附加到检查器中的游戏对象。

资源类

代码语言:javascript
复制
public class Granite : Resource{
    void Start(){
        Name = "Granite";
        Quality = ConvertQualityToString();
        Yield = GetResourceYield();
    }
}

这是运行这个系统的正确方法吗?显然,当我在启动时记录值时,YieldQuality是随机的,并且我创建的每个资源对象的Name都是正确的。有更好的方法吗?有什么需要我改变的吗?提前谢谢。

EN

回答 1

Code Review用户

发布于 2018-10-19 14:50:37

几个注意事项:

  • 所有IResource属性都有公共设置程序。您完全确定其他代码应该能够修改这些代码吗?我建议让这些只读,除非你有具体的理由不这样做。
  • ConvertQualityToStringGetResourceYield看起来像内部助手方法。让它们成为IResource接口的一部分会创建一个非常令人困惑的API:resource.Yieldresource.GetResourceYield()之间有什么区别?按照代码的结构方式,我希望这些方法是protected
  • 你确定stringQuality的好类型吗?如果您有固定数量的质量,enum是一个更强类型和描述性的选择。如果不同的质量有不同的特性,那么也许Quality类更有意义。尽量避免编写“输入错误”的代码。
  • ConvertQualityToString为每种质量提供了33%的机会。同样,GetResourceYield总是在1到25之间产生收益。你确定这适用于所有资源和任何情况吗?质量和产量是否应该由Resource实例本身决定?例如,如果一些敌人应该有更高的机会放弃高质量的资源呢?或者,如果你想提供玩家升级来提高平均资源产量,那该怎么办?
  • 那个Granite类的意义是什么?其中没有自定义逻辑,而且资源名称本身足以区分不同的资源。
  • ConvertQualityToString中,不需要这个本地quality变量:您可以让每个case直接返回一个值(这也允许您删除那些break语句)。
  • ConvertQualityToString是一个奇怪的名字:它并没有真正转换任何东西。不准确和令人困惑的名称往往会使代码更难以使用。
票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/205897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档