Теперь пора реализовать этот функционал.
Думаю, будем делать это так: каждый раз, как фигура соприкоснулась с чем-либо, мы будем пробегать в цикле по строчкам и проверять их на заполненность. Заполненные строки будем удалять из массива кирпичиков, а на их место сверху будем добавлять пустых клеточек.
var Tetris = {
// ...
figure: {
// ...
joinToBricks: function() {
Tetris.each(this.coords, function(i,j){
var figureRow = Tetris.figure.coords[i][j][0];
var figureCol = Tetris.figure.coords[i][j][1];
if (figureRow >= 0) {
Tetris.pitch.bricks[figureRow][figureCol] = 1;
}
});
// Вот в этом месте фигура уже упала и была объединена с массивом кирпичиков
// Здесь и будем проверять линии
Tetris.checkLines();
},
// ...
},
// ...
checkLines: function() {
// Построим пустую линию (вдруг пригодится)
var emptyLine = [];
for (var i = 0; i < this.pitch.width; i++) {
emptyLine.push(0);
}
// Пройдемся по строчкам
for (var i = 0; i < this.pitch.bricks.length; i++) {
var countFilled = 0; // будем считать количество заполненных клеток
for (var j = 0; j < this.pitch.bricks[i].length; j++) {
if (this.pitch.bricks[i][j]) {
countFilled++;
}
}
// Если количество заполненных клеток равно ширине игрового поля,
// значит вся линия заполнена. Её можно убирать
if (countFilled == this.pitch.width) {
// Удаляем строку из массива
this.pitch.bricks.splice(i, 1);
// И добавляем пустую линию в начало
this.pitch.bricks.unshift(emptyLine);
}
}
}
};
У меня уже получилось собрать несколько линий, даже без поворота фигур: http://jsfiddle.net/ilyautkin/aavju3jd/25/
Объектная
0 комментариев