问题标签 [game-ai]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2973 浏览

language-agnostic - Peg Solitaire / Senku 解算法

我需要为Peg solitaire / Senku 游戏编写求解器这里
已经有一个问题,但建议的答案是带有回溯的蛮力算法,这不是我正在寻找的解决方案。 我需要找到一些启发式方法来应用 A* 算法。剩余的钉子不是一个好的启发式,因为每一步都会丢弃一个钉子,因此成本始终是统一的。 有任何想法吗?

0 投票
1 回答
640 浏览

machine-learning - 在射击游戏中进行游戏 AI 研究的 API

我正在寻找一个与机器学习相关的课程项目。我基本上是在寻找一个顶视图 2d 射击游戏的框架,并将机器学习算法应用于它。

有一个框架可用于研究赛车,称为TORCS,我正在寻找类似的东西,但适用于射手。

基本上我想要一个高级 API 来让机器人移动、射击、挑选武器等。

可以完成的一些工作:假设您需要模拟您的机器人在战斗中将如何战斗。你使用神经网络将敌人的位置、机器人的位置、机器人的弹药等映射到你应该如何移动,以及你应该选择什么武器。

是否有任何(首选 2D,Python)框架可以帮助我做到这一点?

0 投票
2 回答
1171 浏览

python - 关于为 Vexed 级别编写求解器的建议

Vexed 是一款流行的益智游戏,有许多版本可用(其中一些是 GPL 自由软件)。非常适合小屏设备;版本可用于 Android、iOS 等。我在 PalmOS 平台上发现了它。

只是为了好玩,我想写一个求解器来解决 Vexed 级别。

Vexed 是一款方块滑动益智游戏。简而言之,以下是规则:

0)每个级别都是一个正方形网格,以不可通行的边界为界。在任何关卡中都会有一些实心方块,它们是无法通过的。有一些不同颜色的块;这些可以放在底部边框上,放在实心方块上,或者放在其他块(不同颜色)上。大多数级别是 8x8 或更小。

1) 你唯一能做的就是向左或向右滑动一个方块。每走一格算作一次移动。

2)有重力。如果在你滑动一个方块后,它不再停留在一个实心方块或另一个方块上,它会下落,直到它停留在另一个方块、一个实心方块或底部边框上。请注意,您永远无法再次抬起它。

3) 任何时候两个或多个相同颜色的方块接触,它们就会消失。请注意,链是可能的:如果支撑块消失,则支撑在其上的块会掉落,这可能导致更多相同颜色的块接触并因此消失。

4)目标是使所有块在最少的移动次数内消失。每个级别都有一个“标准分数”,它告诉您最少的移动次数。(在最初的 PalmOS 游戏中,“标准分数”不一定是最低的,但在我最近玩的 Android 版本中,它是最低的。)

以下是包含 PalmOS 版本游戏源代码的 SourceForge 项目:

http://sourceforge.net/projects/vexed/

我是一位经验丰富的软件开发人员,但我还没有在 AI 方面做过任何工作(寻路、解决问题等),所以我正在寻找建议,让我指出正确的方向。

目前,我可以看到我要追求的两个基本策略:

0) 只需编写一个蛮力求解器,可能是为了速度而用 C 语言,它会遍历每场比赛的所有可能解决方案,并返回所有解决方案的列表,最好的一个在前。这是一种合理的方法,还是可能的移动总数会使这太慢?我认为不存在任何大于 10x10 的关卡。

1) 学习一些 AI-ish 算法,并以聪明的方式应用它们来解决问题,可能使用 Python。

请注意,PalmOS Vexed 的源代码包括一个求解器。根据作者的说法,“求解器使用带有剪枝启发式的 A* 来寻找解决方案。”

http://www.scottlu.com/Content/Vexed.html

因此,我可以采用的一种策略是研究 A* 算法,然后研究现有求解器的 C++ 代码并尝试从中学习。

