Learning Spanish — настольное WPF-приложение для изучения испанских слов с помощью интерактивных карточек.
Пользователь проходит тест, выбирая правильный перевод слова, получает очки и может посмотреть результаты предыдущих попыток. Набор карточек не зафиксирован в коде: его можно редактировать, сохранять и загружать из JSON-файла.
Проект разработан как самостоятельное учебное приложение для практики C#, WPF, привязки данных и архитектурного паттерна MVVM.
- изучение испанских слов по карточкам;
- выбор ответа из нескольких вариантов;
- случайное перемешивание карточек перед началом теста;
- отдельное перемешивание вариантов перевода;
- проверка ответа и визуальная обратная связь;
- начисление очков за правильные ответы;
- сохранение имени игрока и результата;
- просмотр и очистка статистики;
- экспорт и импорт статистики в формате JSON;
- добавление, редактирование и удаление карточек;
- сохранение пользовательского набора карточек;
- загрузка карточек из выбранного JSON-файла.
- C#
- .NET 8
- WPF
- XAML
- MVVM
INotifyPropertyChangedObservableCollection- собственная реализация
ICommand - Newtonsoft.Json
- стандартные диалоги Windows для открытия и сохранения файлов
- Пользователь вводит имя и открывает режим тренировки.
- Приложение перемешивает карточки и варианты ответов.
- На экране отображается слово на испанском и несколько возможных переводов.
- После выбора ответа приложение проверяет его и показывает результат.
- За правильный ответ начисляется 15 очков.
- После завершения результат сохраняется в статистику.
Если пользовательский файл карточек ещё не создан, приложение загружает встроенный демонстрационный набор слов.
Для локального хранения используются JSON-файлы:
AllCards.json— пользовательский набор карточек;Statistics.json— имена игроков и набранные очки.
Файлы создаются рядом с запущенным приложением. Через интерфейс можно выбрать другой JSON-файл для импорта карточек или статистики, а также сохранить результаты в указанное пользователем место.
Модель карточки содержит:
- идентификатор;
- слово на испанском;
- правильный перевод;
- список возможных ответов.
Проект частично построен по паттерну MVVM:
- Model — карточки, сериализуемые модели, статистика игрока и команды.
- ViewModel — состояние приложения, коллекции данных, команды и логика тренировки.
- View — WPF-страницы и окна, созданные с помощью XAML.
Основная логика сосредоточена в AllCardsViewModel: класс управляет карточками, текущим вопросом, очками, статистикой, состоянием кнопок и операциями с файлами.
Для автоматического обновления интерфейса используются INotifyPropertyChanged и ObservableCollection.
learningSpanish/
├── Model/
│ ├── Card.cs # Модель учебной карточки
│ ├── SerializableCard.cs # Представление карточки для JSON
│ ├── playerStatistics.cs # Результат игрока
│ └── BaseCommand.cs # Реализация ICommand
├── View/
│ ├── MainWindow.xaml # Главное меню
│ ├── StartCards.xaml # Режим тренировки
│ ├── EditCardsView.xaml # Управление карточками
│ ├── CardView.xaml # Окно редактирования
│ ├── Statistic.xaml # Просмотр статистики
│ └── NavigationWindow.xaml # Навигационное окно
├── ViewModel/
│ └── AllCardsViewModel.cs # Состояние и логика приложения
├── App.xaml # Ресурсы и точка входа WPF
└── learning_Spanish.csproj # Конфигурация .NET-проекта
- Windows;
- .NET 8 SDK;
- Visual Studio 2022 с компонентом .NET Desktop Development или другая среда с поддержкой WPF.
git clone https://github.com/Gonerr/learningSpanish.git
cd learningSpanishОткройте learning_Spanish.sln, восстановите NuGet-пакеты и запустите проект.
dotnet restore
dotnet run --project learning_Spanish.csprojWPF поддерживается только в Windows.
- привязка элементов WPF-интерфейса к ViewModel;
- уведомление интерфейса об изменениях состояния;
- управление действиями через команды;
- навигация между WPF-страницами;
- сериализация и десериализация коллекций;
- импорт и экспорт пользовательских данных;
- алгоритм случайного перемешивания карточек и ответов;
- динамическое управление доступностью элементов интерфейса;
- хранение пользовательской статистики между запусками.
Приложение является функциональным учебным прототипом.
Возможные направления развития:
- добавить тематические наборы слов и уровни сложности;
- реализовать повторение слов, в которых пользователь чаще ошибается;
- добавить произношение и аудиозаписи;
- перенести работу с файлами в отдельный сервис;
- завершить разделение логики интерфейса по MVVM;
- добавить валидацию редактируемых карточек;
- хранить пользовательские данные в системной папке приложения;
- добавить автоматические тесты для подсчёта очков и сериализации.
Анастасия Лихачева
Проект разработан самостоятельно в качестве учебной работы для изучения C#, WPF, MVVM и организации локального хранения данных.