2009-08-06 7 views
0

vb.netでボグルゲームを構築しています。今、私のオッズは2次元配列(0,0 0,1)などです。Boggleボードで単語を検索するアルゴリズム

私が言いたいことは、ボード上でハイライトすることですそれを強調するbutton(x,y).doclickサブ。今の実装では、最初の文字を見つけて、それが8角の条件を満たすまで(つまり、最後のものに隣接するまで)各文字を試し続けますが、これは必ずしも機能しません。ボードに「G」が2つあり、ボトムが1つ必要な場合は動作しません。誰かが私に、何が起こる必要があるかの擬似コードの例を与えることができます。私はこれを理解しようとすると約6時間騒ぎました。ありがとう

答えて

2

私が正しく理解している場合、文字列を指定すると、その文字列に一致するダイスを1つハイライト表示します。時にはいくつかの選択肢がありますので、手紙を追加すると、強調表示されているものが完全に変更されることがあります。以前の部分文字列から結果を保持するのは良いアプローチかもしれないので、最初からやり直す必要はありません。次に、すべての可能な経路を計算することが妥当なことです。

与えられた文字列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 

プレーヤーのタイプ、たとえば、「行く」、そして (a)のプレーヤーのタイプの「G」の場合、コードはfirstletter(「G」)を呼び出し、グリッド内の位置のリスト「答え」を取得しますそれらの中に "g"を持っています。最初のものをハイライトします。 (b)プレーヤタイプ "o"では、コードはaddletter(answer、 "o")を呼び出し、グリッド内の "go"と呼ばれるパスのリストを取得します。再度、最初のものを強調表示します。

+0

ありがとうございます!それは動作します:-) – jmasterx

+0

@ user146780うれしい私は助けることができました! – redtuna

関連する問題