feat: initial commit with M1-M4 implementation

This commit is contained in:
Vladimir V Maksimov
2026-05-12 10:54:09 +03:00
commit aece34fe73
24 changed files with 1770 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
## Code review
Объект: Physics & Puck Dynamics (M2)
Проверял: bugs, conventions, history, comments, tests.
Найдено и исправлено:
1. **bug** — Boundary Jitter.
`internal/game/world.go`
Проблема: Отсутствие коррекции позиции при отскоке могло привести к застреванию шайбы в стене.
Решение: Добавлен clamping позиции к границам при обнаружении коллизии.
2. **convention** — Float Precision in Tests.
`internal/game/world_test.go`
Проблема: Использование прямого сравнения `!=` для float64.
Решение: Переход на сравнение с использованием epsilon (`math.Abs`).
Итог: Критические баги устранены, тесты проходят.

View File

@@ -0,0 +1,9 @@
## Code review
Объект: Fixes for Striker AI and magic numbers
Проверял: bugs, conventions, history, comments, tests.
Проблем уровня ≥75 не нашёл. Все замечания предыдущего ревью исправлены:
- Логика Striker AI теперь корректно направляет игрока к шайбе в зоне противника.
- Магические числа 640/360 заменены на константы WorldCenterX/Y.
- Тесты в TestWorld_StrikerAI обновлены и проходят.

View File

@@ -0,0 +1,19 @@
## Code review
Объект: uncommitted changes (AI tests and Striker fix)
Найдено: 3 (после фильтра).
1. **bug** — Striker AI logic is inverted (Regression).
`internal/game/world.go:134-136`
Доказательство: `if isOwnZone { return puckPos }`
Почему: Нападающий начинает преследовать шайбу только в своей половине поля, а в чужой остается статичным. Это противоположно логике футбола.
2. **test** — Tests verify incorrect behavior.
`internal/game/world_test.go:88-112`
Доказательство: `TestWorld_StrikerAI` проверяет преследование шайбы в своей зоне.
Почему: Тест является «зеркалом» бага: он проходит, потому что подтверждает неправильное поведение.
3. **convention** — Use of magic numbers for field dimensions.
`internal/game/world.go:133, 138, 141`
Доказательство: `puckPos.X < 640`
Почему: Значения 640 и 360 (центр поля) повторяются многократно. Следует вынести их в именованные константы (например, `WorldCenterX`).