Articles of algorithm

在封闭path上定位点,以最大化加权点样本的距离总和

我正在做一个简单的困惑游戏的人工智能,需要有效地解决以下问题(小于1秒的范围指定,因为我需要在游戏中做很多迭代)。 从左上角开始以1个单位间隔在正方形(0至200,000,000)的边上分布N(1至100,000)个强度为1至10,000的怪物的样本。 将英雄移动到正方形上的一个点X上,以最大化加到怪物上的距离的总和。 每个怪物的加权距离由MonsterStrength * ShortestDistanceToX(顺时针或逆时针)计算。 X也必须在1单位间隔标记上,怪物和英雄只在广场的两侧移动 我已经尝试了几种方法,但都不够快或不够准确。 这个问题的可能的补充(最小化到距离原始集合中每个对应怪物最远距离处的距离总和)似乎与寻找几何中值,设施位置问题,Weber问题等有关。 线性编程也是可能的,但可能太慢而且过度。 有没有人有一个好方法的想法? 这里是长度为3的两边正方形的插图: 1 ——- 2(M / 3)——- 3 —— 4(M / 1) | | 12(M / 2)5 | | 11(M / 1)6 | | 10 ——– ——— 9 8(X)——- 7 如果你把一个3的强度为2的怪物,一个在4的强度1,一个在12的强度2,一个在11的强度为1,英雄(X)在8,加权distne的总和是:3 * 6 + 1 * 4 + 1 * 3 + 2 * 4 […]

管道连接游戏algorithm – Java / Andengine

我正在使用java / andengine for android创建一个基于Pipe Dream / Pipe Mania的游戏。 我有一个正方形的网格,每个都代表一种管道。 玩家需要交换图块来连接从A点到B点的管道。 如何确定管道是否连接到起点A? 那么我怎样才能find连接path有多远? 如何确定path是否将点A连接到点B? 如何处理可能在path中间的瓷砖切换? 这个function将与第一次生化奇兵游戏中的管道迷你游戏几乎相同。 我正在寻找如何解决这个问题的建议。

二维碰撞的角速度

我一直在为我的A Level计算项目开发一个2D物理引擎,并且在计算碰撞中的角速度时遇到了麻烦。 我已经设法锻炼每个物体的线速度,并创建一个碰撞stream形,其中包含碰撞点相对于碰撞质心(0,0)的两个物体中的每一个以及重叠等。我也知道每个物体的质量,速度等。我一直在寻找几个星期,现在在我能find的每一个方程中,他们似乎没有工作返回正常的碰撞难以置信的高数字。 我目前的algorithm从tuts +( 链接在这里 )的游戏开发部分的文章中拉出来,就像这样: objectArray[i].angularVelocity += objectArray[i].inverseMass * CrossProduct(collisionInfo.collisionPointB, impulse); objectArray[ii].angularVelocity += objectArray[ii].inverseMass * CrossProduct(collisionInfo.collisionPointA, impulse); 有人能解释我怎么能计算角速度的变化,并给我一些示例值的方程,因为我的可能是在错误的规模或什么的。 谢谢你的帮助,安迪 其他要注意的是,这个引擎是用C#编写的XNA,所以如果有任何语言特定的优化,他们必须使用C#,谢谢。

匹配3混洗

我有兴趣听说要实现类似Candy Crush的洗牌function。 我有一个algorithm,以确定是否有任何可用的匹配,如果没有,我想洗牌,确保没有任何匹配后立即重新洗牌,但至less有一个潜在的匹配。 我有一些想法,但我有兴趣看看是否有更有效的方法来做到这一点。 谢谢

如何在自顶向下的透视游戏中用低algorithm复杂度表示地图?

