fhj7438ht / minesweeper
Installs: 8
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/fhj7438ht/minesweeper
Requires
- wp-cli/php-cli-tools: 0.12.5
README
Консольная игра "Сапёр" для PHP.
Установка
Через Composer (рекомендуется)
composer require fhj7438ht/minesweeper
После установки запустите игру:
php ./vendor/bin/minesweeper.php
Установка из исходного кода
Минимальные требования:
- PHP >= 7.4
- Composer (глобально доступен как команда
composer)
Установка зависимостей:
composer install
Запуск игры:
php bin/minesweeper.php
Игровой процесс
Начало игры
При запуске игры без параметров или с параметром --new (-n) начинается новая игра. Программа запросит у вас:
- Имя игрока (только английские буквы, для сохранения в базе данных)
- Количество строк (по умолчанию 9)
- Количество столбцов (по умолчанию 9)
- Количество мин (по умолчанию 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
Правила игры
- Цель: открыть все ячейки, не содержащие мины
- Числа: показывают количество мин в соседних ячейках
- Отметки: используйте
Mдля отметки подозрительных ячеек - Победа: когда все безопасные ячейки открыты
- Проигрыш: при открытии ячейки с миной
Пример игровой сессии
=== Добро пожаловать в игру Сапёр! ===
Введите количество строк (по умолчанию 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— работа с базой данных SQLitesrc/GameRepository.php— управление данными игрbin/minesweeper.php— точка входа в приложение
Использование в коде
После установки пакета через Composer, вы можете использовать его в своем PHP коде:
<?php require 'vendor/autoload.php'; use fhj7438ht\Minesweeper\Controller; use fhj7438ht\Minesweeper\Game; // Запуск игры Controller\startGame(); // Создание игрового объекта $game = new Game(9, 9, 10);
Ссылки
- Packagist: https://packagist.org/packages/fhj7438ht/minesweeper
- Исходный код: GitHub