0

我在寻找在某些条件下是否有可能为战舰的下沉部分编写一个有效的 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 上拍摄,以几乎确定您沉没的东西,而且它会消耗掉。如果你想象一个更大、更多人的董事会,事情会变得更加耗时&&不确定。

所以问题很简单:没有什么比这种 N/S/E/W 耗时 && 不确定的方法更好的了?

希望我能清楚地解释我的问题。

ps 我知道这个问题,但我看不懂 C# 语言:几个月前刚开始使用 java,顺便说一句,如果有人愿意向我解释下沉部分的 Dreadnought 算法,我会很高兴:)

ps 2 我也知道一点(见最后的插图),据我所知,除了他认为最小长度 = 2 之外,事情看起来完全一样。我总是可以编写 2 种算法(如果我检测到最小长度> 1,如果最小长度= 1,则再“消耗”一个),但我不明白他是如何管理这件事的...

4

0 回答 0