簡體   English   中英

在Boggle板上查找單詞的算法

[英]Algorithm to find word on Boggle board

我正在vb .net中建立一個炫目游戲。 現在,我的骰子是二維數組(0,0 0,1)等...

我想要做的是,當我輸入單詞時,它會使用button(x,y).doclick子高亮顯示它在板上。 現在,我的實現找到第一個字母,然后繼續嘗試每個字母,直到它滿足8個轉角條件(即與最后一個字母相鄰),但這並不總是有效。 如果板上有2個“ G”,而我想要最下面的一個,那么這將不起作用。 有人可以給我一個需要發生的偽代碼的例子。 為了解決這個問題,我已經迷迷了近6個小時。 謝謝

如果我理解正確,給定一個字符串,您要突出顯示與該字符串匹配的骰子路徑。 有時有幾種可能的選擇,因此添加字母可能會完全更改突出顯示的內容。 在這里保留上一個子字符串的結果可能是一個很好的方法,因此我們不必從頭開始。 那么,要做的合理的事情就是計算所有可能的路徑。

給定字符串s的答案將是路徑列表,其中路徑是網格坐標的列表。 您可以合理地突出顯示每個路徑,因此只需突出顯示第一個即可。 在字符串中添加字母時,會找到可以擴展的路徑,並刪除無法擴展的路徑。

恐怕我不知道如何編寫VB代碼。 由於您要求使用偽代碼,因此這里有一些類似python的粗糙偽代碼。 我將沼澤網格編碼為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”的路徑列表。 同樣,突出顯示第一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM