Skip to content

Repository files navigation

Sapper

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 

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages