feat(spawnRandomPerk): Добавлена функция создания случайного бонуса по заданым координатам
This commit is contained in:
@@ -18,3 +18,9 @@ export const BRICK_HEIGHT = 10;
|
|||||||
|
|
||||||
export const BRICK_ROW_AMOUNT = 5;
|
export const BRICK_ROW_AMOUNT = 5;
|
||||||
export const BRICK_COLUMN_AMOUNT = 20;
|
export const BRICK_COLUMN_AMOUNT = 20;
|
||||||
|
|
||||||
|
export const PERK_WIDTH = 16;
|
||||||
|
export const PERK_HEIGHT = 16;
|
||||||
|
export const PERK_FALL_SPEED = 3;
|
||||||
|
export const PERK_DROP_CHANCE = 0.3;
|
||||||
|
export const PERK_BALL_SPEED_DECREASE = 2;
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
import { PERK_FALL_SPEED, PERK_HEIGHT, PERK_WIDTH } from '../../config';
|
||||||
|
import { Perk } from '../../entities/perk/perk';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Типы бонусов
|
||||||
|
*/
|
||||||
|
const DROPPABLE_PERKS = ['slow'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Создает случайный бонус в заданной точке
|
||||||
|
* @param {number} x координата бонуса по оси X
|
||||||
|
* @param {number} y координата бонуса по оси Y
|
||||||
|
* @returns {Perk | null}
|
||||||
|
*/
|
||||||
|
export function spawnRandomPerk(x, y) {
|
||||||
|
try {
|
||||||
|
if (typeof x !== 'number' || typeof y !== 'number') {
|
||||||
|
throw new Error('Координаты бонуса должны являться числами');
|
||||||
|
}
|
||||||
|
|
||||||
|
const type = DROPPABLE_PERKS[Math.floor(Math.random() * DROPPABLE_PERKS.length)];
|
||||||
|
|
||||||
|
return new Perk(x, y, PERK_WIDTH, PERK_HEIGHT, type, PERK_FALL_SPEED);
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
import { PERK_FALL_SPEED, PERK_HEIGHT, PERK_WIDTH } from '../../config';
|
||||||
|
import { Perk } from '../../entities/perk/perk';
|
||||||
|
import { spawnRandomPerk } from './spawnRandomPerk';
|
||||||
|
|
||||||
|
describe('spawnRandomPerk', () => {
|
||||||
|
it('Возвращает корректное значение при неверных типах аргументов', () => {
|
||||||
|
expect(spawnRandomPerk(null, 0)).toBeNull();
|
||||||
|
expect(spawnRandomPerk(0, null)).toBeNull();
|
||||||
|
expect(spawnRandomPerk('10', 0)).toBeNull();
|
||||||
|
expect(spawnRandomPerk(0, undefined)).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Создает бонус в заданной точке с размерами и скоростью из конфига', () => {
|
||||||
|
const perk = spawnRandomPerk(10, 20);
|
||||||
|
|
||||||
|
expect(perk).toBeInstanceOf(Perk);
|
||||||
|
expect(perk.x).toBe(10);
|
||||||
|
expect(perk.y).toBe(20);
|
||||||
|
expect(perk.width).toBe(PERK_WIDTH);
|
||||||
|
expect(perk.height).toBe(PERK_HEIGHT);
|
||||||
|
expect(perk.fallSpeed).toBe(PERK_FALL_SPEED);
|
||||||
|
expect(perk.alive).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user