feat: Добавлена базовая логика проигрыша

This commit is contained in:
Ilia Mashkov
2026-07-18 13:01:43 +03:00
parent c7721f2b1a
commit fea05e6b97
3 changed files with 27 additions and 3 deletions
+2
View File
@@ -16,6 +16,7 @@ export class Ball {
this.radius = radius; this.radius = radius;
this.verticalSpeed = verticalSpeed; this.verticalSpeed = verticalSpeed;
this.horizontalSpeed = horizontalSpeed; this.horizontalSpeed = horizontalSpeed;
this.isOut = false;
this.defaultX = x; this.defaultX = x;
this.defaultY = y; this.defaultY = y;
@@ -40,5 +41,6 @@ export class Ball {
this.y = this.defaultY; this.y = this.defaultY;
this.verticalSpeed = this.defaultVerticalSpeed; this.verticalSpeed = this.defaultVerticalSpeed;
this.horizontalSpeed = this.defaultHorizontalSpeed; this.horizontalSpeed = this.defaultHorizontalSpeed;
this.isOut = false;
} }
} }
+16
View File
@@ -23,6 +23,9 @@ export class Game {
* @param {number} rowAmount количество кирпичей по оси Y, неотрицателное, целое число * @param {number} rowAmount количество кирпичей по оси Y, неотрицателное, целое число
*/ */
constructor(columnAmount, rowAmount) { constructor(columnAmount, rowAmount) {
this.livesAmount = 3;
this.status = 'in_process';
this.ball = new Ball( this.ball = new Ball(
CONTAINER_WIDTH / 2 - BALL_RADIUS, CONTAINER_WIDTH / 2 - BALL_RADIUS,
CONTAINER_HEIGHT / 2 - BALL_RADIUS, CONTAINER_HEIGHT / 2 - BALL_RADIUS,
@@ -40,6 +43,19 @@ export class Game {
* @param {*} deltaTime изменение времени из Ticker * @param {*} deltaTime изменение времени из Ticker
*/ */
update(deltaTime) { update(deltaTime) {
if (this.status !== 'in_process') {
return;
}
tick(this, CONTAINER_WIDTH, CONTAINER_HEIGHT, deltaTime); tick(this, CONTAINER_WIDTH, CONTAINER_HEIGHT, deltaTime);
if (this.ball.isOut) {
this.livesAmount -= 1;
if (this.livesAmount === 0) {
this.status = 'over';
} else {
this.ball.reset();
}
}
} }
} }
+9 -3
View File
@@ -43,12 +43,18 @@ export function tick(game, containerWidth, containerHeight, deltaTime) {
ball.horizontalSpeed *= -1; ball.horizontalSpeed *= -1;
} }
// Не даем мячу выйти за границы стен сверху / снизу и меняем направление // Не даем мячу выйти за границу стены сверху и меняем направление
if (ball.y <= topBoundary || ball.y >= bottomBoundary) { if (ball.y <= topBoundary) {
ball.y = ball.y <= topBoundary ? topBoundary : bottomBoundary; ball.y = topBoundary;
ball.verticalSpeed *= -1; ball.verticalSpeed *= -1;
} }
// Проверяем выход за границу стены снизу
if (ball.y >= bottomBoundary) {
game.ball.isOut = true;
return;
}
// Базоввое взаимодействие мяча и кирпича // Базоввое взаимодействие мяча и кирпича
for (const row of bricks) { for (const row of bricks) {
for (const brick of row) { for (const brick of row) {