2011-02-04 71 views
6

首先,這不是功課;)。我試圖從頭開始創建一個wordsearch遊戲,並且遇到了障礙,我需要一些指導。什麼是垂直遍歷二維數組的有效方法,以編程方式查找「空」集?

我正在使用一個字符的2d數組來爲wordsearch的網格。我很自然地將這些單詞放在這些數組中,但是我非常想知道如何垂直執行此操作。

這是我到目前爲止,你就應該能夠複製/粘貼並運行它

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???? 
???????????? 
???????????? 
???????????? 
???????????? 
???????????? 
???????????? 
???????????? 
???????????? 

我需要隨機將它們放在左側/右側,但我可以自己做。

問題:試圖將單詞垂直放置到如上所述的二維數組中的有效方法是什麼?我最初的想法是要求向下計算所需的字長,如果發現除?以外的任何內容,則打破它,並繼續這樣做直到我能找到該字的空間。但是,一旦我考慮到單詞重疊,這種情況並不會很好。

任何指針?

回答

1

在執行「戰列艦」時,我在C中做過類似的問題。不同的船隻是不同的大小,你不能讓它們相交。

一旦你有垂直的單詞,你將需要檢查你的水平單詞是否也擊中了它們。

我建議製作一個「字」類,這是一個圍繞字符串的瘦類。你只需要跟蹤以下內容。

  1. X,世界
  2. 這個詞是什麼
  3. 字(在Java中的字符串給你)
  4. 字的方向的長度y位置/指數(上下左,右)

你那麼做的方法,即驗證字的位置。 E.G,整個單詞必須在董事會上,並且沒有碰撞。您可以通過一系列線段對文字碰撞進行建模。這可以通過使用直接碰撞算法來完成,其中一個維度幾乎是1.

1

縱向應該能夠使用與水平相同的方法。正如你所說的,只要你有空的空間,或者空間中包含你想要插入的單詞的字母,就從一個地方開始並向下移動。

相關問題