2014-03-04 23 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