From a405a91f6508112f704b9d877ea2833315ad7d45 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Sat, 18 Jul 2026 15:40:42 +0300 Subject: [PATCH] =?UTF-8?q?feat(game):=20=D0=97=D0=B0=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B8=20=D0=B2=D0=B7?= =?UTF-8?q?=D0=B0=D0=B8=D0=BC=D0=BE=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BC=D1=8F=D1=87=D0=B0=20=D0=B8=20=D1=80=D0=B0?= =?UTF-8?q?=D0=BA=D0=B5=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config.js | 3 +++ src/lib/tick/tick.js | 28 ++++++++++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/config.js b/src/config.js index 85861db..14bae67 100644 --- a/src/config.js +++ b/src/config.js @@ -3,6 +3,9 @@ export const CONTAINER_HEIGHT = 600; export const PADDLE_WIDTH = 50; export const PADDLE_HEIGHT = 10; +export const MIN_PADDLE_REFLECTION_ANGLE = 20; +export const MAX_PADDLE_REFLECTION_ANGLE = 160; +export const PADDLE_SECTOR_AMOUNT = 20; export const BALL_RADIUS = 10; export const BALL_SPEED = 3; diff --git a/src/lib/tick/tick.js b/src/lib/tick/tick.js index 95ac1f8..bab86bc 100644 --- a/src/lib/tick/tick.js +++ b/src/lib/tick/tick.js @@ -1,7 +1,15 @@ -import { CONTAINER_HEIGHT, CONTAINER_WIDTH } from '../../config'; +import { + BALL_SPEED, + CONTAINER_HEIGHT, + CONTAINER_WIDTH, + MAX_PADDLE_REFLECTION_ANGLE, + MIN_PADDLE_REFLECTION_ANGLE, + PADDLE_SECTOR_AMOUNT, +} from '../../config'; import { Game } from '../../game'; import { calculateCollision } from '../calculateCollision/calculateCollision'; import { calculateDirection } from '../calculateDirection/calculateDirection'; +import { processReflection } from '../processReflection/processReflection'; /** * Функция для вычисления взаимодействий сущностей игры в зависимости от времени из Ticker @@ -92,15 +100,15 @@ export function tick(game, containerWidth, containerHeight, deltaTime) { } } - // Базоввое взаимодействие мяча и ракетки - if ( - ball.verticalSpeed > 0 && - ball.y + ball.radius >= paddle.y && - ball.x >= paddle.x && - ball.x <= paddle.x + paddle.width - ) { - ball.verticalSpeed *= -1; - } + // Взаимодействие мяча и ракетки - обновление горизонтальной и вертикальной скорости в зависимости от сектора попадания + processReflection( + paddle, + ball, + PADDLE_SECTOR_AMOUNT, + MIN_PADDLE_REFLECTION_ANGLE, + MAX_PADDLE_REFLECTION_ANGLE, + BALL_SPEED, + ); } catch (err) { console.error(err); return null;