Questions tagged «ai»

游戏中实体如何做出有关其行为的决策的设计和/或逻辑。

1
行为树代码示例?
http://altdevblogaday.org/2011/02/24/introduction-to-behavior-trees/ 显然,我在该网站上找到了最有趣的文章。你怎么看待这件事 ? 它缺少一些代码示例,您不知道吗?我还读到状态机与行为树相比不是很灵活……最重要的是,我不确定状态机与状态模式之间是否存在真正的联系……?
23 ai  state  tree  behavior 

6
咒语施法-如何优化每秒伤害
假设我们有一个知道一些咒语的巫师。每个法术都有3个属性:伤害,冷却时间和施法时间。相当标准的RPG东西。 冷却时间:能够再次施放该法术所花费的时间(t)。咒语开始施放时便会持续进行“冷却”。 施法时间:使用咒语所需的时间(t)。向导施放某些东西时,无法施放其他咒语,并且不能将其取消。 问题是:在不同的法术组合下,您将如何最大化伤害? 很容易计算出每个施法时间的最高伤害。但是,如果有更多更好的选择,那么等待然后让“卡住”施放低伤害咒语的情况又如何呢? 例如, 火球:3000伤害,3秒施法时间,6秒冷却。 寒冰箭:20伤害,4秒施法时间,4秒冷却。 疾风:3伤害,3秒施法时间,3秒冷却。 在这种情况下,如果您选择使用较低的DPCT咒语(疾风)而不是冰霜箭,则每秒的伤害会更高。因此,我们必须考虑选择咒语的后果。 在下面的示例中是“过度投放”和“等待”的情况。

