Hangman循环,字母问题C#

时间:2014-03-04 11:10:55

标签: c#

Hej,有谁知道我怎么能让我的猜字方法记住 之前的猜测?目前,它将所有"正确"猜到最后一个正确的字母猜到了:(

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();
}

2 个答案:

答案 0 :(得分:2)

拥有一个char的全局列表,并在每次猜测后添加到它

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

然后在你的方法中加入

guesses.Add(letter);

然后您可以使用此

进行检查
if (guesses.Contains(letter))
{
    //DoSomething
}

答案 1 :(得分: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更改为char数组,而不是删除/插入,那么你可以直接更改它的值并在完成时转换回字符串,这使得代码更容易阅读。它的性能也可能比所有插入/删除都要好。

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