2017-02-01 7 views
0

Я делаю игру в Visual Studio 2015 UWP C#, где пользователь вводит все слова, которые они могут придумать, начиная с «Ac» в течение срока и оценивать переменные приращения с каждым словом. У меня есть коллекция словарей в моем приложении C# UWP, содержащем все слова «Ac» в словаре. Игра работает нормально, единственное, что пользователь может ввести в том же слове столько раз, сколько захочет, и оценка будет еще увеличиваться. Есть ли способ справиться с дублированием пользовательского ввода? Это мой код (за исключением около 400 слов в массиве быть кратким и исключая DispatcherTimer):Как проверить, является ли пользовательский ввод одним и тем же в словаре C#

private void btnEnter_Click(object sender, RoutedEventArgs e) 
    { 
     Dictionary<string, int> WordsWithAc = new Dictionary<string, int>(); 
     WordsWithAc.Add("e", 1); 
     WordsWithAc.Add("t", 2); 
     WordsWithAc.Add("ed", 3); 
     WordsWithAc.Add("es", 4); 
     WordsWithAc.Add("he", 5); 
     WordsWithAc.Add("hy", 6); 
     WordsWithAc.Add("id", 7); 
     WordsWithAc.Add("me", 8); 
     WordsWithAc.Add("ne",9); 
     WordsWithAc.Add("re",10); 

     if (GlobalClassAttention.totalRecallScore >= 150) 
     { 
      btnLevel2.Visibility = Visibility.Visible; 
     } 

     if (WordsWithAc.ContainsKey(txtUserInput.Text)) 
     { 
      GlobalClassAttention.totalRecallScore += 10; 
      txtScore.Text=GlobalClassAttention.totalRecallScore.ToString(); 
      imgCorrectSign.Visibility = Visibility.Visible; 
      imgX.Visibility = Visibility.Collapsed; 
      WordsWithAc.Remove(txtUserInput.Text); //Doesn't remove it from the dictionary so the user can enter in the same word more than once 
     } 
     else 
     { 
      imgX.Visibility = Visibility.Visible; 
      imgCorrectSign.Visibility = Visibility.Collapsed; 
     } 
    } 

    private void btnLevel2_Click(object sender, RoutedEventArgs e) 
    { 
     Frame.Navigate(typeof(TotalRecallLevel2)); 
    } 

wordserror.png

Изображение показывает, что введенный в пользователя «Act» дважды и оценка все еще увеличиваются, пользователь не должен иметь возможность вводить двойные слова.

Я попытался использовать массив вместо этого, но был направлен на использование словаря. Это ссылка на другие вещи, которые я пробовал. https://www.codeproject.com/Questions/1167927/How-to-eliminate-duplicate-user-input-within-the-b

+6

каждый раз, когда событие называется новым словарем. поэтому удаление отменяется. Инициализировать словарь вне обработчика события. – Nkosi

+0

Спасибо, Nkosi. Я пробовал это, но я получаю исключение каждый раз, когда я пытаюсь ввести несколько слов. Например, я могу ввести «Act», а затем, если попытаюсь войти в «Действие», я получаю следующее исключение: «Исключение типа« System.ArgumentException »произошло в mscorlib.ni.dll, но не было обработано в коде пользователя Дополнительная информация: Элемент с тем же ключом уже добавлен. Ключ: e. " Обычно, когда это исключение происходит, это означает, что у меня есть более одного экземпляра «e», объявленного в ictionary, но я не обманываю его более чем одним инстинктом, поэтому что-то другое вызывает это исключение. – wishfulcoder

+0

. Исключение только начиналось, когда я объявлял словарь за пределами кнопки. Кроме того, я могу только объявить словарь за пределами кнопки, а «.adds» должны находиться внутри кнопки или они «не существуют в текущем контексте». Как так:. "Словарь WordsWithAc = новый словарь (); частная пустота btnEnter_Click (объект отправителя, RoutedEventArgs е) { WordsWithAc.Add (" е», 1); – wishfulcoder

ответ

1

Попробуйте объявить словарь вне функции вашего мероприятия. Это не будет инициализировать его каждый раз, когда нажимается кнопка.

Dictionary<string, int> WordsWithAc = new Dictionary<string, int>(); 
    WordsWithAc.Add("e", 1); 
    WordsWithAc.Add("t", 2); 
    WordsWithAc.Add("ed", 3); 
    WordsWithAc.Add("es", 4); 
    WordsWithAc.Add("he", 5); 
    WordsWithAc.Add("hy", 6); 
    WordsWithAc.Add("id", 7); 
    WordsWithAc.Add("me", 8); 
    WordsWithAc.Add("ne",9); 
    WordsWithAc.Add("re",10); 
private void btnEnter_Click(object sender, RoutedEventArgs e) 
{ 


    if (GlobalClassAttention.totalRecallScore >= 150) 
    { 
     btnLevel2.Visibility = Visibility.Visible; 
    } 

    if (WordsWithAc.ContainsKey(txtUserInput.Text)) 
    { 
     GlobalClassAttention.totalRecallScore += 10; 
     txtScore.Text=GlobalClassAttention.totalRecallScore.ToString(); 
     imgCorrectSign.Visibility = Visibility.Visible; 
     imgX.Visibility = Visibility.Collapsed; 
     WordsWithAc.Remove(txtUserInput.Text); //Doesn't remove it from the dictionary so the user can enter in the same word more than once 
    } 
    else 
    { 
     imgX.Visibility = Visibility.Visible; 
     imgCorrectSign.Visibility = Visibility.Collapsed; 
    } 
} 
+0

Спасибо pabsusdev. I но я получаю исключение каждый раз, когда я пытаюсь ввести более одного слова. Например, я могу ввести «Act», а затем, если попытаюсь войти в «Действие», я получаю следующее исключение: «Элемент с тот же ключ уже добавлен. Ключ: e. «Обычно, когда это исключение происходит, это означает, что у меня есть более одного экземпляра« e », объявленного в словаре, но у меня нет более одного экземпляра, поэтому что-то другое вызывает это исключение. – wishfulcoder

+0

Исключение только начиналось, когда я объявлял словарь за пределами кнопки. Кроме того, я могу объявить словарь за пределами кнопки, а «.adds» должны находиться внутри кнопки или они «не существуют в текущем контексте», .Вот так: «Словарь WordsWithAc = новый словарь (); private void btnEnter_Click (отправитель объекта, RoutedEventArgs e) { WordsWithAc.Add ("e", 1); – wishfulcoder

+0

@wishfulcoder Где вы инициализировали свой словарь? – AVK