2012-08-22 27 views
1

首先,我沒有要求代碼...我剛剛到了點,我不知道如何進步...可以有人請向我解釋如何開始這個hang子手的這一步?我已經有按鈕的排列:Hang子手 - 隱藏字符串,然後取消隱藏每個字符如果猜測正確

String b[]={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}; 
for(i = 0; i < buttons.length; i++) { 
    buttons[i] = new JButton(b[i]);   
    panel.add(buttons[i]); 
} 

然後我試圖隱瞞這個詞來自一個列表:

public String readWord() { 
    try { 
    BufferedReader reader = new BufferedReader(new FileReader("Words.txt")); 
    String line = reader.readLine(); 
    List<String> words = new ArrayList<String>(); 
    while(line != null) { 
     String[] wordsLine = line.split(" "); 
     boolean addAll = words.addAll(Arrays.asList(wordsLine)); 
     line = reader.readLine(); 
    } 
    Random rand = new Random(System.currentTimeMillis()); 
    String randomWord = words.get(rand.nextInt(words.size())); 
    return randomWord; 
    } catch (Exception e) { 
    return null; 
    } 
} 

現在能有人請點我到正確的方向用「 - 」隱藏單詞。而當用戶點擊一個正確的按鈕,該字母必須出現...

如果它不是很清楚,我很抱歉。

回答

6

只需使用一個對象來解決這種情況:

public class HangmanWord { 

    private static final char HIDECHAR = '_'; 

    private String original;  
    private String hidden; 

    public HangmanWord(String original) { 
     this.original = original; 
     this.hidden = this.createHidden(); 
    } 

    private String createHidden() { 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < this.original.length; i++) { 
      sb.append(HIDECHAR); 
     } 
     return sb.toString(); 
    } 

    public boolean check(char input) { 
     boolean found = false; 
     for (int i = 0; i < this.original.length; i++) { 
      if (this.original[i].equals(input)) { 
       found = true; 
       this.hidden[i] = this.original[i]; 
      } 
     } 
     return found; 
    } 

    //getter and setter 
} 

當點擊一個按鈕,你檢查的原詞是否包含你的信。然後,您可以在隱藏的字中顯示該字符。 hidden[i] = original[i]。 有了這個封裝,我希望解決方案應該更清晰。

可能的用途:

public class TestClass() { 

    public static void main(String[] args) { 
     String secret = "stackoverflow"; 
     int wrongGuesses = 0; 
     HangmanWord hngm = new HangmanWord(secret); 
     System.out.println(hngm.getHidden()); // _____________ 
     if (hngm.check('a')) { 
      System.out.println(hngm.getHidden()); // __a_________ 
     } 
     else { 
      wrongGuesses++; 
     } 
     //... and so on... 
    } 
} 

如果您需要幫助理解這只是讓我知道。

0

保留字符串,單詞和模糊處理過的一個(包含' - '的一個)的副本(最好是char數組或字符串構建器)。當用戶猜到一個字母時,搜索該字母的所有實例的非模糊版本。每次找到匹配項時,將混淆字符串中該索引處的' - '更改爲正確的字母。

0

我實際上不確定我是否正確解決了這個問題,但如果您的問題是要替換字母所在的字母所在的字母,我會在開始時創建兩個字符串,原始字詞,以及只包含「_」s的原始單詞(以下稱爲「隱藏字符串」)。 然後你需要一些邏輯來檢查是否以及如果是這樣的話在字(這不應該很難,使用StringBuilder),然後將「隱藏字符串」中的適當的字段變爲字母。爲了顯示你的GUI上的字符(我假設你有一個,因爲你有按鈕),你使用某種TextField/-View來顯示「隱藏字符串」,我只需刪除TextField的前一個內容,寫出新的「隱藏字符串」。

希望幫助...

編輯:實際上挽救了兩個char型數組來代替兩個字符串會更優雅,也可以很容易地轉換爲字符串完整地寫出來。