masyasmv / otus_moving_objects
There is no license information available for the latest version (v1.0.0) of this package.
Moving / Rotating abstractions
v1.0.0
2025-07-15 20:41 UTC
Requires (Dev)
- php: ^8.3
- phpunit/phpunit: ^12.1
- vimeo/psalm: ^6.12
This package is auto-updated.
Last update: 2025-07-30 20:15:10 UTC
README
Space Battle Server — учебный проект по лекции «Определение абстракций, устойчивых к изменениям требований» (Otus). Реализована логика движения и поворота игровых объектов (SOLID, адаптеры, полиморфизм).
Содержание
- Описание
- Требования
- Установка
- Структура проекта
- Использование
- Тестирование
- Статический анализ
- Дальнейшее развитие
- Лицензия
Описание
В проекте реализован серверный движок для игры «Космическая битва». Ключевые возможности:
- Прямолинейное равномерное движение объектов (
Mover
) по вектору скорости. - Поворот объектов вокруг своей оси (
Rotator
) с учётом нормализации угла. - Архитектура на основе интерфейсов (
Positionable
,VelocityAware
,Rotatable
) и Value Object (Vector2D
). - Тесты покрытия всего функционала (PHPUnit).
- CI/CD: GitHub Actions (PHPUnit + Psalm).
Требования
- PHP ≥ 8.3
- Composer
- PHPUnit
- Psalm
Установка
-
Клонировать репозиторий:
git clone https://github.com/MasyaSmv/otus_moving_objects.git cd otus_moving_objects
-
Установить зависимости:
composer install
Структура проекта
├── src/ # Исходный код
│ ├── Contract/ # Интерфейсы
│ ├── Service/ # Классы-реализации (Mover, Rotator)
│ └── ValueObject/ # Непосредственно Vector2D
├── tests/Unit/ # Unit-тесты
├── .github/workflows/ci.yml # CI-конфиг
├── composer.json # Зависимости и автозагрузка
└── psalm.xml # Конфиг статического анализатора
Использование
Пример использования Mover
и Rotator
:
use App\Service\Mover; use App\Service\Rotator; use App\Contract\Positionable; use App\Contract\VelocityAware; use App\Contract\Rotatable; use App\ValueObject\Vector2D; // Пример корабля: class Ship implements Positionable, VelocityAware, Rotatable { use App\Trait\HasPosition; use App\Trait\HasVelocity; use App\Trait\HasAngle; public function __construct() { $this->setPosition(new Vector2D(0, 0)); $this->velocity = new Vector2D(1, 0); } } $ship = new Ship(); $mover = new Mover(); $mover->move($ship); $rotator = new Rotator(); $rotator->rotate($ship, 45);
Тестирование
Запуск всех тестов:
vendor/bin/phpunit --colors=always
Статический анализ
Запуск Psalm для проверки типов и качества кода:
vendor/bin/psalm --shepherd --stats
Лицензия
MIT © MasyaSmv