feat(perk): Добавлен бонус увеличивающий размер ракетки

This commit is contained in:
Ilia Mashkov
2026-07-19 15:32:09 +03:00
parent 511b20c939
commit b7e16f86ea
5 changed files with 33 additions and 9 deletions
+2 -7
View File
@@ -1,11 +1,6 @@
import { PERK_FALL_SPEED, PERK_HEIGHT, PERK_WIDTH } from '../../config';
import { PERK_FALL_SPEED, PERK_HEIGHT, PERK_TYPES, PERK_WIDTH } from '../../config';
import { Perk } from '../../entities/perk/perk';
/**
* Типы бонусов
*/
const DROPPABLE_PERKS = ['slow'];
/**
* Создает случайный бонус в заданной точке
* @param {number} x координата бонуса по оси X
@@ -18,7 +13,7 @@ export function spawnRandomPerk(x, y) {
throw new Error('Координаты бонуса должны являться числами');
}
const type = DROPPABLE_PERKS[Math.floor(Math.random() * DROPPABLE_PERKS.length)];
const type = PERK_TYPES[Math.floor(Math.random() * PERK_TYPES.length)];
return new Perk(x, y, PERK_WIDTH, PERK_HEIGHT, type, PERK_FALL_SPEED);
} catch (err) {
+5 -1
View File
@@ -1,4 +1,4 @@
import { PERK_BALL_SPEED_DECREASE } from '../../config';
import { CONTAINER_WIDTH, PADDLE_WIDE_WIDTH, PERK_BALL_SPEED_DECREASE } from '../../config';
import { Game } from '../../game';
import { calculateCollision } from '../calculateCollision/calculateCollision';
@@ -49,6 +49,10 @@ export function updatePerks(game, containerHeight, deltaTime) {
game.ball.increaseSpeed(-1 * PERK_BALL_SPEED_DECREASE);
}
break;
case 'wide':
paddle.width = PADDLE_WIDE_WIDTH;
paddle.moveTo(paddle.x, 0, CONTAINER_WIDTH);
break;
default:
break;
}
+12
View File
@@ -1,3 +1,4 @@
import { PADDLE_WIDE_WIDTH } from '../../config';
import { Perk } from '../../entities/perk/perk';
import { Game } from '../../game';
import { updatePerks } from './updatePerks';
@@ -36,6 +37,17 @@ describe('updatePerks', () => {
expect(game.ball.speed).toBeLessThan(speedBefore);
});
it('Ловит бонус wide, расширяет ракетку до фиксированной ширины', () => {
const game = new Game([[[1]]]);
const { paddle } = game;
game.perks.push(new Perk(paddle.x, paddle.y - 1, 10, 10, 'wide', 0));
updatePerks(game, 600, 1);
expect(game.perks).toHaveLength(0);
expect(paddle.width).toBe(PADDLE_WIDE_WIDTH);
});
it('Убирает бонус, улетевший за нижнюю границу', () => {
const game = new Game([[[1]]]);
game.perks.push(new Perk(0, 601, 10, 10, 'slow', 0));