masyasmv / otus-macro-commands
Macro commands implementation for Otus course
v1.0.0
2025-07-15 23:25 UTC
Requires
- php: ^8.3
Requires (Dev)
- phpunit/phpunit: ^12.1
This package is auto-updated.
Last update: 2025-07-30 20:16:27 UTC
README
Учебный мини-фреймворк для шаблона Command с поддержкой:
- MoveCommand / RotateCommand — базовые действия (переместить, повернуть).
- CheckFuelCommand / BurnFuelCommand — расход топлива с проверкой остатка.
- MacroCommand — цепочка команд c атомарным выполнением (останавливается и прокидывает
CommandException
при ошибке). - ChangeVelocityCommand — пересчёт вектора мгновенной скорости после поворота.
Пример макрокоманд в игре «Космическая битва»:
$move = new MacroCommand( new CheckFuelCommand(5), // 1) есть ли топливо? new MoveCommand(1), // 2) сдвигаемся new BurnFuelCommand(5) // 3) вычитаем расход ); $rotate = new MacroCommand( new RotateCommand($rotator, 30.0), // меняет угол new ChangeVelocityCommand(30.0) // и вектор скорости );
📦 Установка
Копировать
Редактировать
git clone https://github.com/MasyaSmv/otus_macro-commands.git
cd otus_macro-commands
composer install
🚀 Быстрый старт
use Masyasmv\OtusMacroCommands\Command\{MoveCommand, CheckFuelCommand, BurnFuelCommand, MacroCommand}; use Masyasmv\OtusMacroCommands\Model\Ship; $ship = new Ship(); // реализует Positionable, VelocityAware, Rotatable, FuelTankAware $ship->refillFuel(100); $moveForward = new MacroCommand( new CheckFuelCommand(10), new MoveCommand(1), new BurnFuelCommand(10) ); $moveForward->execute($ship);
🗂️ Структура
src/ ├── Command/ // все команды (+ исключения) ├── Contract/ // маленькие интерфейсы (Positionable, Rotatable ...) ├── Service/ // Mover, Rotator, FuelTank и т. д. └── ValueObject/ // Vector2D, etc. tests/ // PHPUnit-тесты
🧪 Тесты
# юнит‐тесты composer test # отчёт покрытия (HTML в папке coverage/) composer test-coverage
🔧 CI
В проекте лежит настроенный workflow .github/workflows/ci.yml — он устанавливает PHP 8.3, тянет зависимости и запускает «composer test».
📜 Лицензия
Код распространяется под лицензией MIT — см. LICENSE.