Questions tagged «algorithm»

算法用于计算,数据处理和自动推理。更准确地说,算法是一种有效方法,表示为用于计算函数的定义明确的指令的有限列表。

4
对可以互相看到的单位进行分组的最快方法?
在我正在使用的2D游戏中,游戏引擎可以为我提供每个单位在其视图范围内的其他单位的列表。 我想知道是否存在一种将单元划分为组的既定算法,其中每个组将由彼此“连接”(甚至通过其他单元)的所有那些单元定义。 一个例子可能有助于更好地理解这个问题(E =敌人,O =自己的单位)。首先,我将从游戏引擎获取的数据: E1 can see E2, E3, O5 E2 can see E1 E3 can see E1 E4 can see O5 E5 can see O2 E6 can see E7, O9, O1 E7 can see E6 O1 can see E6 O2 can see O5, E5 O5 can see E1, …
12 algorithm 

3
不断发展的地形生成器
我最近才问这个问题,得出的结论似乎是,尚未真正使用基因编程(GP)进行程序游戏内容创建。我想改变那个。 我相当确定可以部署GP来帮助查找新的地形生成器。我要解决的问题是如何实现? 所有GP都有一些可以归纳为所有GP的基本部分(父母选择,重组,突变,存活)。我可以自己解决这些问题。问题出现在特定问题部分。这些就是您在代码中表示问题的方式(通常使用一棵树),以及如何评估生成器的性能(可以是一个或多个值)。 简而言之,这些问题是: 您将如何以可以解析为树的方式表示地形生成器? 这将产生什么样的地形?(高度图,顶点图...) 基于hightmap的信息越少越好。 用什么来评估解决方案的适用性? 例如:我们想要有趣的地形,因此我们可以让其中一个值为地形上每个顶点的法线平均变化。

1
检测网格中的节点序列
鉴于下图,我需要检测板上的最佳序列(绿线)。蓝/红线表示可能的动作,但不是最佳动作。 规则如下: 您可以移动到与您的邻居相同且相同的任何图块(对角线有效) 一旦您访问了图块,便无法再次访问它。 我已经考虑过遍历每个节点,并查看其邻居,然后递归地遍历。一旦找到可行的动作,就可以将其放入结构中。一旦找到所有可能的移动,我就选择节点数最高的移动。当一个节点具有多个匹配的邻居时,将变得更加困难。 那么,我可以使用某些算法吗?我当时在想某种洪水填充,但这不符合规则2。 根据要求,以下是类似游戏视频。http://youtube.com/watch?v=eumnCTG0AE8
12 algorithm 