这是我第一次开发电子游戏,而且我迷失了方向。 我想知道在自上而下的透视游戏中表示2D地图的方法。 (像这样:vengadoravg.github.io/1/game.html btw,这是我开发的第一场比赛) 到目前为止,我已经find了一种在自顶向下的透视游戏中表示2D地图的方法: 使用matrix。 如果一个正常的地板位置是由某个数字(或字符)表示的,那么这个障碍就用一个不同的数字表示,而敌人则用另一个不同的数字表示。 这个matrix将允许我运行图论algorithm和疯狂的事情,但是我认为这将是algorithm上非常复杂的,因为这个图将是真正的人口稠密的。 因此,所有的精灵应该是相同的大小,否则,matrix将是真的,真的很大。 还有其他更好的方法吗? 在algorithm复杂性方面,哪个最适合运行图论algorithm呢? 我道歉,如果这个问题听起来是主观的…但我认为一种方法的优越性可以由其algorithm的复杂性决定:)

永远保持“活着”的algorithm

我正在执行一个游戏,玩家正在玩(滑动)小红色矩形,目的是不打黑色矩形,不移出内部蓝色矩形。 黑色矩形从左到右(从右到左)和从上到下(从下到上)的轨迹移动。 他们正在移动的速度是恒定的,例如5个像素。 你可以在这个video中得到一个更好的主意。 其中一种游戏模式如下 – 游戏中将提出2条path显示为箭头,其中一条可能导致“死亡”,而另一条将始终是正确的,用户将不得不select其中之一直到他做出错误的select。 移动方向只能是上,下,左或右,而不是对角线,红色矩形的速度是恒定的,例如6个像素,黑色矩形速度是5个像素。 我为“成功”的方向奋斗了一个多星期,至今为止我所做的是: 在1.0到2.0秒之间产生一个随机的浮点数,然后将产生的数字除以0.030得到黑色矩形和红色矩形的移动次数。 计算将在下一次会议中进行的黑色矩形和红色矩形移动点,移动次数乘以黑色矩形5px和红色矩形6px的速度。 在知道了黑色矩形的速度和移动的次数之后,我可以在当前时间段的任何时候告诉他们的位置。 将红色的矩形向左移动,直到它被击中,并记住结果,例如15移动,直到命中。 在正确的方向上做同样的事情。 按照升序之前可以进行的移动来sorting方向。 将红色的矩形移动到可以进行最多移动次数的方向上。 做同样的事情,直到时间会话结束,即在第一步中生成的随机浮动号码。 这个解决scheme大部分时间都在工作,但是有时会导致无法逃脱的位置。 问题不在代码中,而在algorithm逻辑中。 例如看下面的图片: 正如你所看到的那样,红色的长方形将会被一个黑色的长方形卡住的位置。 在这种情况下,最好的解决办法是先移动到顶部1,然后移动到顶部,因为左上角的黑色矩形会移到顶部,但是我真的不知道如何解决这个任务。 什么是完成这个任务的最佳方式。 先谢谢你!

Pick A Brick克隆中需要使用algorithm来生成连接的砖块

我想制作一个Amiga 500的游戏“ Pick A Brick” ,一个2D游戏,其目标是按照一定的规则通过匹配来清理一张砖。 当涉及到生成砖布局的algorithm时,我没有办法。 我已经添加了游戏规则(我记得他们)。 玩家通过在时间用完之前清除所有瓷砖而赢得游戏。 通过点击一对瓷砖来清除瓷砖,如果以下情况属实: 瓦片必须是相同的types(每种types只有一对)。 他们之间有一条清晰的path(更多的path在下面)。 从瓦片开始的path必须始终朝着屏幕的(清晰)边缘开始。 瓷砖之间的path必须是U形的。 (编辑)注意:在video中,path并不总是U形的。 我不记得所显示的path是否只是一个快捷方式,但不管在我的版本中,我不希望允许从内部删除瓷砖。 我已经做了一些手动testing/原型,使用外部和内部的方法,两者都有变化。 到目前为止,我所提出的任何东西都是非常接近的。 我有点不喜欢问这样的问题,因为这个问题如此具体,可能不是普遍的兴趣,对于任何有兴趣帮助的人来说,可能会花费更多的时间。 也就是说,有人喜欢提出algorithm和“解决问题”,社区可以从答案中学到一些东西,所以就是一个post。 (编辑)澄清。 该algorithm必须提供可解的解决scheme。

我如何在3D环境下进行加权级联?

