0

私はvb.netでボグルゲームを構築しています。現在、私のサイコロは2D配列(0,0 0,1)などです。

私がやりたいのは、単語を入力しているときに、それを強調表示するbutton(x,y).doclickサブを使用して、ボード上でそれを強調表示することです。現在、私の実装は最初の文字を見つけ、8コーナーの条件を満たすまで(つまり、最後の文字に隣接するまで)各文字を試し続けますが、これは常に機能するとは限りません。ボード上に2つの「G」があり、一番下のものが必要な場合、これは機能しません。誰かが私に何が起こる必要があるかの擬似コードの例を教えてもらえますか?私はこれを理解しようとしてほぼ6時間困惑してきました。ありがとう

4

1 に答える 1

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

たとえば、プレーヤーが「go」と入力した場合、(a)プレーヤーが「g」と入力すると、コードはfirstletter( "g")を呼び出し、グリッド内で「g」が含まれる位置のリスト「answer」を取得します。 。たとえば、最初のものを強調表示します。(b)プレーヤーは「o」と入力し、コードはaddletter(answer、 "o")を呼び出し、「go」と書かれたグリッド内のパスのリストを取得します。もう一度、最初のものを強調表示します。

于 2009-08-06T14:04:22.407 に答える