我在寻找在某些规则下是否有可能为战舰的下沉部分编写一个高效的 AI 时遇到了一些麻烦。
规则是:
- 最短船的长度甚至可以是 1。你一开始就知道了,当游戏管理器给你船的阵列时
- 船不能重叠,但它们可能是相邻的
- 游戏管理器会告诉您最后一次投篮是命中、击沉还是未命中。没有关于你撞/沉船长度的信息
好吧,我无法正式表达的是沉船的长度。一旦我沉没了一艘船,我无法理解它的长度。
我想使用密度方法根据仍在游戏中的船的长度来估计在哪里拍摄,但是如果没有系统来获得沉船的长度,我的密度永远不会变得“更聪明”。目前,我只保存每次命中的北/南/东/西点,并在我的堆栈为空时考虑完成工作。当然,这非常消耗。
我试图澄清我在问什么:假设你有一个二维数组,你可以通过这种方式跟踪你的拍摄结果:
u = 未知点
m = 你在 x、y 上射击,游戏经理告诉你“错过”
h = 你在 x、y 上射击,游戏经理告诉你“击中”
s = 你在 x、y 上射击,游戏经理告诉你“沉没”
假设棋盘是 5 * 5。一开始你有这个:
1 2 3 4
1 u u u u
2 u u u u
3 u u u u
4 u u u u
假设你在 2、3 上射击,游戏经理告诉你“击中”,现在你有:
1 2 3 4
1 u u u u
2 u u h u
3 u u u u
4 u u u u
好的,现在你开始环顾你的最后一个镜头。无论您是使用密度方法还是从您击球的位置使用一堆 N/S/E/W 点。假设您的算法提出了 3、3。这次是错过:
1 2 3 4
1 u u u u
2 u u h u
3 u u m u
4 u u u u
所以现在你尝试 2、2,它很成功:
1 2 3 4
1 u u u u
2 u h h u
3 u u m u
4 u u u u
现在假设 2,1 和游戏经理告诉你“沉没”:
1 2 3 4
1 u u u u
2 s h h u
3 u u m u
4 u u u u
好吧:知道船只可能是相邻的,你如何知道你刚刚沉没的船的长度而不在每个 N/S/E/W 点开枪?在这种情况下,您需要在 2,4 和 1,3 上拍摄,以几乎确定您沉没的东西,而且它会消耗掉。请参阅下面的 Mark Bessey 示例:这种情况比我的情况更加耗时 && 不确定。
所以问题很简单:没有什么比这种 N/S/E/W 耗时 && 不确定的方法更好的了?
希望它能澄清这个问题。
ps 我知道这个问题,但我看不懂 C# 语言......几个月前刚开始使用 java :)
ps 2 我也知道这一点(见最后的插图),据我所知,除了他认为最小长度 = 2 之外,事情看起来完全一样。我总是可以编写 2 种算法(如果我检测到最小长度> 1,如果最小长度= 1,则再“消耗”一个),但我不明白他是如何管理这件事的……看起来他只考虑密度……
ps 3 为什么关闭?我正在寻找一种在条件下工作的算法......我给出了条件以及算法应该做什么。我该如何澄清?我该如何表达这种问题?(不好意思问了,没有争论的意思,只是学习)