4
迷幻游戏背后的逻辑
在我正在做的原型中,有一个类似于宝石迷阵的迷你游戏。使用二维数组(int[,])的网格,如何知道用户何时形成比赛?我只关心水平和垂直方向。 我想着从头顶上往各个方向看。就像是: int item = grid[x,y]; if(grid[x-1,y]==item) { int step=x; int matches =2; while(grid[step-1,y]==item) { step++; matches++ } if(matches>2) //remove all matching items } else if(grid[x+1,y]==item //.... else if(grid[x,y-1==item) //... else if(grid[x,y+1]==item) //... 似乎应该有更好的方法。在那儿?

3
将粒子绘制为平滑斑点
我是游戏/图形开发的新手,并且正在玩2D粒子。我想像液体/水一样将斑点彼此靠近地绘制为斑点。我不想绘制重叠的大圆圈,因为斑点不会很平滑(太大)。我不是很了解物理学,但是我想我想要的是看起来与表面张力相似的东西。 我无法在stackexchange或Google上找到任何内容(也许我不知道正确的关键字?)。到目前为止,我已经找到了两种可能的解决方案,但是我无法找到有关算法的任何具体信息。 其中之一是计算我认为是斑点的粒子的凹壳。我可以通过创建一个等效类(基于“彼此靠近”的关系)来计算blob。奇怪的是,我无法找到任何算法来解释如何计算凹面船体。许多文章(以及stackexchange中的文章)都链接到执行此操作的库或商业产品(我需要库才能在C#中工作),但从来没有任何算法。同样,此解决方案可能会遇到一个圆形的粒子问题,该粒子无法检测到中间的空白区域。 在研究凹壳时,我偶然发现了一种叫做alpha形状的东西。这似乎正是我想要做的,但是就像凹壳一样,我还没有找到任何解释它们实际工作原理的资料。我找到了一些演示材料,但还不够继续。就像我以外的每个人都知道的一个大秘密:-/ 计算凹壳或alpha形状后,我想使其成为贝塞尔曲线以使其平滑且美观。 尽管我确实发现自己的方法过于复杂,但是也许我正在尝试以错误的方式解决此问题?如果您可以对我的问题提出其他解决方案,或者解释我所缺少的内容,我将非常高兴和感激:-) 谢谢。

5
为什么强化学习很少在寻路中使用?
最古老的最短路径图理论算法A *及其后续改进(例如,层次标注A *)显然是游戏开发中寻路的首选技术。 相反,在我看来,RL是在游戏空间中移动角色的更自然的范例。 但是我还不知道有一个游戏开发人员已经实现了基于强化学习的寻路引擎。(我不能由此推断出RL在寻路中的应用为0,只是相对于A *和朋友而言,它很小。) 不管是什么原因,这并不是因为这些开发人员没有意识到RL,事实证明RL在游戏引擎的其他位置经常使用。 这个问题不是在寻路中对RL提出意见的借口。实际上,我假设对A *等人的默认偏好。对RL的理解是正确的-但这种偏爱对我来说并不明显,我对此感到非常好奇,尤其是对于任何尝试使用RL进行寻路的人。

4
手势识别策略
与Wii一起工作时,我经常发现必须识别简单的手势,到目前为止,我主要能够研究加速度的大小,以便识别游戏设计文档中要求的手势,但是我想创建一个更强大的系统,允许“记录”示例手势并识别复杂手势。 您过去使用过哪些策略?他们为什么工作?他们为什么不工作?你将做点什么不同的?

2
在游戏中如何进行结构分析(例如:桥梁建筑,挖掘或死亡以及3D)?
据我了解,典型的交互式桁架系统将需要进行大量计算,因为每个组件都会影响整个系统。我认为您可以在仿真中以准确性为代价随意停止给定的迭代次数,但是我不知道这些游戏是否使用了这种方法(桥梁游戏是桁架系统的一个示例)。另一方面,像Dig或Die这样的游戏具有非常复杂的结构系统,该系统还考虑了扭矩(我认为)和压缩,并且运行速度非常快,并且可以在非常广泛的系统上运行。我猜基本计算可能是相似的,但是如果没有,我对两种方法都感兴趣。 你们知道这些是怎么制成的吗?它们有任意限制吗?还是完全使用了不同的算法?另外,我想你们想出的任何方法都可以应用于3D系统,但如果不是,或者如果不明显,请至少提供一个有关如何将其用于3D的线索,因为我对2D和3D都感兴趣游戏。 我知道我不应该在这里感谢,但是我发现不至少要感谢您的时间是不公平的,我希望不要删除此段。 编辑:如果我要猜测,我会说Dig或Die为每个块存储矢量,然后运行一个迭代算法,直到模拟的额外精度对于系统的限制毫无意义(例如,系统太大而无法崩溃),因此受到半任意(因为它基于应用程序)迭代次数的限制。但是我可能是错的。

2
如何使用SDL计算增量时间?
我听说您可以使用两个名为SDL_GetPerformanceCounter和SDL_GetPerformanceFrequency的函数来计算增量时间。我不确定它们如何完全工作,但我听说它有点类似于使用SDL_GetTicks() Uint64 NOW, LAST; double deltaTime = 0; while (somebool) { LAST = SDL_GetPerformanceCounter(); NOW = SDL_GetPerformanceCounter(); LAST = NOW; deltaTime = (NOW - LAST) / (double)SDL_GetPerformanceFrequency(); /**Rendering**/ } 我有这段代码,但是每当我打印出deltaTime或尝试使用它时,它总是等于一些真正的随机和疯狂数字。这个对吗?
11 c++  algorithm  sdl 

2
轴对齐空间划分:将空间划分为随机矩形吗?
我需要一种将3d空间划分为随机轴对齐的盒子形状的方法。目前,我目前正在划分2d空间用于测试目的。我想到的最直接的方法是定义一个大小为(1,1)的矩形,然后将所有现有矩形递归地分成两个在X轴和Y轴之间交替的不平坦矩形。 这里的问题很明显。这种方法会导致拉伸线变长(以红色标记) 我想要的是更自然的外观(我提供了一个示例) 看,从上到下或从左到右没有长的直线。 唯一的限制是我可能希望限制矩形的最小大小,而不影响大小的粒度。也就是说,如果最小的rect是1平方厘米,而不是秒,则最小的房间不应是2平方单位。 因此,理想情况下,算法应满足以下三个约束: 矩形不是无限小。 矩形尺寸不是最小矩形尺寸的离散乘积。也就是说,如果最小的rect是3平方单位,则不将较大的rect约束为6、9、12等正方形单位,因此可以是3.2或4.7。 该算法以多项式时间运行(需要快速计算)。

2
自动组织/智能库存系统?
在过去的一周中,我一直在使用Unity3D开发清单系统。最初,我在Design3的工作人员那里得到了帮助,但是直到我们分离路径才花了很短的时间,因为我真的不喜欢他们编写代码的方式,它完全没有OOP的味道。 我向前迈出了进一步的一步-物品占用多个插槽,先进的放置系统(物品会尽力找到最合适的位置),本地鼠标系统(鼠标被困在活动行李袋中)等。 这是我工作的演示。 我们希望在游戏中拥有一种自动组织功能-而不是自动排序。我们需要此功能,因为我们的库存将是“实时”的-不同于《生化危机1,2,3》等,您可以在其中暂停游戏并在库存中执行操作。现在想象一下,您的自我处于僵尸包围的稠密情况下,没有子弹,环顾四周,发现地面上附近有子弹,因此您去追捕它们并尝试将其捡起,但是它们却没有不适合!您查看您的库存,发现如果您重新组织一些物品,它将很合适!-现在的玩家-在那种情况下没有时间重组,因为他被僵尸包围了,如果他停下来并组织库存以腾出空间(实时记住库存,没有暂停),他会死掉的- 自动执行该操作会很好吗?-是的! (我相信这已经在《地牢围攻》之类的某些游戏中实现了,因此请确保它是可行的) 例如看这张照片: 是的,因此,如果您对问题进行自动排序,则会得到空格,但是这很糟糕,因为:1-昂贵:不需要完全排序操作即可释放这些空格,在第一张图片中,只需将红色项目滑到底部到最左边,您会得到与自动排序相同的空间。2-播放器很烦人:“ F告诉你重新订购我的东西吗?” 我不是在问“如何编写代码”,我只是在问一些指导,在哪里看,涉及什么算法?这和图和最短路径有关吗?我希望不要因为我没有设法继续我的大学学习而已:/即使是这样,只要告诉我,我就会学到相关的知识。 请注意,可能有不止一种解决方案。因此,我想我要做的第一件事就是弄清楚情况是否“可以解决”-如果我知道如何确定情况是否可以解决,那么我可以“解决”它。我只需要知道使其“可解决”的条件即可。而且我相信必须有一些算法/数据结构。 这是一张试图容纳1x3物品的多种解决方案的照片: 箭头仅显示一种解决方案,但是如果您看到的话,会发现多个解决方案。这就是我最终不自动排序而是找到解决方案并应用它的原因。 请注意,如果我花时间在上面,我会想出一种解决方法,但这并不是最好的方法,就像用脚而不是手握住车轮一样!XD或就像尝试解决需要数组的问题一样,但是您还不知道它们的存在!那么什么是正确的方法呢? 评论更新 @Stephen我真的不是Alogs中的专家,您提到了“背包”和@BlueRaja-Danny Pflughoeft提到了2D装箱算法。他们之间有某种联系/相同吗?-我仍然对应该如何处理感到困惑。 是的,我已经在使用“启发式”,但是我真的不知道我是:D它找到第一个可用的插槽,然后查看该项目是否适合该插槽。 我不知道是否可以根据商品的“体积”(我称为nSlotsRequired = nRowsReq * nColsRec)订购商品,因为例如您有一个2x2和1x4的商品,它们的体积相同,但是形状不同,对接下来的其余项目的处理方式会产生不同的影响。所以...:/ 我看了这个视频,我真的很喜欢完整的打包想法,但是我想知道如何处理它,因为库存是2D的。我什至不能确定垃圾箱的包装是这里的关键,因为,确实可以有一个以上的袋子,但是在我们的游戏中,它只能是一个袋子。因此,仅需在“一个”袋子中放入物品即可。因此,该视频中的示例(管道和总线)与我的问题并不完全匹配。还看了一些关于背包的事情,我没有看到“价值”与我的物品/库存有何关系,但我猜“重量”与体积大是一样的,不确定。

3
查看两个体素是否互连的算法
我正在寻找以下问题的良好算法:给定3D体素网格(可能为空或填充),如果我选择两个不相邻的体素,我想知道它们是否通过以下方式相互连接其他体素。 例如(为了说明2D的情况),其中#是实心正方形: 1 2 3 a # # # b # # c # # # 如果我选择a3和c3,我想尽快确定它们是否已连接;如果在a3和c3之间存在通过填充像素的路径。(当然,实际情况是在3D体素网格中。) 我已经研究了泛洪算法和路径查找算法,但不确定如何选择。两者都执行不必要的工作:洪水填充会尝试填充所有体素,但这不是必需的。寻路算法通常与寻找最短路径有关,这也是不必要的。我只需要知道,如果有是一个路径。 我应该使用什么算法? 编辑:根据评论,我认为应该添加以下内容:体素的内容事先未知,并且还需要算法来检测是否删除(清空)体素是否会导致该组体素破裂分成两个或更多个较小的组。

2
在2D阵列中找到形状,然后进行优化
我刚刚被允许使用一张图像...下面的游戏图像显示了一些变暗的块,这些块被认为是“ T”形的一部分。可以看出,代码使带有红色斑点的块变暗,而没有看到带有绿色轮廓的“ T”形。 我的代码遍历x / y,将块标记为已使用,旋转形状,重复,更改颜色,重复。 我已经开始尝试以极大的恐惧来修复此检查。当前的想法是: 遍历网格并记下所有模式出现的情况(不使用标记框),并将其放入数组中 再次循环遍历网格,这次注意哪些块被哪些模式占用,因此哪些块被多个模式占用。 再次遍历网格,这次注意哪些模式阻碍了哪些模式 感觉不错... 我现在该怎么办? 我想我必须 尝试各种形状相互冲突的组合,从首先阻碍大多数其他图案的形状开始。我该如何处理? 使用说我有3个相互冲突的形状占据8个块的理性,每个形状是4个块,因此我最多只能有两个形状。 (我也打算合并其他形状,在进行冲突形状处理时可能需要考虑分数加权,但这可能是另一天) 我不认为这是一个垃圾箱包装问题,但是我不确定要寻找什么。希望有道理,谢谢您的帮助 编辑尽管有明确的问题,每个人似乎都已经了解了,是的, 我想在每种颜色中找到最大的“ T”形 (因为如果我给你2分,而你又获得3分,你会有点生气)

2
菱形方形地形生成问题
根据本文,我已经实现了菱形平方算法:http : //www.lighthouse3d.com/opengl/terrain/index.php?mpd2 问题是我在地图上到处都是陡峭的悬崖。递归地细分地形时,它发生在边缘: 来源如下: void DiamondSquare(unsigned x1,unsigned y1,unsigned x2,unsigned y2,float range) { int c1 = (int)x2 - (int)x1; int c2 = (int)y2 - (int)y1; unsigned hx = (x2 - x1)/2; unsigned hy = (y2 - y1)/2; if((c1 <= 1) || (c2 <= 1)) return; // Diamond stage float a …

5
如何确定路径的长度?
我有一款游戏,要求每个玩家沿着一条指定的路径移动。我使用贝塞尔曲线绘制路径。如何确定路径的总真实(非线性)长度和每个玩家的距离?(起点和路径上指定点之间的距离。) 更新: 路径以笛卡尔平面(2D)表示。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.