Теперь пора реализовать этот функционал.
Думаю, будем делать это так: каждый раз, как фигура соприкоснулась с чем-либо, мы будем пробегать в цикле по строчкам и проверять их на заполненность. Заполненные строки будем удалять из массива кирпичиков, а на их место сверху будем добавлять пустых клеточек.
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 комментариев