Проект представляет собой WPF-игру “Тетрис” с системой аккаунтов и таблицей рекордов на SQL Server. Игровой цикл реализован на DispatcherTimer, поле визуализировано как матрица Label, фигуры рендерятся/столкновения рассчитываются вручную; есть превью текущей/следующей фигуры, подсчёт очков, ускорение по уровням и визуальные эффекты монеток через DoubleAnimation. Доступ к данным выполнен через ADO.NET с параметризованными запросами; реализованы регистрация, вход, профиль и обращения. Лидерборд кэшируется в MemoryCache. Корректность базовых действий фигуры покрыта модульными тестами MSTest. Прилагается отчет о выполненной работе по разработке приложения и разработке базы данных (диаграммы).
WPF: Window, Grid, Label, Canvas, Ellipse, TextBox, Password-логика кастомом, Button, DataBinding на уровне Content/ItemsSource. Отрисовка и анимации: Brushes, Thickness, DoubleAnimation (падение монеток), DispatcherTimer (игровой тик). События/ввод: KeyDown для управления, Click, Loaded; маскирование пароля через PreviewTextInput/KeyDown. Логика игры: собственная модель поля (Label[,]), проверка коллизий/границ, очистка линий, подсчёт Score/Level, превью фигур. ADO.NET (System.Data.SqlClient): SqlConnection, SqlCommand, SqlDataReader, параметризованные запросы — регистрация/вход, рекорды, обращения, профиль. Кэширование: System.Runtime.Caching.MemoryCache для топ-листа. Utility: Random, StringBuilder, LINQ для мини-агрегаций, обработка исключений с MessageBox. Тестирование: MSTest ([TestClass], [TestMethod], Assert.*) — базовая гарантия корректности движения фигуры.
Главное меню (MainWindow) → переход в авторизацию (Vhod), старт игры (GameStart → Play), правила (rools → support), лидерборд (wins). Игра (Play) Цикл на DispatcherTimer: падение фигуры, апдейт счёта/уровня/скорости. При повышении счёта — спавн “монеток” на Canvas с DoubleAnimation (падающие кружки). Сохранение рекорда в БД: UPDATE пользватели SET рекорд = @… WHERE логин=@… AND (рекорд IS NULL OR @… > рекорд). Пауза/рестарт, управление стрелками/Space/P. Доска (Board) Сетка Grid → двумерный массив Label[,] как клетки поля. Рендер активной фигуры, стирание, проверки столкновений, удаление заполненных рядов, начисление очков и повышение уровня. Превью текущей и следующей фигур в отдельных 4×4 грид-окнах. Фигура (Tetrimino) 7 типов (I,J,L,O,S,T,Z), цвет кистью Brushes.*. Позиция, массив точек, движение (←/→/↓) и поворот (простая матрица поворота). Конец игры (GameEnd) — показ счёта; если гость — предлагает зарегистрироваться. Регистрация (Reg) / Вход (Vhod) Скрытие ввода пароля собственным маскером (обработчики PreviewTextInput/PreviewKeyDown, хранение в StringBuilder). Валидации: в полях должны быть буквы; проверка уникальности; логин+пароль против БД. Профиль (profil) Показывает ник/логин/пароль, CRUD: смена ника/логина/пароля, просмотр и удаление обращений, удаление аккаунта (каскадно чистит обращения). Поддержка (support) — отправка обращения в таблицу обращения (только для авторизованных). Лидерборд (wins) — чтение ник+рекорд, кэширование результата в MemoryCache на 10 минут.
Тесты (tetris.Test1) — MSTest: конструктор создаёт 4 блока, перемещения меняют X/Y как ожидается.