2011-02-04 5 views
6

सबसे पहले, यह होमवर्क नहीं है;)। मैं खरोंच से एक शब्द खोज खेल बनाने की कोशिश कर रहा हूं और एक बाधा मारा है मुझे कुछ मार्गदर्शन की आवश्यकता है।प्रोग्रामिंग रूप से "खाली" सेट खोजने के लिए लंबवत 2 डी ऐरे को घुमाने का प्रभावी तरीका क्या है?

मैं एक शब्द खोज के ग्रिड के लिए 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

"बैटलशिप" लागू करते समय मैंने सी में भी इसी तरह की समस्या की। विभिन्न जहाजों के विभिन्न आकार थे और आप उन्हें छेड़छाड़ नहीं कर सका।

एक बार आपके पास लंबवत शब्द होने के बाद आपको यह जांचने की आवश्यकता होगी कि आपके क्षैतिज शब्दों ने उन्हें भी मारा है या नहीं।

मैं एक "वर्ड" कक्षा बनाने का सुझाव देता हूं जो स्ट्रिंग के चारों ओर एक पतली कक्षा है। आपको बस निम्नलिखित का ट्रैक रखने की आवश्यकता है।

  1. एक्स, दुनिया
  2. क्या शब्द
  3. शब्द (जावा में स्ट्रिंग द्वारा दिए गए)
  4. शब्द के उन्मुखीकरण की लंबाई है में y स्थिति/सूचकांक (ऊपर नीचे बाएं दाएं)

फिर आप एक विधि बनाते हैं, जो शब्द प्लेसमेंट को मान्य करता है। ईजी, पूरा शब्द बोर्ड पर होना है, और टक्कर नहीं है। आप रेखा खंडों की एक श्रृंखला द्वारा शब्द टकराव मॉडल कर सकते हैं। यह टकराव एल्गोरिदम को रेक्ट करने के लिए रेक्ट का उपयोग करके किया जा सकता है, जहां एक आयाम लगभग 1.

1

वर्टिकली क्षैतिज रूप से उसी विधि का उपयोग करने में सक्षम होना चाहिए। जैसा कि आपने कहा था कि एक स्थान पर शुरू होता है और जब तक आपके खाली रिक्त स्थान होते हैं तब तक नीचे जाते हैं या स्थान में उस शब्द से अक्षर होता है जिसे आप सम्मिलित करना चाहते हैं।

संबंधित मुद्दे