Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 二维平面中实体的人工智能(或至少路径生成) TL;博士_C#_Xna_Artificial Intelligence_2d Games - Fatal编程技术网

C# 二维平面中实体的人工智能(或至少路径生成) TL;博士

C# 二维平面中实体的人工智能(或至少路径生成) TL;博士,c#,xna,artificial-intelligence,2d-games,C#,Xna,Artificial Intelligence,2d Games,给定一个可以包含障碍物(静态物体)或实体(如坦克或车辆)的二维平面(比如800x600像素,甚至4000x4000),计算机控制的坦克如何在追踪其他坦克时在地图上导航而不与静态物体碰撞?请注意,每个静态对象或实体都可以360度自由旋转,并且具有任意大小 上下文 我真正想做的是开发一款坦克游戏。它最初是作为一款名为“战城”的老式街机游戏的现代替代品而诞生的。首先,考虑到13x13网格、固定大小和无旋转,开发AI可能很容易。但是现在,由于自由旋转和任意大小,我找不到在这种情况下复制这种行为的方法 计

给定一个可以包含障碍物(静态物体)或实体(如坦克或车辆)的二维平面(比如800x600像素,甚至4000x4000),计算机控制的坦克如何在追踪其他坦克时在地图上导航而不与静态物体碰撞?请注意,每个静态对象或实体都可以360度自由旋转,并且具有任意大小

上下文 我真正想做的是开发一款坦克游戏。它最初是作为一款名为“战城”的老式街机游戏的现代替代品而诞生的。首先,考虑到13x13网格、固定大小和无旋转,开发AI可能很容易。但是现在,由于自由旋转和任意大小,我找不到在这种情况下复制这种行为的方法

计算机控制的坦克必须能够在布满障碍物的地图上导航并追踪玩家。我认为主要的问题是产生所有可能的坦克去;碰撞系统已实施,等待使用。例如,坦克可以通过调整旋转角度来适应狭小的空间(例如,可以是对角的)

虽然我在编程方面有相当多的经验,但这是我力所不及的。尽管我更喜欢一个关于坦克人工智能实现的更广泛的答案,但一种生成上述路径的方法可能就足够了

起初我想使用图形,但考虑到不同的坦克有不同的尺寸,旋转的事情让我头疼,我不知道如何应用它们。再说一次,如果我使用图形,一个节点代表什么?像素?16000000个节点将是一个相当大的数目

我用的是什么
  • C#作为主要的编程语言
  • 用于渲染的单游戏(XNA框架替代方案)
  • RotatedRectangle类()

我期待着你的指导方针。谢谢你抽出时间

我一直在做一个人群模拟项目,包括路径发现和障碍物/其他人回避

我们使用了重铸导航,这是一个多功能库,它实现了最先进的导航网格算法。 您可以在此处获得更多信息:

在我们的项目中,它被证明是可靠的,并且非常可配置。即使它是用C++编写的,你也可以很容易地找到/制作一个包装器(在我们的例子中,我们已经在Javascript上使用了它在NoDEJS服务器上包装) 如果您不想使用此库,仍然可以查看导航网格,这是重铸背后的基本理论


我希望这会有帮助

导航网格,这就是你要找的。解释一下,理论上很简单。你构建你的世界(2D/3D),并在创建后生成一个新的网格,告诉实体它们可以移动的位置,而不会与周围环境发生碰撞。然后它们在这个网格上移动。下一步是路径生成算法,基本上没有什么其他的,然后在数学上检查如何在网格上到达目标。在一个实际的导航网格上,如果你想到一个网格,检查哪些字段要移动以获得最短的路径,那么这是相当复杂但很容易的

简而言之,你需要你的世界的任何类型的附加层,告诉人工智能它可以移动到哪里,以及任何适合你类型层的算法来计算路径


作为提示,以unity为例,有许多免费的好构建解决方案。此外,如果没有unity这样的游戏引擎,您还可以找到一堆很好的库来实现这一点。

这看起来是一个很棒的库,但我有两件事要说:1。我希望它是一个.NET库,我将使用非托管库作为最后手段。2.它的目标是3D环境,但在2D环境中使用它不会过度工程化吗?非常感谢你!我刚刚更新了帖子;)我们一直在用它包装Javascript,所以我想找到一个C#包装是可能的!:)是的,它是为3D环境设计的,但是性能真的很好!即使它有点过于工程化,也不应该影响游戏的FPS;)似乎确实有一个C#的端口。我仍然需要根据我的游戏来找出如何使用它;问题是它还有一个地图编辑器,所以可能需要动态生成。关于导航网格的事情似乎真的很有希望,我需要做一些研究…@TomG你的Javascript包装器在哪里可用?