第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在列表中搜索子類屬性

在列表中搜索子類屬性

C#
互換的青春 2022-10-23 13:54:17
現(xiàn)在我正在創(chuàng)建一個(gè)任務(wù)要求檢查器,以查看玩家是否能夠完成任務(wù)。我現(xiàn)在正在處理的任務(wù)類型是“庫(kù)存中有物品”,如您所見(jiàn),如果玩家在他/她的庫(kù)存中有一個(gè)或多個(gè)指定的物品,它將完成?,F(xiàn)在,我的確切問(wèn)題是什么?嗯,……物品。首先。Item是具有下一個(gè)結(jié)構(gòu)的類:public int ID { get; set; }public string Name { get; set; }public double Price { get; set; }public Item(int id, string name, double price){    ID = id;    Name = name;    Price = price;}并且有一個(gè)名為的類Tool擴(kuò)展了Item該類:public string Material { get; set; }public string Classification { get; set; }public Tool    (        int id,        string name,        double price,        string material,        string classification    ) : base(id, name, price){    Material = material;    Classification = classification;}現(xiàn)在,這就是我創(chuàng)建每個(gè)工具的方式:Items.Tool tool = new Items.Tool(1, "Shovel", 100, "Wood", "Poor");我的播放器對(duì)象有和這樣的項(xiàng)目列表:public List<Items.Item> InventoryItems { get; set; }它作為它的庫(kù)存。另外,要向列表中添加新項(xiàng)目,我使用此功能:player.AddItem(tool, 1);public void AddItem(Items.Item item, int quantity){    for(int i = 0; i < quantity; i++)    {        InventoryItems.Add(item);    }}另一方面,我當(dāng)前的任務(wù)類型“庫(kù)存中有物品”有一個(gè)屬性,同時(shí)也是一個(gè)物品列表:public List<Items.Item> RequiredItems { get; set; }這就是我將項(xiàng)目添加到此列表的方式:quest.AddRequiredItem(tool, 1);public void AddRequiredItem(Items.Item item, int quantity){    for(int i = 0; i < quantity; i++)    {        RequiredItems.Add(item);    }}為了完成這個(gè)任務(wù),玩家必須擁有與RequiredItems列表中相同數(shù)量(或更多)的物品。InventoryItems所以,如果這個(gè)任務(wù)要求玩家四處尋找 3 把劣質(zhì)木鏟,它的清單上應(yīng)該至少有 3 把劣質(zhì)木鏟。我的任務(wù)是一個(gè)名為HaveItemsInInventory實(shí)現(xiàn)下一個(gè)函數(shù)的類,以評(píng)估該條件:override public bool Accomplish(){    bool questAccomplished = true;    foreach (var group in RequiredItems.GroupBy(x => x))    {        if (Application._player.InventoryItems.Count            (                x =>                (                    x.Name == group.Key.Name &&                     x.Material == group.Key.Material &&                    x.Classification == group.Key.Classification                )            ) < group.Count())        {            questAccomplished = false;            break;        }    }    return questAccomplished;}
查看完整描述

1 回答

?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

編輯:我已經(jīng)編輯了我的答案以解決通用任務(wù)方法的想法。


如果您希望任務(wù)在多種不同類型上通用,您可能希望在 上實(shí)現(xiàn)IsSameorIsEquivalent方法Items.Item,然后繼承該方法。您甚至可以覆蓋 Object.Equals 方法(這可能是更合適的方式)。


class Item

{

    public virtual bool IsSame(Item comp){ return comp.Name == Name; }

}


class Tool: Item

{

    public override bool IsSame(Item comp)

    {

        return base.IsSame(comp) && (comp is Tool) && ((Tool)comp).Material == Material && ((Tool)comp).Classification == Classification;

    }

}

然后在您完成迭代中:


override public bool Accomplish()

{

    bool questAccomplished = true;

    foreach (var group in RequiredItems.GroupBy(x => x))

    {

        if (Application._player.InventoryItems.Count

            (

                x =>

                (

                   x.IsSame(group.Key)

                )

            ) < group.Count())

        {

            questAccomplished = false;

            break;

        }

    }


    return questAccomplished;

}


查看完整回答
反對(duì) 回復(fù) 2022-10-23
  • 1 回答
  • 0 關(guān)注
  • 118 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)