我将用 Python 和 C 标记对此进行标记,但如果您认为我应该使用其他东西,请进行销售宣传,我会考虑的!

这是来自“Variety 25 Pack”的一个级别的 ASCII 艺术;48级,“黑魔王”。我能够解决大多数关卡,但这个关卡让我很烦恼。这个级别的标准杆分数是 25 步,但我还没有解决它!

在这张图片中,边框是下划线、竖线和等号字符。填充方块是“#”。空位是空格字符。彩色块是“g”(绿色)、“b”(蓝色)和“p”(紫色)。

顺便说一句,我可能会将求解器的输入文件格式设置为关卡的 ASCII 艺术,就像这样,但没有繁琐的线条边框字符。

感谢您的任何建议!

编辑:

我已经接受了一个答案。感谢给我答案的人。

这是一个半蛮力求解器。它没有使用 A*,但它正在削减无利可图的短枝。

它读入一个带有关卡数据的简单文本文件。字母是块,“_”(下划线)是空格,“#”是填充空格。

这是一个示例级别文件:

在我的电脑上,考虑到 14252 种不同的板配置,它几乎在 10 秒内就解决了“黑魔王”。我用 Python 2.x 而不是 Python 3 编写的,因为我想用 PyPy 试试这个,看看它有多快。

接下来我应该努力将 A* 应用于此。我想我可以制定一个指标,例如“将橙色块移向另一个橙色块而不是移开”并尝试将其计算在内。但我确实希望所有解决方案都能弹出,所以也许我已经完成了。(如果有三个解决方案都是最小移动数,我想看到所有三个。)

欢迎对这个 Python 程序发表评论。我写得很开心!

编辑:我确实用 PyPy 试过这个,但直到现在我才更新这个。在我使用 PyPy 的计算机上,求解器可以使用 CPython 在 10 秒内解决“黑魔王”关卡;PyPy 下降到 4 秒。很酷的部分是我可以看到JIT 启动时的加速:这个程序在工作时打印点,在 PyPy 下我可以看到点开始变慢,然后只是加速。PyPy 很漂亮。

0 投票
0 回答
206 浏览

artificial-intelligence - A* 寻路算法来识别当前“房间”的入口?

正在寻找一些在线文章,这些文章可能对如何解决这个问题有一两个好主意,但没有找到太多。其中大部分涉及生成和遵循通往已知目的地类型的路径的各种方法。

基本上,这个想法是你有一个现有的节点图,并希望利用该数据来定位 AI 单元想要防御的当前区域的入口。因此,请想象一个 AI 单位分配了一项任务,即在一定范围内防御一个点,并希望在等待通往防御点的敌人出现时选择最佳面对方向。

我正在寻找输入的关键点是如何识别入口点。或者是进入被防御区域的门口的节点。

0 投票
3 回答
1409 浏览

artificial-intelligence - 如何在 Q-Learning 中使用 MinMax 树?

如何在 Q-Learning 中使用 MinMax 树?

我想实现一个 Q-Learning 连接四个代理,并听说在其中添加 MinMax 树会有所帮助。

0 投票
1 回答
107 浏览

vb.net - CPU 播放器 VB.NET

所以我正在开发一款扫雷旗游戏,多人版已经搭建完毕,但是单人版还在开发中。重要的是要提到我正在使用 DataGridView,并且我正在应用r = tab1.CurrentCell.RowIndex + 1c = tab1.CurrentCell.ColumnIndex + 1查看玩家点击的位置。我想做的是让 AI 在轮到它时单击任何随机单元格,但我该怎么做。有什么想法吗?

最好的问候,乔奥。

0 投票
1 回答
146 浏览

java - 为 AI 路径存储节点坐标

我目前正在开发一款游戏,但遇到了一些问题。

我正在研究一种算法,该算法将为游戏中的 AI 角色创建一条路径。这是一款自上而下的冒险游戏,AI 会在 50 x 50 的地图上选择一个随机位置,然后在考虑障碍物的情况下选择最短路径。

