Задание
Написать игру "Игра в слова", в которой необходимо за 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. Далее просто запустить игру.
Структура проекта

Телеграм
-