Skip to content

Commit

Permalink
Исправлены и дополнены тесты и описание задания:
Browse files Browse the repository at this point in the history
Убран метод move у Actor и его использование.
Добавлены тесты на метод act у Fireball.
Добавлены тесты и описания для свойств actors и player для Level
Внесены прочие правки, убран лишний код.
  • Loading branch information
dfitiskin committed May 16, 2017
1 parent 880aab4 commit 0a8089d
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 43 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,8 @@ items.forEach(status);

Имеет свойство `actors` — список движущихся объектов игрового поля, массив объектов `Actor`.

Имеет свойство `player` — движущийся объект тип которого (свойство `type`) равно `player`.

Имеет свойство `height` — высота игрового поля, равное числу строк в сетке из первого аргмента.

Имеет свойство `width` - ширина игрового поля, равное числу ячеек в строке сетки из первого аргмента. При этом, если в разных строках разное число ячеек, то `width` будет равно максимальному количеству ячеек в строке.
Expand Down
24 changes: 0 additions & 24 deletions js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -228,15 +228,6 @@ function initGameObjects() {

var motion = new Vector(this.speed.x, 0).times(step);
this.move(motion, level);
return;
var newPos = this.pos.plus(motion);
var obstacle = level.obstacleAt(newPos, this.size);
if (obstacle) {
level.playerTouched(obstacle);

}
else
this.pos = newPos;
};

Player.prototype.moveY = function (step, level, keys) {
Expand All @@ -245,21 +236,6 @@ function initGameObjects() {

var motion = new Vector(0, this.speed.y).times(step);
this.move(motion, level);
return;
var newPos = this.pos.plus(motion);
var obstacle = level.obstacleAt(newPos, this.size);
if (obstacle) {
level.playerTouched(obstacle);

if (keys.up && this.speed.y > 0) {
this.speed.y = -jumpSpeed;
} else {
this.speed.y = 0;
}

} else {
this.pos = newPos;
}
};

Player.prototype.act = function (step, level, keys) {
Expand Down
8 changes: 4 additions & 4 deletions test/actor.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,25 +113,25 @@ describe('Класс Actor', () => {
it('Имеет свойство left, которое содержит координату левой границы объекта по оси X', () => {
const player = new Actor(position, size);

expect(player.left).is.equal(position.x);
expect(player.left).is.equal(30);
});

it('Имеет свойство right, которое содержит координату правой границы объекта оп оси X', () => {
const player = new Actor(position, size);

expect(player.right).is.equal(position.x + size.x);
expect(player.right).is.equal(35);
});

it('Имеет свойство top, которое содержит координату верхней границы объекта по оси Y', () => {
const player = new Actor(position, size);

expect(player.top).is.equal(position.y);
expect(player.top).is.equal(50);
});

it('Имеет свойство bottom, которое содержит координату правой границы объекта оп оси Y', () => {
const player = new Actor(position, size);

expect(player.bottom).is.equal(position.y + size.y);
expect(player.bottom).is.equal(55);
});
});

Expand Down
12 changes: 6 additions & 6 deletions test/coin.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ describe('Класс Coin', () => {

it('Реальная позициия сдвинута на Vector(0.2, 0.1)', () => {
const coin = new Coin(position);
const realPosition = position.plus(new Vector(0.2, 0.1));
const realPosition = new Vector(5.2, 5.1);

expect(coin.pos).to.eql(realPosition);
});
Expand Down Expand Up @@ -55,7 +55,7 @@ describe('Класс Coin', () => {

coin.updateSpring();

expect(coin.spring).to.equal(initialSpring + coin.springSpeed);
expect(coin.spring).to.equal(initialSpring + 8);
});

it('Если передать время, увеличит свойство spring на springSpeed умноженное на время', () => {
Expand All @@ -65,7 +65,7 @@ describe('Класс Coin', () => {

coin.updateSpring(time);

expect(coin.spring).to.equal(initialSpring + (coin.springSpeed * time));
expect(coin.spring).to.equal(initialSpring + 40);
});
});

Expand All @@ -91,7 +91,7 @@ describe('Класс Coin', () => {

const vector = coin.getSpringVector();

expect(vector.y).to.equal(Math.sin(coin.spring) * coin.springDist);
expect(vector.y).to.equal(Math.sin(coin.spring) * 0.07);
});
});

Expand All @@ -102,7 +102,7 @@ describe('Класс Coin', () => {

coin.getNextPosition();

expect(coin.spring).to.equal(initialSpring + coin.springSpeed);
expect(coin.spring).to.equal(initialSpring + 8);
});

it('Если передать время, увеличит свойство spring на springSpeed умноженное на время', () => {
Expand All @@ -112,7 +112,7 @@ describe('Класс Coin', () => {

coin.getNextPosition(time);

expect(coin.spring).to.equal(initialSpring + (coin.springSpeed * time));
expect(coin.spring).to.equal(initialSpring + 40);
});

it('Вернет вектор', () => {
Expand Down
37 changes: 34 additions & 3 deletions test/fireball.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,15 @@ describe('Класс Fireball', () => {

const nextPosition = ball.getNextPosition();

expect(nextPosition).to.eql(position.plus(speed));
expect(nextPosition).to.eql(new Vector(6, 5));
});

it('Если передать время первым аргументом, то вернет новую позицию увелеченную на вектор скорости помноженный на переданное время', () => {
const ball = new Fireball(position, speed);

const nextPosition = ball.getNextPosition(time);

expect(nextPosition).to.eql(position.plus(speed.times(time)));
expect(nextPosition).to.eql(new Vector(10, 5));
});
});

Expand All @@ -64,7 +64,38 @@ describe('Класс Fireball', () => {

ball.handleObstacle();

expect(ball.speed).to.eql(speed.times(-1));
expect(ball.speed).to.eql(new Vector(-1, -0));
});
});

describe('Метод act', () => {
it('Если препятствий нет, меняет позицию на ту что получена с помощью getNextPosition', () => {
const level = {
obstacleAt() {
return false;
}
};
const ball = new Fireball(position, speed);
const nextPosition = ball.getNextPosition(time);

ball.act(time, level);

expect(ball.speed).to.eql(speed);
expect(ball.pos).to.eql(nextPosition);
});

it('При столкновении с препятствием не меняет позицию объекта, меняет вектор скорости на противоположный', () => {
const level = {
obstacleAt() {
return true;
}
};
const ball = new Fireball(position, speed);

ball.act(time, level);

expect(ball.speed).to.eql(new Vector(-1, -0));
expect(ball.pos).to.eql(position);
});
});
});
19 changes: 17 additions & 2 deletions test/level.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,21 @@ describe('Класс Level', () => {

expect(level.finishDelay).to.equal(1);
});

