0

我正在 vb .net 中构建一个 boggle 游戏。现在,我的骰子是二维数组(0,0 0,1)等......

我想要它做的是,当我输入这个词时,它使用突出显示它的button(x,y).doclicksub 在板上突出显示它。现在我的实现找到了第一个字母,然后继续尝试每个字母,直到它满足 8 个角条件(即它与最后一个相邻),但这并不总是有效。如果板上有 2 个“G”,而我想要底部的一个,这将不起作用。有人可以给我一个需要发生什么的伪代码示例。我被难住了将近 6 个小时,试图弄清楚这一点。谢谢

4

1 回答 1

2

如果我理解正确,给定一个字符串,您想突出显示与该字符串匹配的骰子的一条路径。有时有几种可能的选择,因此添加一个字母可能会完全改变突出显示的内容。在这里保留前一个子字符串的结果可能是一个好方法,所以我们不必重新开始。那么一个合理的做法是计算所有可能的路径。

给定字符串 s 的答案将是路径列表,其中路径是网格坐标列表。每条路径都是您可以合理突出显示的内容,因此您只需突出显示第一个路径。向字符串添加字母时,您会找到可以扩展的路径并删除无法扩展的路径。

恐怕我不知道怎么写vb代码。由于您要求提供伪代码,因此这里有一些类似 Python 的粗略伪代码。我将 boggle 网格编码为 16 个项目的列表。neighbors(x) 函数返回相邻位置的列表(边缘情况除外,即 [x-1, x+1, x-4, x+4])。

def firstLetter(typed):
  answer = []
  for pos in range(16): if grid[pos]==typed: answer += [pos]
  return answer

def addletter(partialanswer, typed):
  answer2 = []
  for partial in partialanswer:
      for neighbor in neighbors(partial[-1]):
          if grid[neighbor]==typed: 
             # partial+[neighbor] is a list. answer2 is a list of such lists.
             answer2 += partial + [neighbor]
  return answer2

例如,如果玩家键入“go”,则 (a) 玩家键入“g”,代码调用 firstletter(“g”) 并获取网格中包含“g”的位置的列表“答案” . 突出显示,比如说,第一个。(b) 玩家键入“o”,代码调用 addletter(answer, "o") 并获取网格中显示“go”的路径列表。再次强调第一个。

于 2009-08-06T14:04:22.407 回答