From 3c86eb1f98889f45c3feba1fc821666342ba7ff3 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Sat, 18 Jul 2026 10:53:38 +0300 Subject: [PATCH] =?UTF-8?q?refactor:=20=D0=98=D0=BD=D1=82=D0=B5=D0=B3?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B9?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config.js | 3 ++ src/main.js | 94 ++++++--------------------------------------------- 2 files changed, 14 insertions(+), 83 deletions(-) diff --git a/src/config.js b/src/config.js index 6784004..20c039a 100644 --- a/src/config.js +++ b/src/config.js @@ -10,3 +10,6 @@ export const BALL_INITIAL_ANGLE = 180; export const BRICK_WIDTH = 40; export const BRICK_HEIGHT = 10; + +export const BRICK_ROW_AMOUNT = 5; +export const BRICK_COLUMN_AMOUNT = 20; diff --git a/src/main.js b/src/main.js index 9754c58..ed9fa34 100644 --- a/src/main.js +++ b/src/main.js @@ -4,15 +4,19 @@ import { BALL_INITIAL_ANGLE, BALL_RADIUS, BALL_SPEED, + BRICK_COLUMN_AMOUNT, BRICK_HEIGHT, + BRICK_ROW_AMOUNT, BRICK_WIDTH, CONTAINER_HEIGHT, CONTAINER_WIDTH, PADDLE_HEIGHT, PADDLE_WIDTH, } from './config'; +import { Game } from './game'; import { calculateCollision } from './lib/calculateCollision/calculateCollision'; import { calculateDirection } from './lib/calculateDirection/calculateDirection'; +import { createGameView, syncronizeViewsWithGame } from './view'; (async () => { // Create a new application @@ -35,95 +39,19 @@ import { calculateDirection } from './lib/calculateDirection/calculateDirection' app.stage.addChild(container); - const paddle = new Graphics().rect(0, CONTAINER_HEIGHT - PADDLE_HEIGHT, PADDLE_WIDTH, PADDLE_HEIGHT).fill('#fff000'); - container.addChild(paddle); + const game = new Game(BRICK_COLUMN_AMOUNT, BRICK_ROW_AMOUNT); + const views = createGameView(game, container); container.on('pointermove', (event) => { const localPosition = container.toLocal(event.global); - - if (localPosition.x < CONTAINER_WIDTH - PADDLE_WIDTH) { - paddle.x = localPosition.x; - } + game.paddle.moveTo(localPosition.x, 0, CONTAINER_WIDTH); }); - const bricksRow = Array.from({ length: Math.floor(CONTAINER_WIDTH / BRICK_WIDTH) }).map((_, index) => { - const brick = new Graphics().rect(0, 0, BRICK_WIDTH, BRICK_HEIGHT).fill('#000fff'); - brick.x = index * BRICK_WIDTH; - brick.y = 1; - container.addChild(brick); - return brick; - }); - - const ball = new Graphics().circle(0, 0, BALL_RADIUS).fill('#ffffff'); - ball.x = 100; - ball.y = 100; - container.addChild(ball); - - const leftBoundary = BALL_RADIUS; - const rightBoundary = CONTAINER_WIDTH - BALL_RADIUS; - const topBoundary = BALL_RADIUS; - const bottomBoundary = CONTAINER_HEIGHT - BALL_RADIUS; - const paddleTop = CONTAINER_HEIGHT - PADDLE_HEIGHT; - const bricksBottom = BRICK_HEIGHT; - - let horizontalSpeed = BALL_SPEED * Math.cos(BALL_INITIAL_ANGLE); - let verticalSpeed = -1 * BALL_SPEED * Math.sin(BALL_INITIAL_ANGLE); + console.log(game.paddle.x, game.paddle.y); app.ticker.add((time) => { - // Базоввое взаимодействие мяча и кирпича - for (let i = bricksRow.length - 1; i >= 0; i--) { - const currentBrick = bricksRow[i]; - const brickLeft = currentBrick.x; - const brickRight = currentBrick.x + BRICK_WIDTH; - const brickTop = currentBrick.y; - const brickBottom = currentBrick.y + BRICK_HEIGHT; - - const ballLeft = ball.x - BALL_RADIUS; - const ballRight = ball.x + BALL_RADIUS; - const ballTop = ball.y - BALL_RADIUS; - const ballBottom = ball.y + BALL_RADIUS; - - const ballObject = { left: ballLeft, right: ballRight, top: ballTop, bottom: ballBottom }; - const brickObject = { left: brickLeft, right: brickRight, top: brickTop, bottom: brickBottom }; - - const isCollided = calculateCollision(ballObject, brickObject); - const directions = calculateDirection(ballObject, brickObject); - - if (isCollided && directions !== null) { - horizontalSpeed *= directions[0]; - verticalSpeed *= directions[1]; - - container.removeChild(currentBrick); - currentBrick.destroy(); - bricksRow.splice(i, 1); - - break; - } - } - - // Не даем мячу выйти за границы стен слева / справав и меняем направление - if (ball.x <= leftBoundary || ball.x >= rightBoundary) { - ball.x = ball.x <= leftBoundary ? leftBoundary : rightBoundary; - horizontalSpeed *= -1; - } - - // Не даем мячу выйти за границы стен сверху / снизу и меняем направление - if (ball.y <= topBoundary || ball.y >= bottomBoundary) { - ball.y = ball.y <= topBoundary ? topBoundary : bottomBoundary; - verticalSpeed *= -1; - } - - // Базоввое взаимодействие мяча и ракетки - if ( - verticalSpeed > 0 && - ball.y + BALL_RADIUS >= paddleTop && - ball.x >= paddle.x && - ball.x <= paddle.x + PADDLE_WIDTH - ) { - verticalSpeed *= -1; - } - - ball.x += horizontalSpeed * time.deltaTime; - ball.y += verticalSpeed * time.deltaTime; + game.update(time.deltaTime); + syncronizeViewsWithGame(views, game); + console.log(game.paddle.x, game.paddle.y); }); })();