it('Имеет свойство actors, в котором все движущиеся переданные в конструктор', () => {
const actors = [ player ];
const level = new Level(undefined, actors);

expect(level.actors).to.eql(actors);
});

it('Имеет свойство player, в котором движущийся объект со свойством type равным player', () => {
const player = { type: 'player', title: 'Игрок' };
const coin = { type: 'coin', title: 'Монетка' };
const level = new Level(undefined, [ player, coin ]);

expect(level.player).to.equal(player);
});
});

describe('Метод isFinished', () => {
Expand Down Expand Up @@ -119,12 +134,12 @@ describe('Класс Level', () => {
});

it('Вернет undefined если ни один объект игрового поля не пересекается с переданным объектом', () => {
const player = new Actor(new Vector(1, 1));
const level = new Level(undefined, [player, coin]);
player.move(1, 1);

const actor = level.actorAt(player);

expect(actor).to.be.equal(coin);
expect(actor).to.be.undefined;
});

it('Вернет объект игрового поля, который пересекается с переданным объектом', () => {
Expand Down
8 changes: 4 additions & 4 deletions test/vector.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ describe('Класс Vector', () => {

const newPosition = position.plus(new Vector(left, top));

expect(newPosition.x).is.equal(x + left);
expect(newPosition.y).is.equal(y + top);
expect(newPosition.x).is.equal(8);
expect(newPosition.y).is.equal(17);
});
});

Expand All @@ -63,8 +63,8 @@ describe('Класс Vector', () => {

const newPosition = position.times(n);

expect(newPosition.x).is.equal(x * n);
expect(newPosition.y).is.equal(y * n);
expect(newPosition.x).is.equal(15);
expect(newPosition.y).is.equal(35);
});
});

Expand Down

0 comments on commit 0a8089d

Please sign in to comment.