Sapper — Саппер, сделанный ERR_418(Пухляк Лука) и CVVAROG (Пренко Тимофей)
Игра реализует классического сапера с возможностью сохранять и загружать прогресс, просмотра локального лидера и простыми настройками сохранений.
-
Главное меню
New game— создать новую игру с параметрами, выбранными в менюStart.Continue— перейти к экрану продолжения (см. ниже).Liderboard— просмотреть локальные (и при доступности — онлайн) результаты.Settings— изменить папку сохранений и формат (Json/Xml).
-
Start (выбор параметров игры)
- Выбор размера поля (
5x5,5x10, ...). - Выбор сложности (
Normal,Expert,Nightmare). Start— применить выбор и начать игру.
- Выбор размера поля (
-
Continue
Continue latest— загрузить последний сохранённый слот (один перезаписываемый слот используется по умолчанию).Load from GameData— открыть браузер файлов внутри папкиSaves/GameData.
-
Game (игра)
- Левый верхний угол: кнопка
Back— сохранить прогресс и вернуться в главное меню. - Поле игры: клик левой кнопкой — открыть клетку; правая — поставить/снять флаг.
- Левый верхний угол: кнопка
-
EndGame (после окончания игры)
- Показывает результат
YOU WIN/YOU DIEDи время игры. Play again— запустить вновь с текущими настройками.
- Показывает результат
-
Liderboard (лидерборд)
- Переключатель
Local/Onlineи отбор по размерам поля.
- Переключатель
Core/
CellBase.cs— базовый абстрактный класс клетки поля (поля: открыта, флаг, число соседних мин).ICell.cs— интерфейс клетки (IsOpened,HasFlag,IsMine,NearbyMinesCount).MineCell.cs— реализация клетки-мины (наследуетCellBase).NumberCell.cs— реализация клетки с числом рядом стоящих мин (наследуетCellBase).GameField.cs— генерация поля, размещение мин с учётом безопасной зоны, подсчёт соседних мин и валидация расположения мин.GameLogic.cs— основная логика игры: открытие клеток, установка флажков, отслеживание генерации поля и события окончания игры.GameLogic.Timer.cs— логика таймера: конфигурация лимита, отсчёт времени, завершение игры при достижении нуля.GameLogic.Win.cs— проверка условия победы (все не-миновые клетки открыты).Difficulty.cs— константы вероятностей мин для уровней сложности (Normal/Expert/Nightmare).
Data/
GameSnapshot.cs— DTO-снимок состояния игры: размеры поля, процент мин, списокCellSnapshot, время и лимиты.CellSnapshot.cs— DTO для одной клетки (флаг, открыта ли, является ли миной, число соседних мин).GameSnapshotSerializer.cs— абстрактный сериализатор снимков; решает, какой конкретный сериализатор использовать по расширению.JsonGameSnapshotSerializer.cs— сериализация/десериализация снимков в JSON (Newtonsoft.Json).XmlGameSnapshotSerializer.cs— сериализация/десериализация снимков в XML (XmlSerializer).GameSaveStore.cs— высокоуровневое API для загрузки/сохранения снимков; выбор сериализатора; копирование/конвертация файлов при смене формата.SettingsSnapshot.cs— DTO настроек (папка сохранений, выбранный формат сохранения).SettingsStore.cs— загрузка/сохранение настроек приложения (по умолчаниюSavesи форматJson).
Model/
ICell.cs— интерфейс клетки (повторяется для модели/контракта между слоями).CellBase.cs— абстрактная модель клетки, общая реализация дляCoreи UI.Difficulty.cs— коэффициенты сложности в модельном слое (дублируетCore.Difficultyдля изоляции зависимостей).IUI.cs— минимальный интерфейс UI-компонента с методомDraw().
UI/
Main.cs— главное меню приложения с кнопкамиNew game,Continue,Liderboard,Settings.Start.cs— экран выбора параметров новой игры (размер поля, сложность); применяет выбор и стартует игру.Continue.cs— экран возобновления игры: быстрыйContinue latestи файловый браузер для выбора сохранения; помечает невалидные файлы.Game.cs— игровой экран: отрисовка поля, обработка кликов, таймер, сохранение и восстановление черезGameSnapshot.EndOfAll.cs— экран результатов (победа/поражение) с опциямиPlay againиMain menu.Settings.cs— экран настроек: выбор папки сохранений и формата (Json/Xml); при смене формата выполняется конвертация файлов.Liderboard.cs— локальная и опциональная онлайн-таблица лидеров; хранит офлайн-результаты и синхронизирует при старте.UILib.cs(Lib) — утилиты для UI: отрисовка кнопок, укорочение путей, подгон текста, формат времени, скроллинг списков.InitUI.cs— инициализация приложения, хранение текущего состояния UI, запуск игрового цикла Raylib, загрузка настроек и синхронизация лидеров.GameState.cs— перечисление состояний UI (Main, StartMenu, ContinueMenu, Settings, Game, Leaderboard, EndGame).GameState.cs— перечисление состояний UI (Main, StartMenu, ContinueMenu, Settings, Game, Leaderboard, EndGame).
- C# (
net10.0) - Raylib-cs
- Newtonsoft.Json
можно скачать исполняемый файл с https://github.com/MISIS-Go/Sapper/releases и его запустить ( возможно потребуется загрузка пакетов в вашу систему
для apt дистро:
sudo apt update && sudo apt install -y libgl1-mesa-dev libxi-dev libxcursor-dev libxrandr-dev libxinerama-dev libasound2-dev
для pacman дистро:
sudo pacman -Syu --noconfirm mesa libxi libxcursor libxrandr libxinerama alsa-lib
для dnf дистро:
sudo dnf install -y mesa-libGL-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel alsa-lib-devel
для остальных OS смотрите мануал.
) (( поддержка шиндовс в релизах имеется, но требуется установка пакетов. рекомендую использовать msys2 и тогда посмотреть, что для pacman дистро. или другой вариант: читайте мануал и зависимости (причина тому возможности для тестирования на слоп системе разработчики не имеют ))) или
git clone git@github.com:MISIS-Go/Sapper.git
cd Sapper
dotnet run