C# 经典RPG项目处理
如何以有组织且易于管理的方式组织项目(因为有不同类型的项目) 我的想法是有一个ItemManager来加载并存储所有项目。然而,这是我不确定的。只有武器有最小和最大伤害。只有盔甲才有盔甲。我真的应该将它们全部存储为项目吗 有了传统,我可以解决这个问题(我想!) ItemManager.csC# 经典RPG项目处理,c#,structure,C#,Structure,如何以有组织且易于管理的方式组织项目(因为有不同类型的项目) 我的想法是有一个ItemManager来加载并存储所有项目。然而,这是我不确定的。只有武器有最小和最大伤害。只有盔甲才有盔甲。我真的应该将它们全部存储为项目吗 有了传统,我可以解决这个问题(我想!) ItemManager.cs using UnityEngine; using System.Collections; using System.Collections.Generic; public class ItemManager
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class ItemManager : MonoBehaviour {
private static List<Item> items;
public ItemManager () {
items = new List<Item> ();
}
void Awake () {
DontDestroyOnLoad (this);
// load all items from file
}
public static int Length {
get {return items.Count;}
}
public static Item Item (int index) {
return items [index];
}
}
using UnityEngine; // only used for debug purposes
public class Item : MonoBehaviour { // : MonoBehaviour are for debug purposes
private string _name;
private string _desc;
private int _maxQuantity; // quest items wont have one
private int _category;
private bool _dropable; // quest items wont have one
private int _price; // quest items wont have one
public Item () {
_name = string.Empty;
_desc = string.Empty;
_quantity = 0;
_maxQuantity = 0;
_category = 0;
_dropable = false;
_price = 0;
}
#region Setters and Getters
public string Name {
get {return _name;}
set {_name = value;}
}
public string Desc {
get {return _desc;}
set {_desc = value;}
}
public int MaxQuantity {
get {return _maxQuantity;}
set {_maxQuantity = value;}
}
public int Category {
get {return _category;}
set {_category = value;}
}
public bool Dropable {
get {return _dropable;}
set {_dropable = value;}
}
public int Price {
get {return _price;}
set {_price = value;}
}
#endregion
}
// enum used to identify categories by name
public enum ItemCategory {
Miscellaneous,
Quest,
Consumable,
Weapon,
Armor,
Gem,
Resource,
};
当变量具有getter和/或setter时,我通常(尝试!)使用u作为前缀
项目的“实例”存储将在角色/团队级别完成。保存项目和数量
以此为起点,我必须解决许多问题,即如何处理变量的实际存储和访问
我实际上如何包装物品的存储和装载过程
只有武器有最小和最大伤害。只有盔甲才有盔甲。我真的应该将它们全部存储为项目吗
您可以为继承自物品
类的武器
和盔甲
定义另一个类。将您的物品
类抽象化,并在其中定义公共属性
只需获取并设置一个变量,您不需要这样的属性:
public string Desc {
get {return _desc;}
set {_desc = value;}
}
如果在获取和设置值时没有不同的逻辑,请使用属性:
public string Desc { get; set; }
我会使用接口:一个基本接口用于常见的东西,如ID、名称等,其他接口用于武器/装甲等。 然后,您可以在运行时测试实现了哪些接口,并且可以相应地进行操作(即显示伤害或护甲值)。
与继承相比,它的主要优点是易于组合,并且可以进行duck类型输入,例如,在需要时可以使用椅子和武器。这个问题似乎与主题无关,因为它属于我,我认为它是在您需要检查代码时提出来的?我不需要,我需要知道如何实际实现代码才能让它工作。只要这样做,你就会看到。@KonradKokosa:我想CR.SE只用于工作代码。在我的项目管理器中,我应该有一个每类项目的列表?在盔甲和武器上,我应该保存它们属于哪个插槽?例如,如果我有头盔或斗篷,我会将其存储在装甲类?@Emz中,你可以将盔甲和武器存储在列表中,因为它们将从物品类继承,在你使用GetType方法对物品类型进行函数检查时,如果它是盔甲,则将其投射到盔甲
(盔甲)物品
像那样。然后你可以做你想做的。我有2件物品,剑和头盔,剑有2点伤害。头盔有2件盔甲。我应该做以下事情<代码>项目武器=新项目武器()代码>武器。伤害=2代码>物品。添加(武器)代码>。那么为了得到损坏,我将使用typecast(我想是带有if检查的)?如何将损害纳入我的物品清单?这将花费比我想象的更多的时间来做出决定,但我感谢您添加了另一层信息。一旦我决定接受答案,我会回来接受(如果我选择的话)。我希望有一种魔药能解决我所有的问题。为什么我没有更多的时间?--我读了两篇关于如何实现支持duck类型的接口的文章,它在基础上似乎与继承差不多?不同的是,我根据项目的类型将项目存储在不同的列表中?不,您没有将项目存储在不同的列表中。您有一个列表,其中包含与项目类似的所有内容。一些物品有一个描述其他行为(如损坏等)的界面。当用户选择这样的物品时,qou可以根据确切的界面执行其他操作:作为tipp:do read HEad first设计模式-这确实有助于理解这些概念。那个654页的?我从来没想过有人会买它,那个链接是我发现的第一个东西。不过谢谢,我会读的。这意味着做出决定所需的时间比我想象的要多,但我感谢您添加了另一层信息。一旦我决定接受答案,我会回来接受(如果我选择的话)。我希望有一种魔药能解决我所有的问题。为什么我没有更多的时间--