我最初有它是为了让 AI 使用 0-3 来确定如何移动。如果它是 0,它们向上移动,1,向右等。现在我正在尝试使用 A* 算法来创建移动列表。一旦他们到达,他们将选择一个新的目的地,这个过程将重复。

我遇到的问题是存储正方形。据我了解,您需要一个封闭列表和一个开放列表。我计划为这些使用链表,然后最终使用第三个链表来存储要遵循的路径。

问题是我需要同时存储 x 和 ay 坐标。我以为我可以为每个列表使用两个列表,但这似乎效率低下。

顺便说一句,我正在使用Java对其进行编程。

0 投票
1 回答
1803 浏览

c++ - 在游戏中实现漫游行为

我正在做一些游戏,现在我正在尝试为我的坦克实现漂移行为,但我无法成功实现它。

问题是它计算它的位置,如果它像 (430,130) 并使用 rand_floatRange 函数,它会给自己一个介于 0 和屏幕高度 (500) 之间的值,比如说 320,它会离开屏幕。

我的调试过程完全没有错误。它构建得很好,坦克在场上移动,但一段时间后它们会离开屏幕,因为没有限制可以阻止它们达到高值(例如:坦克位置在(450,100)并且屏幕是(600,600) ,如果坦克有新的目标(它的目标将从那个地方到达(300,200)(它的值从0到600),它将是(750,300)并且它会离开屏幕。

还有什么其他的,所以我可以修复它以正常工作并在屏幕高度和屏幕宽度范围内。

如果还有其他需要,如果我有,我会在这里提供。

0 投票
1 回答
293 浏览

path-finding - 如何在 cryengine 中为大型实体进行正确的寻路?

这几天一直被寻路问题弄糊涂了,好像生成的路径和禁区之间的空间是恒定的。我真的很干,在官方文档中没有找到与我的问题有关的任何内容。

我试过修改“pathfindProperties.xml”,切换不同的“Type”没有区别 放大对撞机的半径

有人可以帮我吗?对此,我真的非常感激!

{我的问题截图:http ://www.crydev.net/download/file.php?id=86461 }

0 投票
3 回答
487 浏览

python - 快速增加精灵位置而没有延迟 - Python

我正在使用 Python 中的 Kivy 为学校项目制作 PONG 游戏。到目前为止,感谢这个论坛,我已经为 NPC 桨制作了一些 AI。这是代码:

这是在 PongGame() 类的一个方法中,称为ArtificialIntelligence()。

我用这个来称呼它:

这允许我每 1/300 秒调用一次。但是,任何超过1/300的东西,我似乎都没有区别。即 1/9001 不会每 1/9001 秒调用一次。

它的工作方式是相对于球的位置将 y 坐标增加 4 个像素,并且每 1/300 秒执行一次,因此它不会以这种速度“滞后”。这对玩家来说基本上是一个“简单”的模式。如果我想做一个“硬”模式,我需要让NPC更准确。我可以这样做

像这样的东西。这将是非常准确的。但是,它看起来并不“流畅”,它看起来“滞后”。我假设我可以通过更频繁地调用该方法来获得相同的移动量,而不是通过改变像素移动来改变它的移动量。但是,我不知道如何做到这一点,因为正如我所说,从 1/300 以上的任何位置更改它似乎没有任何区别。

这就是我使用桨的方式:

我可以随心所欲地移动它,因为它会随着我移动鼠标而更新。它看起来很流畅,因为它会根据需要更新。我不知道如何用我的 AI 做到这一点。

有谁知道我怎样才能基本上使 NPC 桨更准确,让我做 Easy-Normal-Hard 等,同时保持流动性和没有滞后?我只看到一种方法可以做到:增加调用方法的数量。

但是我打赌有更好的方法,我不知道该怎么做。有谁知道我怎么能做到这一点?谢谢。

编辑:看起来我可以这样做:

但这看起来真的很丑陋而且效率很低......我更喜欢更清洁的方式。