首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人知道如何对这种关系进行建模吗?

有人知道如何对这种关系进行建模吗?
EN

Stack Overflow用户
提问于 2021-07-08 08:24:47
回答 2查看 37关注 0票数 0

我有AI玩家,他们可以参与某些工作。所以我必须找到最好的方式来模拟这种关系。餐厅员工从餐厅库存中获取食物,并将其端到餐桌上。在这项工作中,餐厅库存是"FoodStore“,桌子是送货点。我对肉类供应商也有同样的工作理念,但他的“食品店”是配送工厂,他的送货点是餐厅库存。这三个对象都必须通过抽象类或接口“成为”目标对象,我还没有决定。

主要问题是我不能检查对象的"FoodAvailable“属性,因为我将它们作为父类”目标“进行迭代,以保持事物的抽象,以便肉类供应商和餐馆员工都可以实现相同的”工作“类。我需要能够迭代需要食物的潜在投递点,同时还需要检查它们的资源值,所以我需要投递点对象既满足这两个属性,又以某种方式抽象。

让事情变得更复杂的是,我还有其他的人工智能,它们会来吃桌子上的东西。我看起来做得很好。模拟这种特殊的关系是难倒我的。我不认为代码在这种情况下是相关的,因为我只需要一个如何表示它的高级想法。我可以提供代码,如果它是有帮助的。

EN

回答 2

Stack Overflow用户

发布于 2021-07-08 12:22:36

我想我知道你想要什么了。有几个选项浮现在脑海中。

  1. 使用接口或继承来标识具有FoodAvailable属性的对象。我假设您有一个要迭代的对象集合/列表,它涵盖了question.
  2. Nested对象中的所有对象。作业可能有子作业,因此当您在对象上检查FoodAvailable时,它也会对它们拥有的所有子对象进行FoodAvailable检查-如果有子对象。

这里有一些显示选项2的伪代码。不确定我的逻辑是否100%正确,但总体思路应该是相当清晰的:

代码语言:javascript
复制
class Job(){

  Job[] DependentJobs { ... }
  Food MyFood { ... }

  // Returns true if all required food is ready.
  bool FoodAvailable {

    get {
      // First check if this object has food in it's own right: 
      if(MyFood != ready)
        return false

      else
      // Second, if the first check passes, check child / dependent jobs: 
        foreach(job in DependentJobs){
          if(job.FoodAvailable == false) return false
        }
        return true
    }

  }

}
票数 0
EN

Stack Overflow用户

发布于 2021-07-08 17:11:53

这是演示过程

代码语言:javascript
复制
interface ItemInterface<T>
{
    /// <summary>
    /// itemCall
    /// </summary>
    /// <param name="args"></param>
    void SetItemData (T args);
}

public class TempItem<T>:ItemInterface<T>
{
    /// <summary>
    /// itemCall
    /// </summary>
    /// <param name="args"></param>
    void SetItemData (T args)
    {
        if(T is int a)
        {
            int b = a;
        }
    }
}

public void Main()
{
    object obj = createObjItem();
    //"SetItemData" is ItemInterface call Fun name
    MethodInfo method = obj.GetType ().GetMethod ("SetItemData");
    if( method != null )
    {
        int data = 1;
        method.Invoke (obj , new object [1] { data });
    }
}

private object createObjItem()
{
    TempItem<int> item = new TempItem<int>();
    //transform to obj
    object obj = item;
    return obj;
}

你可以看到查看反射和属性

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68294242

复制
相关文章

相似问题

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