2011-02-04 2 views
6

우선, 숙제가 아닙니다;). 나는 단어 검색 게임을 처음부터 만들려고 노력 중이며 장벽에 부딪쳤다. 몇 가지 지침이 필요하다.프로그래밍 방식으로 "비어있는"세트를 찾기 위해 2 차원 어레이를 수직으로 가로 지르는 효과적인 방법은 무엇입니까?

저는 wordsearch의 그리드에 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

"전함"을 구현할 때 C와 비슷한 문제가 발생했습니다. 다른 배는 다른 크기이고 당신은 그 (것)들을 교차시킬 수 없었다.

세로 단어가 생기면 가로 단어가 맞는지 확인해야합니다.

String을 중심으로가는 클래스 인 "Word"클래스를 만드는 것이 좋습니다. 다음 사항을 추적하면됩니다.

  1. X, 세계 단어
  2. (자바 문자열에서 제공 한) 단어 단어의
  3. 오리엔테이션의 길이 무엇
  4. 에서 y 위치/지수 (위로 아래로

그런 다음 단어 배치의 유효성을 검사하는 방법을 만듭니다. E.G, 모든 단어가 칠판에 있어야하며 충돌은 없다. 일련의 선분으로 단어 충돌을 모델링 할 수 있습니다. 이는 rect to rect 충돌 알고리즘을 사용하여 수행 할 수 있습니다. 여기서 한 차원은 거의 1입니다.

1

세로로 동일한 방법을 수평으로 사용할 수 있어야합니다. 빈 공간이 있거나 공간에 삽입하려는 단어의 문자가 포함되어있는 한 한 지점에서 시작하고 아래로 이동한다고 말했듯이 말입니다.

관련 문제