我有AI玩家,他们可以参与某些工作。所以我必须找到最好的方式来模拟这种关系。餐厅员工从餐厅库存中获取食物,并将其端到餐桌上。在这项工作中,餐厅库存是"FoodStore“,桌子是送货点。我对肉类供应商也有同样的工作理念,但他的“食品店”是配送工厂,他的送货点是餐厅库存。这三个对象都必须通过抽象类或接口“成为”目标对象,我还没有决定。
主要问题是我不能检查对象的"FoodAvailable“属性,因为我将它们作为父类”目标“进行迭代,以保持事物的抽象,以便肉类供应商和餐馆员工都可以实现相同的”工作“类。我需要能够迭代需要食物的潜在投递点,同时还需要检查它们的资源值,所以我需要投递点对象既满足这两个属性,又以某种方式抽象。
让事情变得更复杂的是,我还有其他的人工智能,它们会来吃桌子上的东西。我看起来做得很好。模拟这种特殊的关系是难倒我的。我不认为代码在这种情况下是相关的,因为我只需要一个如何表示它的高级想法。我可以提供代码,如果它是有帮助的。

发布于 2021-07-08 12:22:36
我想我知道你想要什么了。有几个选项浮现在脑海中。
FoodAvailable属性的对象。我假设您有一个要迭代的对象集合/列表,它涵盖了question.FoodAvailable时,它也会对它们拥有的所有子对象进行FoodAvailable检查-如果有子对象。这里有一些显示选项2的伪代码。不确定我的逻辑是否100%正确,但总体思路应该是相当清晰的:
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
}
}
}发布于 2021-07-08 17:11:53
这是演示过程
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;
}你可以看到查看反射和属性
https://stackoverflow.com/questions/68294242
复制相似问题