2011-12-31 27 views
1

我正在學習Java,並在這個過程中,我正在寫一個猜字遊戲。 現在我的問題如下:字母位置,找出一個智能的方式猜字遊戲

假設單詞猜測是「行話」。並假設「oodle」是你建議的一個詞。 在處理您的猜測時,應輸出以下內容: 正確的字母:無 錯誤的位置字母:'o'在第一個位置,'l'在第四個位置 請注意,第二個'o'不應該被提及爲字母處於錯誤的位置,因爲我們在此之前已經報告過「o」。因此,如果輸入'ooooo',只有最後一個字母應該高亮顯示,因爲它位於正確的位置,並且如果輸入'ooooz',則只應該突出顯示第一個字母,而不是其他的字母。

我已經嘗試了一些解決方案,但都似乎失敗。我知道有一個聰明/不那麼複雜的方式來做到這一點。那麼有人能幫助我嗎?

代碼:

///Indicates whether a letter has been accounted for 
///while highlighting letters in the guess that are not 
///in the correct position 
private Boolean[][] marked = new Boolean[WordLength][5]; 

///Holds which all letters have been solved so far 
private Boolean[][] solved = new Boolean[WordLength][6]; 


public void CheckLetters() { 

    for (int j = 0; j < currentAttempt; j++) { 
     tempWord = list.get(j); //The guessed words 

     for (int i = 0; i < WordLength; i++) { 

      if (tempWord.charAt(i) == CurrentPuzzleWord.charAt(i)) { 
       solved[i][j] = true; //CurrentPuzzleWord is the string with the hidden word 

      } else if (CurrentPuzzleWord.indexOf(tempWord.charAt(i)) != -1) { 
       marked[i][j] = true; 
      } 
     } 
    } 
+0

http://www.codeproject.com/KB/game/Lingo__a_simple_word_game.aspx – earldouglas 2011-12-31 17:15:40

+0

+1,不能說爲什麼有人扣分。 Regards – 2011-12-31 17:31:12

回答

2

所以你會想要做多項檢查。

String oracle = "lingo"; 
String input = "oodle"; 
String modOracle = ""; 
// ArrayList for noting the matched elements 
ArrayList<Integer> match = new ArrayList<Integer>(); 
// ArrayList for the correct letters with wrong position 
ArrayList<Integer> close = new ArrayList<Integer>(); 
// Length of the Strings of interest 
int length = oracle.length; 

您要檢查的第一件事,顯然是用於匹配和正確位置的字母。因此,採用oracle字符串和用戶輸入字符串並逐字比較,注意那些是正確的。

// may need to check that oracle and input are same length if this isn't enforced. 
for (int i = 0; i < length; i++) { 
    if (input.substring(i,i+1).equals(oracle.substring(i,i+1))) { 
     // there is a match of letter and position 
     match.add(i); 
    } 
    else 
     modOracle = modOracle + oracle.substring(i,i+1); 
} 

然後,您需要再次檢查字母是否正確,但位置錯誤。要做到這一點,首先從正在運行的檢查中取出正確的字母。然後,對於輸入字符串中與oracle字符串中的一個字母相匹配的每個字母,記下匹配並將其從檢查的其餘部分中刪除。繼續操作,直到整個輸入字符串被查看完畢。

for (int i = 0; i < length; i++) { 
    if (match.contains(i)) 
     continue; 

    // String to match 
    String toMatch = input.substring(i,i+1); 

    for (int j = 0; j < modOracle.length; j++) { 
     if (toMatch.equals(modOracle.substring(j,j+1))) { 
      close.add(i); 
      // then remove this letter from modOracle 
      // need small utility method for this. 
      break; 
     } 
    } 
} 

合併兩個檢查的結果並將它們輸出給用戶。

我不知道你想如何顯示結果給用戶,但是你現在有了對應於oracle/input中完全正確的位置的數組列表match以及對應於oracle中的位置的數組列表close /輸入,使得該字母出現在某處,但不在該位置。

+0

謝謝你的幫助!我要試試這個! – Jape 2012-01-01 21:38:03