PHPackages                             fhj7438ht/minesweeper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. fhj7438ht/minesweeper

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

fhj7438ht/minesweeper
=====================

v3.0.0(8mo ago)08PHP

Since Sep 14Pushed 8mo agoCompare

[ Source](https://github.com/fhj7438ht/minesweeper)[ Packagist](https://packagist.org/packages/fhj7438ht/minesweeper)[ RSS](/packages/fhj7438ht-minesweeper/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (7)Used By (0)

Minesweeper
===========

[](#minesweeper)

Консольная игра "Сапёр" для PHP.

Установка
---------

[](#установка)

### Через Composer (рекомендуется)

[](#через-composer-рекомендуется)

```
composer require fhj7438ht/minesweeper
```

После установки запустите игру:

```
php ./vendor/bin/minesweeper.php
```

### Установка из исходного кода

[](#установка-из-исходного-кода)

Минимальные требования:

- PHP &gt;= 7.4
- Composer (глобально доступен как команда `composer`)

Установка зависимостей:

```
composer install
```

Запуск игры:

```
php bin/minesweeper.php
```

Игровой процесс
---------------

[](#игровой-процесс)

### Начало игры

[](#начало-игры)

При запуске игры без параметров или с параметром `--new` (`-n`) начинается новая игра. Программа запросит у вас:

1. **Имя игрока** (только английские буквы, для сохранения в базе данных)
2. **Количество строк** (по умолчанию 9)
3. **Количество столбцов** (по умолчанию 9)
4. **Количество мин** (по умолчанию 10)

### Управление игрой

[](#управление-игрой)

#### Ввод координат

[](#ввод-координат)

- **Открыть ячейку**: введите два числа через пробел (строка столбец)
    - Пример: `1 1` - открыть ячейку в строке 1, столбце 1
- **Отметить ячейку**: введите `M` и два числа через пробел
    - Пример: `M 2 3` - отметить ячейку в строке 2, столбце 3
- **Выйти из игры**: введите `q` или `quit`
    - Игра сохранится и вы сможете продолжить позже

#### Символы на поле

[](#символы-на-поле)

- `.` - закрытая ячейка
- `M` - отмеченная ячейка (флаг)
- `*` - мина (показывается при проигрыше)
- ` ` (пробел) - пустая ячейка
- `1-8` - количество мин в соседних ячейках

### Параметры командной строки

[](#параметры-командной-строки)

```
# Новая игра (по умолчанию)
minesweeper
minesweeper --new
minesweeper -n

# Список сохраненных игр
minesweeper --list
minesweeper -l

# Повтор игры с ID
minesweeper --replay 123
minesweeper -r 123

# Справка
minesweeper --help
minesweeper -h
```

### Правила игры

[](#правила-игры)

1. **Цель**: открыть все ячейки, не содержащие мины
2. **Числа**: показывают количество мин в соседних ячейках
3. **Отметки**: используйте `M` для отметки подозрительных ячеек
4. **Победа**: когда все безопасные ячейки открыты
5. **Проигрыш**: при открытии ячейки с миной

### Пример игровой сессии

[](#пример-игровой-сессии)

```
=== Добро пожаловать в игру Сапёр! ===

Введите количество строк (по умолчанию 9):
Введите количество столбцов (по умолчанию 9):
Введите количество мин (по умолчанию 10):

=== Игровое поле ===

    1  2  3  4  5  6  7  8  9
 1  .  .  .  .  .  .  .  .  .
 2  .  .  .  .  .  .  .  .  .
 3  .  .  .  .  .  .  .  .  .
 4  .  .  .  .  .  .  .  .  .
 5  .  .  .  .  .  .  .  .  .
 6  .  .  .  .  .  .  .  .  .
 7  .  .  .  .  .  .  .  .  .
 8  .  .  .  .  .  .  .  .
 9  .  .  .  .  .  .  .  .  .

Введите координаты (строка столбец) или M строка столбец для отметки: 1 1

```

Работа с базой данных
---------------------

[](#работа-с-базой-данных)

### Сохранение игр

[](#сохранение-игр)

Игра автоматически сохраняется в базу данных SQLite при каждом ходе. База данных создается в файле `minesweeper.db` в текущей директории.

**Возможности сохранения:**

- Автоматическое сохранение новой игры при создании
- Обновление состояния игры после каждого хода
- Сохранение финального состояния при завершении игры
- Сохранение игры при выходе (команда `q` или `quit`)
- Запись всех ходов в формате: номер хода | координаты | результат

### Просмотр сохраненных игр

[](#просмотр-сохраненных-игр)

```
# Показать список всех сохраненных игр
minesweeper --list
minesweeper -l
```

Список показывает:

- ID игры
- Имя игрока
- Размеры поля (строки, столбцы)
- Количество мин
- Статус игры (Активна, Победа, Проигрыш)
- Дату создания и последнего обновления

### Воспроизведение игр

[](#воспроизведение-игр)

```
# Воспроизвести игру по ID
minesweeper --replay 123
minesweeper -r 123
```

**Возможности воспроизведения:**

- Пошаговое воспроизведение всех ходов игры
- Просмотр координат и результатов каждого хода
- Полное восстановление состояния поля
- Просмотр завершенных игр (победа/проигрыш)
- Продолжение незавершенных игр

### Структура базы данных

[](#структура-базы-данных)

База данных SQLite содержит две таблицы:

**Таблица `games`:**

- `id` — уникальный идентификатор игры
- `player_name` — имя игрока
- `rows`, `cols`, `mines` — параметры игрового поля
- `board_state` — сериализованное состояние игрового поля
- `visible_state` — сериализованное состояние видимых ячеек
- `game_over`, `game_won` — статус завершения игры
- `opened_cells` — количество открытых ячеек
- `created_at`, `updated_at` — временные метки

**Таблица `moves`:**

- `id` — уникальный идентификатор хода
- `game_id` — ссылка на игру
- `move_number` — номер хода в игре
- `row`, `col` — координаты ячейки
- `action` — действие (open/flag)
- `result` — результат хода (мины нет/взорвался/выиграл/отмечена)
- `created_at` — время хода

Архитектура проекта
-------------------

[](#архитектура-проекта)

### Структура файлов

[](#структура-файлов)

- `src/Game.php` — основная игровая логика
- `src/Controller.php` — обработка командной строки и игровой цикл
- `src/View.php` — отображение интерфейса
- `src/Database.php` — работа с базой данных SQLite
- `src/GameRepository.php` — управление данными игр
- `bin/minesweeper.php` — точка входа в приложение

Использование в коде
--------------------

[](#использование-в-коде)

После установки пакета через Composer, вы можете использовать его в своем PHP коде:

```
