2014-03-04 59 views
2

Hej,有沒有人知道我可以如何使我的方法猜字母記得 之前的猜測?目前,它把一切「正確」猜測到猜到最後的右信:(Hangman循環,字母問題C#

public void myGuess(char letter) 
{ 
    string wordToGuess = label4.Text; 
    string wordToShow = label5.Text; 

    for (int i = 0; i < wordToGuess.Length; i++) 
    { 
     if (wordToGuess[i] == letter || wordToGuess[i] == wordToShow[i]) 
      wordToShow = wordToShow.Remove(i, 1).Insert(i, Char.ToString(letter)); 
    } 

    label5.Text = wordToShow; 

    if (wordToGuess == wordToShow) 
     this.Close(); 

    Form Win = new Win(); 
    Win.Show(); 
} 
+0

哪個變量存儲正確的猜測? – 2014-03-04 11:12:17

+0

@Tijesunimi:無...這是OP要求幫助 – musefan

+0

@musefan謝謝。我想我誤解了這個現在它把所有「正確的」猜測變成了猜對的最後一個字母。聽起來更像是OP已經有一種存儲正確猜測的方式 – 2014-03-04 11:13:43

回答

1

問題在於你的循環。

您的測試將檢查角色是否等於猜測字母或已猜字中相同位置的字母。

如果測試成功,則有效地將該值替換爲猜測字母。

您需要或者刪除測試的第二部分:也

if (wordToGuess[i] == letter) 
     wordToShow = wordToShow.Remove(i, 1).Insert(i, Char.ToString(letter)); 

或更改替換

if (wordToGuess[i] == letter || wordToGuess[i] == wordToShow[i]) 
     wordToShow = wordToShow.Remove(i, 1).Insert(i, Char.ToString(wordToShow[i])); 

代替移除的/插入如果先更改wordToShow到字符數組您可以直接更改它的值並在完成時將其轉換回字符串,這使得代碼更易於閱讀。它也可能比所有插入/移除更好的性能。

var newWord = wordToShow.ToCharArray(); 
for (var i = 0; i<wordToGuess.Length; i++) { 
    if (wordToGuess[i] == letter) { 
    newWord[i] = letter; 
    } 
} 
wordToGuess = new string(newWord); 
2

有燒焦的全局列表,並加入到它後每猜

List<char> guesses = new List<char>(); 

然後在你的方法,只需添加它

guesses.Add(letter); 

,然後你可以檢查使用此

if (guesses.Contains(letter)) 
{ 
    //DoSomething 
} 
+0

..以及如何檢查一個字母是否在列表中? – musefan

+1

@musefan查看編輯 –

+0

它必須是全球性的嗎?有爭議的問題先生!我會更喜歡_accessible_ intead。 – Gusdor