2011-02-04 1 views
6

まずは宿題ではありません;)私は最初から単語検索のゲームを作成しようとしているし、障壁を打つ私はいくつかのガイダンスが必要です。"空"のセットをプログラム的に見つけるために、2次元配列を縦方向に走査する効果的な方法は何ですか?

私は、wordsearchのグリッドにcharの2次元配列を使用しています。私はこれらの配列を水平に配置することに非常に慣れていますが、私は実際にこれを垂直に行う方法についてのアイデアに固執しています。

この

は、私がこれまでのところ、あなただけのコピー/貼り付け、それが

のようなものをプリントアウト
import java.util.ArrayList; 
import java.util.List; 

public class WordGame 
{ 
    private static List<String> words = new ArrayList<String>(); 
    private static int longestWordLength = 0; 
    private static int padSize = 4; 
    private static char[][] grid = null; 

    public static void main(String[] args) 
    { 
     initialiseWords(); 
     workOutLongestWord(); 
     setupGrid(); 
     printIt(); 
    } 

    private static void printIt() 
    { 
     for (int i = 0; i < grid.length; i++) 
     { 
      for (int j = 0; j < grid.length; j++) 
      { 
       System.out.print(grid[i][j]); 
      } 
      System.out.print("\n"); 
     } 
    } 

    private static void setupGrid() 
    { 
     grid = new char[longestWordLength + padSize][longestWordLength + padSize]; 

     for (int i = 0; i < grid.length; i++) 
     { 
      String w = (i >= words.size()) ? "?" : words.get(i); 
      for (int j = 0; j < grid.length; j++) 
      { 
       grid[i][j] = (j >= w.length()) ? '?' : w.charAt(j); 
      } 
     } 
    } 

    private static void workOutLongestWord() 
    { 
     for (String word : words) 
     { 
      if (word.length() > longestWordLength) 
      { 
       longestWordLength = word.length(); 
      } 
     } 
    } 

    private static void initialiseWords() 
    { 
     words.add("monkey"); 
     words.add("cow"); 
     words.add("elephant"); 
     words.add("kangaroo"); 
    } 
} 

...

monkey?????? 
cow????????? 
elephant???? 
kangaroo???? 
???????????? 
???????????? 
???????????? 
???????????? 
???????????? 
???????????? 
???????????? 
???????????? 

私がする必要がある実行することができるはずだものです左手/右手に無作為にそれらをパッドしてください。しかし、私はそれを自分で行うことができます。

質問:上記のように単語を2次元配列に垂直に配置しようとすると効果的な方法は何ですか?私の最初の考えは、必要な単語の長さを下に数えて、?以外のものが見つかった場合はそれを破り、単語のスペースが見つかるまでこれを続けます。しかし、単語の重複を考慮すると、これはかなり得られません。

任意のポインタ?

答えて

1

"Battleship"を実装するときにCで同様の問題が発生しました。異なる船は異なるサイズであり、それらを交差させることはできませんでした。

縦書きの単語を取得したら、横書きの単語が一致するかどうかを確認する必要があります。

Stringの周りに薄いクラスである「Word」クラスを作成することをお勧めします。あなたは以下を追跡する必要があります。アップダウン単語は単語の向きワード(Javaで文字列によってあなたに与えられた)

  • 長さは何の世界で

    1. のx、yの位置/インデックス

    次に、単語の配置を検証する方法を作成します。 E.G、全体の言葉がボード上になければならず、衝突はありません。一連の線分で単語の衝突をモデル化できます。これは、1つの次元がほぼ1である、矩形から矩形の衝突アルゴリズムを使用することによって行うことができます。

  • 1

    垂直方向は、水平方向と同じ方法を使用できます。ちょうどあなたが空きスペースを持っているか、スペースにあなたが挿入したい単語の文字が含まれている限り、1つのスポットで開始し、下に移動すると言ったように。

    関連する問題