10
可用的AI中间件[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 AI中间件的有用列表。请提供URL,免费/开放源代码或获得许可的内容以及能力的简要说明。 格式: *Package* (License) Link Pros Cons
22 ai 

3
矮人要塞的命令排序体系结构
实现AI命令排序系统的最优雅的方法是什么?例如,在矮人堡垒中,当您标记一个森林区域进行砍伐时,矮人将按照以下顺序进行操作: 去树上 砍树 将木材运送到库存中 去另一棵树 等等.. 我已经有一个不起作用的堆栈命令。从空闲状态到到达树的目标图块的1。 我担心的是,当我创建更多这样的订单时,这会变得混乱吗: 造房子 去储存 将木材带到建筑面积 回到库存 将石头带到建筑面积 动画建筑精灵 种植 去储存 将种子带到农场 酿造 去储存 使植物静止 动画酿造精灵 所以我的问题是,如何实现矮人堡垒之类的命令排序系统并同时避免使用意大利面条式代码?我需要研究任何数据结构吗?我需要将命令序列放在单独的xml文件中吗?

6
碰撞100%避免实施
我绝对是游戏开发的初学者,而且我对避碰/解决冲突一无所知,在过去一周中,我是在该网站上或通过此网站学到的...因此,如果我要问的是什么,请立即纠正我。基于错误的假设/误解。我尽力弄清楚了,但是那句话对我来说仍然是新颖的。 车辆 在我的游戏中,我有可以自动行驶的车辆。它们被放置在3D空间中,它们的运动由许多变量决定,这些变量对于每个车辆而言都是不同的。这里感兴趣的一个主要是: 仅向前运动。 甲速度,可以最小和最大,但其min是之间变化不(甚至接近)零。 甲转向半径,其取决于从速度(更高的速度,更大的半径) 两个最大加速度(用于降低和增加速度) 目标 我的目标是实现某种能够100%准确避免碰撞的AI (即,我将确保车辆永远不会碰撞)。 设计 尽管我更喜欢将AI“车载”的想法(即每辆拥有自己的“防撞AI”的车辆,最终查询和/或向其他车辆发送消息),但我仍然可以在以下位置实现CA AI:中央层(向车辆调度命令)。 在大多数情况下,车辆仅需在任何方向上相互避开,但在某些情况下,它们将必须避免碰撞并朝着同一目标行驶 到目前为止我发现的东西以及被卡住的地方 在这个站点上其他问题中找到的许多链接中,我发现特别有用的链接有: 撞球之间的碰撞 避免意外碰撞 排队 虽然这三个链接以许多方式“打开了我的视线”,但我仍然不清楚如何在我的情况下使用该信息。特别是在第2条中,只有“尝试”才能防止冲突(但是冲突确实会不时发生)。虽然第3条有时需要停车以防止碰撞。 我还注意到的是,上面链接的避免碰撞算法使用线速度的“即时投影”来检查车辆是否在行驶中。我想知道这是否足以满足我的需要,或者是否必须以更现实的方式来投影我的位置(例如:如果我将60°转向右90°,则我应该计算其余位置的位置曲线的30°,然后假设是线性运动)。 最后,我特别担心僵局。换句话说:尽管世界上的车辆密度会很低,但我担心,如果一定数量的车辆向同一点汇合,一旦他们意识到自己正在碰撞,就不可能进行任何规避操作因为它将使车辆与其他碰撞路径碰撞。 题 我怎样才能达到我的“目标”?深入理解当然是非常值得赞赏的,但是与外部资源的链接也将有很大帮助(我肯定不是第一个遇到此问题的人,但是可能我使用了错误的关键字来搜索网络吗? ) 预先感谢您的帮助!

3
如何为跳棋/草稿实现AI?
我看到了这个跳棋游戏,我想知道AI是如何实现的。 我应该如何为检查员(草稿,妈妈,妈妈)实现AI ?有没有已知的算法? 非常感谢所有人。我很奇怪看到这个Tic Tac Toe游戏教程博客文章。 所以,我想要dama游戏算法的开源代码和博客文章..是否有任何有用的链接或任何doc文件..?请告诉我..
21 algorithm  ai 

4
如何在基于组件的游戏架构中实现行为?
我开始在游戏中实现玩家和敌人的AI,但是对于如何在基于组件的游戏架构中最好地实现这一点感到困惑。 假设我有以下玩家角色,可以固定,奔跑和挥舞剑。玩家可以从静止状态和奔跑状态都转变为挥剑状态,但是随后必须完成挥杆,然后才能继续站立或奔跑。在挥杆过程中,玩家无法走动。 如我所见,我有两种实现方法: 创建一个包含所有播放器逻辑的AI组件(与实际组件分离或嵌入为Pla​​yerAIComponent)。我可以轻松地执行状态限制,而无需在组成播放器实体的各个组件之间创建耦合。但是,AI组件无法分解。例如,如果我有一个只能站立,四处走动或只能四处走动并偶尔挥舞剑的敌人,那么我必须创建新的AI组件。 将行为分解为各个组件,每个组件标识一个特定状态。然后,我得到一个StandComponent,WalkComponent和SwingComponent。为了执行过渡规则,我必须耦合每个组件。SwingComponent必须在挥杆期间禁用StandComponent和WalkComponent。当我有一个只会站着的敌人,偶尔会挥舞剑时,我必须确保SwingComponent仅在存在Walkwalk时将其禁用。尽管这允许更好的混合和匹配组件,但是当每次添加依赖项时,它都可能导致可维护性的噩梦,但必须更新现有组件以更好地满足依赖项对角色的新要求。 理想的情况是,设计人员可以通过将组件拖到容器中来构建新的敌人/玩家,而无需触摸任何一行引擎或脚本代码。尽管我不确定是否可以避免脚本编码,但我想使其尽可能简单。 总结一下:我应该将所有AI逻辑分解为一个组件,还是将每个逻辑状态分解为单独的组件,以更轻松地创建实体变量? 编辑:我怀疑我对第一种和第二种情况的含义有些困惑。我试图在下图中解释它。 注意各个状态与实体之间的关系。在第一种情况下,会在将AI组件放入实体之前对其进行预先构建。设计人员只能从程序员提供的一组独特的AIComponent中进行选择。第二种情况具有与其他组件相同级别的不同状态。设计人员现在可以创建具有唯一AI的实体,而无需程序员的干预。 问题是,这是在基于组件的实体中构建AI的仅有的两个选择吗?如果是的话,什么将提供最大的灵活性?

6
如何构建“交通AI”?
我目前正在从事的一个项目具有很多“交通”的含义,例如汽车在道路上行驶,飞机在停机坪上行驶等。 到目前为止,可用路径已预先计算,因此会自动生成交叉点,这些交叉点本身通过边相互连接。当角色/代理生成时,它从某个节点开始,并通过简单的A *算法找到到目标节点的路径。代理遵循路径并最终到达其目的地。到目前为止没有问题。 现在,我需要使代理能够避免冲突并处理复杂的流量情况。由于我是AI领域的新手,所以我查阅了几篇有关转向行为的论文/文章,但发现它们太低级了。我的问题很少是避免实际的碰撞(在这种情况下,这很简单,因为代理遵循严格定义的路径),而是一种情况,例如一个代理留下了死胡同,而另一个则想输入完全相同的代理。或两个遇到瓶颈的代理程序只能一次允许一个代理程序通过,但是两者都需要通过(根据之前找到的最佳路由),并且他们需要找到一种方法让另一个代理程序首先通过。因此,基本上,该问题的主要方面是预测交通流,以避免死锁。 很难描述,但我想您明白我的意思。您对我从哪里开始有什么建议?是否有任何论文,示例项目或类似的东西可以帮助我入门? 我感谢您的帮助!
21 ai  movement 

3
高效寻路许多成群的敌人绕过障碍物
我正在努力改善游戏敌人的寻路能力。现在,他们基本上只是通过计算自己与玩家之间的角度并朝该方向移动,不断地朝着玩家的确切位置移动。我也有一个植绒算法,可以防止敌人相互堆叠,因此它们会成组,而不是相互夹住。 但是,既然我已经添加了基于图块的地图,那么我就需要敌人也能够绕过障碍物和墙壁。我最初尝试为“不可行走”的瓷砖添加间隔值,以使植绒算法将墙壁和障碍物视为要远离的对象。我还没有弄清楚这是否可行,因为我的初步测试显示敌人击中了一个看不见的“墙”,那里没有不可行走的瓷砖,但由于某种原因,他们击中了它并开始飞扬。 我想知道如果使用A *计算到达播放器的路径,然后使用植绒算法来防止结块,可能会导致性能负担过重。最初,我的游戏将是基于海浪的射击游戏,但我决定改以热线迈阿密为基础进行游戏,因此我可能会减少敌人的数量,偶尔会成群结队,他们更强大。 这是可行的解决方案吗?我将Java与Slick2D一起用作游戏引擎。还是有解决这些问题的更好的解决方案/算法?

1
行为树::耗时超过一滴答的动作
根据我对行为树的了解,每个行为都应该是一个短期目标导向的动作,可以通过几次迭代来完成。 因此,例如,以下是行为树的图像: 现在让我们假设“ 驱逐敌人”行为在树中进行了多次迭代。因此,每次通过都会调用Drive To Enemy,因为它现在处于运行状态。 问题是如果附近有敌人,我想打电话给Evade Enemy。并考虑到驱动器要敌人总是叫我没有机会打电话给躲避敌人(或许应该叫避开敌人)。 无论当前正在执行什么操作,我都应该遍历Tree EACH通行证吗? 我要这样做正确吗? 处理此类行为的正确方法是什么? 最初在Stackoverflow上被问到。认为这里将是一个更合适的地方来问这个问题。
19 ai  game-loop  behavior 

6
成为“非完美”的AI战斗员应该采取哪些行为?
当成为一名NPC战斗员时,通过优化战斗策略,时机和攻击类型很容易 获得机器人死亡机器,这很容易做,但是要争取到一个特质的,不可预测的敌人就更难了(在战斗中更有趣)。哪些行为(算法?)对创建更加有机的,非常规的敌人有用? 编辑:我的特定用例是针对MMO类的敌人,例如《魔兽世界》,尽管涉及的图形较少。请注意,这意味着人类和非人类的敌人(动物,怪物等)
19 ai  npc  combat 

6
具有物理模型的船舶的AI控制
我正在寻找有关如何在2D空间中实现跟踪的想法。不幸的是,我对AI /路径查找/自主控制了解不多。 假设这艘船可以自由移动,但它具有质量和动量。同样,外力可能会影响它(爆炸等)。玩家可以随时为飞船设定目标,并且该目标应到达该地点并停止。 没有物理学,这将很简单,只需指出方向即可。但是,如何应对现有的势头然后停下来呢?我不想直接修改船的位置。 编辑:只是要弄清楚,与船舶本身的物理相关的数学并不是问题。

7
如何使A *代理避免其他代理?
我正在图块地图上实现多代理A *算法。代理仅在X和Y轴上移动。通过在计算路径时检查其他位置,我避免了它们之间的冲突。 除代理必须从不同方向传递同一图块的情况外,此方法都可以正常工作。在这种情况下,最佳解决方案是让一个代理等待另一个代理通过: 另外,如果没有北方走廊,寻路也会失败。 如何实现这种算法?

8
不完美的乒乓球AI
因此,我开始在使用LWJGL时学习Java和一些OpenGL。首先,我正在编写Atari Pong的副本。我已经正确设置了游戏屏幕,碰撞检测,并且所有游戏大部分都可以正常运行,实际上,如果是2人游戏,我现在就可以完成,但是由于我打算做一个单人游戏,我必须想出一个简单的AI来控制第二位玩家。 知道球将击中何处似乎是微不足道的,并且创建一个总是能将球击中的AI似乎很容易,但是我希望能够赢得比赛,所以我不能总是让IA击中球。 所以这是我的问题,我该如何编写代码以将类似人的缺陷添加到AI中。我是否应该随机决定AI是否会在给定时间失效?还是我在这里缺少一件更聪明(或者也许很明显)的东西? 非常感谢你。
19 java  ai 

3
添加或删除单元时,如何保持矩形形状?
我有带有行和列的矩形形式的机器人。在从地层中添加或删除机器人时会出现问题。发生这种情况时,漫游器必须重新布置自己,以使矩形形状的纵横比仍大致相同,并尽可能地为矩形。这该怎么做? 一些想法: 添加或删除机器人时,请使用新的机器人总数和所需的恒定长宽比来计算最适合该长宽比的地层的新宽度和高度。然后以某种方式重新调整机器人以适应新的尺寸。 移除机器人后,将其后面的机器人移到其位置,然后继续直到到达编队的尽头。然后通过以某种方式改组后排机器人来尽可能地使后排保持平衡。 另一个完全不同的想法是模仿分子结构保持在一起的方式。通过吸引四个最接近的机器人,然后排斥其余所有机器人,使每个机器人都希望被其他四个机器人包围。击退所有机器人(包括四个机器人),它们太近以至于无法使用平方反比法确保分离。您还需要额外的力来塑造整个结构。但是,这听起来非常昂贵。 更新:因此,研究萨拉赫姆的答案,我想出了一个很好的通用函数,它给出了良好的尺寸。 首先,我解决了下面的宽度和高度联立方程,然后对答案进行了四舍五入。 width/height=aspect ratio of your choice width*height=number of bots 这为您的机器人数量提供了最接近该纵横比的整数矩形。最接近的矩形一半时间太大,一半时间太小(当然,有时会恰到好处,但谁在乎那些矩形)。在矩形是一个案件有点过大,需要做什么需求。后排最终将几乎满,这是理想的。在矩形是一个案件有点太小了,你有问题,因为极小的微小溢出将不得不去到它自己的等级创建了一个等级上它只有几个机器人,它并不十分好看。在某些情况下,差异也很大(大于宽度的一半),在这种情况下,相加或减去一级即可使差异变小。然后,当矩形太小时,添加一列以使其稍大一点。这样做之后,看起来后排机器人将始终至少具有其他排机器人的一半。 更新 获得尺寸后,将其与当前尺寸进行比较。如果新维度的边界较大,则对于每个等级,从下面的等级弹出bot,并将它们推入当前等级,直到该等级上的bot数量等于正面。继续执行该算法,直到获得第二名。使用此算法,机器人将可以有效地适应新的维度。在那之后,我只是将新旧的推到后排。对于新的门面较小的情况,该算法略有不同,但是您可以弄清楚! 接下来还有两个问题。删除,以及一种更灵活的添加方法,其中不必将新漫游器分配给后排,而是在添加新漫游器时最接近它们的位置。

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.