Задание
Написать игру "Игра в слова", в которой необходимо за 6 попыток угадать загаданное слово. Дополнительно реализовать возможность изменения количества букв в слове и язык угадываемых слов. При написании игры использовать язык C# (.NET 6) с технологией WPF и паттерном MVVM. Архитектуру приложения построить по принципам ООП. Нестандартный дизайн игры реализован с применением пакета HandyControl.
Функционал программы
- Возможность ввода букв через автогенерируемую клавиатуру на интерфейсе игры;
- Ведение счёта успешности попыток и общего количества оставшихся слов;
- Сброс игры в начальное состояние.
Особенности игры
- Возможность смены количества букв в слове;
- Возможность смены языка угадываемых слов;
- Современный дизайн и грамотно написанный код с комментариями.
Фрагмент программного кода
Метод проверки введённого слова и сравнения с эталонным
// Проверить попытку и вернуть состояние каждой буквы private IReadOnlyList<LetterState> CheckGuess(string word) { var states = new List<LetterState>(); // Проходимся по буквам введённого слова и угадываемого foreach (var (attemptCh, currentCh) in word.Zip(_currentWord)) { // Если символ и позиция угаданы if (attemptCh == currentCh) { // Пометить как угаданный states.Add(new(attemptCh, LetterStatus.Guessed)); } // Если символа вообще нет в слове else if (!_currentWord.Contains(attemptCh)) { // Пометить как ошибочный states.Add(new(attemptCh, LetterStatus.Wrong)); } // Если символ есть, но не на своей позиции else { // Помечаем как неотгаданные для последующей обработки states.Add(new(attemptCh, LetterStatus.NotGuessed)); } } // Проходимся по оставшимся символам // Здесь будут только символы, которые стоят не на своих местах foreach (var state in states.Where(x => x.Status == LetterStatus.NotGuessed)) { // Считаем количество символов, которые угаданы или есть в слове, но не на своей позиции var existingCount = states.Count(x => x.Ch == state.Ch && (x.Status == LetterStatus.Guessed || x.Status == LetterStatus.Nearly)); // Считаем общее количество проверяемой буквы в слове var totalCount = _currentWord.Count(x => x == state.Ch); // Пометить как "Рядом", если проверяемой буквы меньше чем её общее количество в слове state.Status = existingCount < totalCount ? LetterStatus.Nearly : LetterStatus.Wrong; } // Вернуть состояние каждой буквы return states; // Пример // Слово: АКЦИЯ // Пользователь ввёл: АКАЦИ // 0 - Правильно // 1 - Правильно // 2 - Неправильно, так как больше букв А в слове нет // 3 - Правильно, но на другой позиции // 4 - Правильно, но на другой позиции }
Скриншот архива с проектом
Пояснения по запуску программы
Для запуска программы должны быть установлены следующие компоненты:
- Visual Studio 2022;
- .NET 6.
Всё это можно установить в установщике Visual Studio Installer при установке Visual Studio 2022. Далее просто запустить игру.
kostyaLem