public MainWindow() { InitializeComponent(); firstLetter = (char)0; random = new Random(); points = 0; LocalDbQuery.DisableAll(); // Пометить все города неиспользованными }
private async void finishButton_Click(object sender, RoutedEventArgs e) { if(isFinished) { postButton.IsEnabled = false; progressBar.IsIndeterminate = true; try { await Task.Run(() => { LocalDbQuery.DisableAll(); }); // Пометка всех городов неиспользованными } catch { postButton.IsEnabled = true; progressBar.IsIndeterminate = false; MessageBox.Show("Ошибка чтения базы данных!"); this.Close(); return; } isFinished = false; postButton.Visibility = Visibility.Hidden; stepButton.Visibility = Visibility.Visible; finishButton.Content = "Закончить игру"; resultLabel.Content = String.Empty; historyListBox.Items.Clear(); label.Content = "Введите город:"; points = 0; firstLetter = (char)0; humanTextBlock.Text = String.Empty; skynetTextBlock.Text = String.Empty; isWin = false; postButton.IsEnabled = true; progressBar.IsIndeterminate = false; } else { isFinished = true; postButton.Visibility = Visibility.Visible; stepButton.Visibility = Visibility.Hidden; finishButton.Content = "Начать заново"; resultLabel.Content = String.Format("Вы набрали {0} баллов в игре!", points); } }
private async void stepButton_Click(object sender, RoutedEventArgs e) { progressBar.IsIndeterminate = true; stepButton.IsEnabled = false; if(humanResponse != null) { humanResponse.Dispose(); } if(skynetResponse!= null) { skynetResponse.Dispose(); } string cityName = cityTextBox.Text.Trim(); if (cityName == String.Empty || firstLetter.ToString() != cityName[0].ToString().ToUpper() && firstLetter != 0) { // Если город не на ту букву или отсутствует progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; if(firstLetter == (char)0) { MessageBox.Show("Напишите город на любую букву"); return; } else { MessageBox.Show(String.Format("Напишите город на букву '{0}'", firstLetter)); return; } } Dictionary<string, string> dict = new Dictionary<string, string>(); // Параметры для запроса к БД dict.Add("name", String.Format("N'{0}'", cityName)); dict.Add("disable", "'0'"); List<City> results; try { results = await Task.Run(() => { return LocalDbQuery.Select(dict); }); // Проверка существования города в БД } catch { progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; MessageBox.Show("Ошибка чтения базы данных!"); this.Close(); return; } if (results.Count == 0) { progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; MessageBox.Show("Города нет в базе или он уже использован!"); return; } foreach (City item in results) { historyListBox.Items.Insert(0, item); // Вывод города в историю игры LocalDbQuery.DisableCity(item.Id); // Пометка города как использованного } string humanCity = (historyListBox.Items[0] as City).Name; points++; humanResponse = Task.Run(() => // Запрос информации о городе с википедии { Action act = () => { humanTextBlock.Text = humanCity + "\n"; try { humanTextBlock.Text += JArray.Parse(new StreamReader(WebRequests.WikiRequest(humanCity).GetResponseStream()).ReadToEnd())[2][0].ToString(); } catch { } }; humanTextBlock.Dispatcher.Invoke(act); }); firstLetter = (historyListBox.Items[0] as City).Name.ToUpper().Last(); if (firstLetter == 'Ь' || firstLetter == 'Ы') { firstLetter = (historyListBox.Items[0] as City).Name.ToUpper()[(historyListBox.Items[0] as City).Name.Length - 2]; } dict = new Dictionary<string, string>(); // Параметры для запроса к БД dict.Add("first", String.Format("N'{0}'", firstLetter)); dict.Add("disable", "'0'"); try { results = await Task.Run(() => { return LocalDbQuery.Select(dict); }); // Проверка существования города в БД } catch { progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; MessageBox.Show("Ошибка чтения базы данных!"); this.Close(); return; } if (results.Count == 0) { isFinished = true; postButton.Visibility = Visibility.Visible; stepButton.Visibility = Visibility.Hidden; finishButton.Content = "Начать заново"; resultLabel.Content = String.Format("Вы набрали {0} баллов в игре!", points); progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; isWin = true; MessageBox.Show("Поздравляю! Вы выиграли компьютер!"); return; } string name = results[random.Next(results.Count)].Name; foreach (City item in results) { if (item.Name == name) { historyListBox.Items.Insert(0, item); // Вывод города в историю игры LocalDbQuery.DisableCity(item.Id); // Пометка города как использованного } } string skynetCity = (historyListBox.Items[0] as City).Name; skynetResponse = Task.Run(() => // Запрос информации о городе с википедии { Action act = () => { skynetTextBlock.Text = skynetCity + "\n"; try { skynetTextBlock.Text += JArray.Parse(new StreamReader(WebRequests.WikiRequest(skynetCity).GetResponseStream()).ReadToEnd())[2][0].ToString(); } catch { } }; humanTextBlock.Dispatcher.Invoke(act); }); firstLetter = (historyListBox.Items[0] as City).Name.ToUpper().Last(); if (firstLetter == 'Ь' || firstLetter == 'Ы') { firstLetter = (historyListBox.Items[0] as City).Name.ToUpper()[(historyListBox.Items[0] as City).Name.Length - 2]; } label.Content = String.Format("Введите город на букву '{0}':", firstLetter); cityTextBox.Text = String.Empty; progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; }