【问题标题】:C# Object selection and manipulationC# 对象选择和操作
【发布时间】:2018-08-12 18:10:10
【问题描述】:

我的目标是:
创建多个对象(在我的例子中是村庄)并具有一些属性,我想经常更改这些属性。

目前的状态是什么
我用变量创建了一个对象。

那么现在的问题是什么?
我创建了一个可更改的名称(默认值:“village00”+i)和名称为:“BigBadCity”的村庄00(静态 ID)。

但我现在想将对象(可能是农场)的特定变量更改为 +1 级。那么如何选择要更改变量的村庄呢?

信息

  • 编程语言 C#
  • 我已经搜索了解决方案,但没有找到准确的解决方案
  • 用户体验
  • 不是 C# 的新手,而是 OOP 的新手

  • 我正在用 C# 编写“部落战争 1”(母语中的“Die Stämme”)...如果我的描述是什么想要的很糟糕;)
  • 我的班级代码

    namespace CS_DieStaemme
    {
        class villageObjekt
        {
            //Default constructor
            public villageObjekt()
            {
                str_villageCount = "village";//count all villages
                str_name = "village";   //default name
                sho_points = 0;         //Start points
                byt_cord_X = 0;         //default cords x (need to change later)
                byt_cord_Y = 0;         //default cords y (need to change later)
    
                sho_wood = 0;
                sho_clay = 0;
                sho_iron = 0;
    
                byte_mainBuilding = 1;
                byte_storage = 1;
                byte_farm = 1;
                byte_church = 0;
                byte_casern = 0;
                byte_stable = 0;
                byte_workshop = 0;
                byte_statue = 0;
                byte_market = 0;
    
            }
    
            //Default constructor
            public villageObjekt(
                           byte village_byt_villageCount,//village count
                           byte village_byt_cord_X,    //Village cord x    (ex. 245)
                           byte village_byt_cord_Y     /*Village cord y    (ex. 632)*/)
            {
                str_villageCount += village_byt_villageCount; //count up village
                byt_cord_X = village_byt_cord_X; //set cords
                byt_cord_Y = village_byt_cord_Y; // set cods
            }
    
            //Member variables
            public string str_villageCount;
            public string str_name;    //Village name      (ex. village012)
            public short sho_points;   //Village points    (ex. 567pt)
            private byte byt_cord_X;    //Village cord x    (ex. 245)
            private byte byt_cord_Y;    //Village cord y    (ex. 632)
    
            //Production variables
            public short sho_wood;
            public short sho_clay;
            public short sho_iron;
    
            //Buildings variables
            public byte byte_mainBuilding;
            public byte byte_storage = 1;
            public byte byte_farm = 1;
            public byte byte_church = 0;
            public byte byte_casern = 0;
            public byte byte_stable = 0;
            public byte byte_workshop = 0;
            public byte byte_statue = 0;
            public byte byte_market = 0;
    
        }
    }
    

    【问题讨论】:

    • 我几乎不明白您的问题是什么,但如果我是正确的,您想更改您创建的对象的成员的值吗?
    • 该网站真正希望您提供代码的一个原因是它消除了语言障碍。它还可以增加清晰度。这些是什么物品?在某种程度上,它们听起来像 UI 对象,但这并不确定。最有可能而不是an Object with variables 创建一些属性,然后根据需要更改它们。如果这是一个问题,请提供代码来说明它是如何以及为什么是一个问题。事实上,我的倾向是这太宽泛了。
    • 您好,欢迎来到 Stack Overflow。请阅读How to Ask,然后提交minimal reproducible example。另外,请去掉那些byte_str_sho_等前缀。它们为您的代码提供零值并妨碍可读性。

    标签: c# oop


    【解决方案1】:

    您可以将所有村庄存储在列表var villages = new List<villageObjekt>(); 中,然后选择并编辑您想要的村庄:

    var villageName = "<Insert the name of the village you want to edit>";
    var villageToEdit = villages.First(v => v.str_name == villageName);
    //edit the village
    villageToEdit.byte_farm++; //farm level-up
    villageToEdit. ...
    

    使用此列表,您必须使用 villages.Add(village); 将村庄添加到列表中,或者您在该列表中创建村庄 villages.Add(new villageObjekt());

    【讨论】:

    • 谢谢。你的遮阳篷帮了我很多忙。
    猜你喜欢
    • 2011-05-28
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多