我正尝试在3D环境中沿着path执行加权级联。 现在,我想要做的是在环境中的一个对象(一个立方体)从其坐标1在每个方向扫描另一个立方体,然后,如果它find另一个立方体,它将围绕该立方体扫描另一个立方体等到达path的末端,或者已经达到了40个立方体的极限,并且我希望它沿着它所需要的path的每一步都具有一个重量,所以如果沿着path超过了40个立方体,它将会停止。path。 现在,我不知道从第一个立方体周围扫描的位置。 我如何让它移动到下一个立方体,然后下一个立方体,然后下一个等没有写一个很长的方法,考虑path上的每个立方体? 在寻找诸如A-Star或BFS / DFS之类的寻路algorithm之前,我已经尝试过了,发现它太复杂了,对于我的程序的这一部分来说,这是不必要的复杂。 谢谢。 编辑:我忘了提及,这些立方体不动,他们留在任何地方玩家把他们。

创建球员排名?

我最近创建了一个即将引入玩家排名的比赛系统。 基本上,在选手完成比赛后,他们根据他们在比赛中的performance获得排名。 所以赢得比赛的人得分最高,排名第一,而第二名则排在第二,排名第二,等等。 然而,排在新的排名之后,他们可以挑战其他成员,并有机会扮演其他成员并改变他们的等级。 所以基本上(使用排名系统),如果排名第二的玩家A击败排名第一的玩家B,玩家A现在将成为第一。 我还决定,如果一个球员想在排名中竞争,但在比赛中不存在,他们可以在比赛之后注册,并且将以最低的分数给予最低等级(但是他们有机会提升)。 所以现在,我想知道我应该怎样计划这个计划。 当我把球员从锦标赛转换到比赛排名时,我必须用积分来识别他们。 我决定我可以做这2种方式: 1 1000 2 900 3 800 4 700 5 600 6 500 7 400 8 300 9 200 10 100 或者我可以设置一个指数型的系统,在排名较高的玩家之间的点数会更大。 在互联网上看了之后,我决定用ELO在玩家相互匹配之后给玩家提供新的等级是明智的。我在这个页面上去了解它: http : //www.lifewithalacrity.com/ 2006/01 / ranking_systems.html 所以如果我以这种方式去做这件事,并且让我说我有排名第一的排名#10。 我的公式是: R' = R + K * (S – E) 而#10只有100分,其中#1有1000分。 所以在做math排名#10的#1的预期值是: 1 / [ 1 + […]

三角形网格碰撞/分辨率

我一直在尝试一些不同的碰撞检测方法,现在我想尝试对三角形网格实施简单的Mesh-Mesh碰撞检测。 我想知道我是否在正确的轨道,或者如果我错过了一些关键的东西。 我的碰撞检测的总体思路是一个没有旋转的移动物体,对静止的物体。 我也希望移动的物体滑过它们碰撞的静止物体的表面/边缘。 该algorithm是: 列出移动物体原点范围内的所有静止物体。 添加到移动的移动物体范围内的所有静止物体列表中 按照移动物体原点的最短距离对列表进行sorting。 遍历列表并检测移动的移动物体和静止物体之间的碰撞 找出运动物体的顶点穿过静止物体的三角形的最短距离(反之亦然)。 find移动物体的边缘通过静止物体的边缘的最短距离。 如果最短的距离是顶点 投影在破损的三角形平面上的位移并find终点。 使用此终点和原点重新计算位移 重新启动迭代 如果最短的距离是顶点 计算这两个边缘在接触点所产生的平面上的位移。 找出这个预测的终点 使用此终点和原点重新计算位移 重新启动迭代 如果没有发现碰撞,则继续迭代 将最终位移应用到移动对象的位置 发现碰撞后重复迭代的原因是为了避免在先前检查的对象中分辨率导致新的碰撞的情况。 为了得到顶点和边的交点,我做了两个方程,两个方程都有M作为我希望应用到移动物体的位移。 所有的资本variables都是Vec3的,彼此Vec3的两个资本是增量AB == B – A 小写variables是标量。 Mat3把Vec3作为列 这是我testing移动的顶点对一个固定的三角形的方程: //Ray: P = M*t + Q //Trianlge: P = A + AB*u + AC*v //Ray-Triangle Intersect: M*t + Q = P = A […]