[好,所以我有一个2D对象数组,它们在2D空间中表示,列和原始数据转换为(x,y)点(笛卡尔坐标系)。
当我想从一个物体进入他们的邻居时,问题就开始了。
我立即想到我可以通过从2j数组的迭代中查找i,j来访问它们,如下所示:
(i,j+1)
↑
(i-1,j) ← (i,j) → (i+1,j)
↓
(i,j-1)
直到我的网格形状变成非矩形形状,一切都很好。
然后,一个Java家伙告诉我,我应该使用自定义数据结构来保存对象的引用,该对象实际上是一个Double Link List,不仅具有下一个和上一个指针,而且还具有top,down,right和left指针。我不应该为常规数组编写这样的代码,而要使用适当的数据结构,这将使我在如何为对象插入,删除,初始化以及许多其他功能方面拥有更多的能力和灵活性。
出于某种原因,我认为他是对的。
这样,我认为我可以创建更复杂的功能,例如使所有对象从一个点开始半径内。这是出于游戏开发的目的,稍后将针对诸如A *的用于寻路的算法进行开发并在此结构上运行。
所以我的问题是:c#中是否有任何内置结构可以帮助我解决这个问题,如果没有,我应该尝试从头开始创建一个自定义结构还是尝试扩展继承已内置的c#结构。该结构的正确术语是什么? Maxtrix链接列表?多路链接列表?
P.S。我避免发布代码,因为它来自自定义游戏引擎,需要大量解释。
只是一个主意...
我将开发一个类(即Space
),其中包含另一个自定义类(即Point
)的简单列表。主类可以具有一些定义空间形状和扩展的属性,并且可以实现一系列的问题方法(Point GetNearest(Point p)
,List<Point> GetPointsInRadius(int center, int radius)
,...),每个方法都会迭代抛出点列表,以及一组添加/删除/移动点数方法
您的Point
类具有属性列表(int x, int y, Point top, Point down, Point left, Point right
)和一系列方法(int DistanceFrom(Point p), bool IncludedIn(int center, int radius), int DistanceFromLeft/Right/Top/Down()
,...依此类推